Factory+Registry pattern for Python classes
Project description
ClassRegistry
At the intersection of the Registry and Factory patterns lies the ClassRegistry:
Define global factories that generate new class instances based on configurable keys.
Seamlessly create powerful service registries.
Integrate with setuptools’s entry_points system to make your registries infinitely extensible by 3rd-party libraries!
And more!
Upgrading from ClassRegistry v4
Getting Started
Create a registry using the class_registry.ClassRegistry class, then decorate any classes that you wish to register with its register method:
from class_registry import ClassRegistry
pokedex = ClassRegistry()
@pokedex.register('fire')
class Charizard(Pokemon):
...
@pokedex.register('grass')
class Bulbasaur(Pokemon):
...
@pokedex.register('water')
class Squirtle(Pokemon):
...
To create a class instance from a registry, use the subscript operator:
# Charizard, I choose you!
fighter1 = pokedex['fire']
# CHARIZARD fainted!
# How come my rival always picks the type that my pokémon is weak against??
fighter2 = pokedex['grass']
Advanced Usage
There’s a whole lot more you can do with ClassRegistry, including:
Provide args and kwargs to new class instances.
Automatically register non-abstract classes.
Integrate with setuptools’s entry_points system so that 3rd-party libraries can add their own classes to your registries.
Wrap your registry in an instance cache to create a service registry.
And more!
For more advanced usage, check out the documentation on ReadTheDocs!
Requirements
ClassRegistry is known to be compatible with the following Python versions:
3.12
3.11
3.10
Installation
Install the latest stable version via pip:
pip install phx-class-registry
Maintainers
To install the distribution for local development, some additional setup is required:
Install poetry (only needs to be done once).
Run the following command to install additional dependencies:
poetry install --with=dev
Activate pre-commit hook:
poetry run autohooks activate --mode=poetry
Running Unit Tests and Type Checker
Run the tests for all supported versions of Python using tox:
poetry run tox -p
If you just want to run unit tests in the current virtualenv (using pytest):
poetry run pytest
If you just want to run type checking in the current virtualenv (using mypy):
poetry run mypy class_registry test
Documentation
To build the documentation locally:
Switch to the docs directory:
cd docs
Build the documentation:
make html
Releases
Steps to build releases are based on Packaging Python Projects Tutorial.
1. Build the Project
Delete artefacts from previous builds, if applicable:
rm dist/*
Run the build:
poetry build
The build artefacts will be located in the dist directory at the top level of the project.
2. Upload to PyPI
Create a PyPI API token (you only have to do this once).
Increment the version number in pyproject.toml.
Upload build artefacts to PyPI:
poetry publish
3. Create GitHub Release
Create a tag and push to GitHub:
git tag <version> git push <version>
<version> must match the updated version number in pyproject.toml.
Go to the Releases page for the repo.
Click Draft a new release.
Select the tag that you created in step 1.
Specify the title of the release (e.g., ClassRegistry v1.2.3).
Write a description for the release. Make sure to include: - Credit for code contributed by community members. - Significant functionality that was added/changed/removed. - Any backwards-incompatible changes and/or migration instructions. - SHA256 hashes of the build artefacts.
GPG-sign the description for the release (ASCII-armoured).
Attach the build artefacts to the release.
Click Publish release.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for phx_class_registry-5.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e0644f779c7d793a96090d938fe4c396f3274dd57563dc1c57ea245b5c07f89 |
|
MD5 | 949252f92c7ce5132e55d63d97a7675f |
|
BLAKE2b-256 | 41e59384dd7f575ade7a14ae4371d6b4eafd997f18577d3e93ccd0e055389b0b |