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!
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.11
3.10
3.9
Installation
Install the latest stable version via pip:
pip install phx-class-registry
Running Unit Tests
Install the package with the test-runner extra to set up the necessary dependencies, and then you can run the tests with the tox command:
pip install -e .[test-runner] tox -p all
Documentation
Documentation is available on ReadTheDocs.
If you are installing from source (see above), you can also build the documentation locally:
Install extra dependencies (you only have to do this once):
pip install -e '.[docs-builder]'
Switch to the docs directory:
cd docs
Build the documentation:
make html
Releases
Steps to build releases are based on Packaging Python Projects Tutorial
Build the Project
Install extra dependencies (you only have to do this once):
pip install -e '.[build-system]'
Run the build:
python -m build
The build artefacts will be located in the dist directory at the top level of the project.
Upload to PyPI
Create a PyPI API token (you only have to do this once).
Increment the version number in pyproject.toml.
Check that the build artefacts are valid, and fix any errors that it finds:
python -m twine check dist/*
Upload build artefacts to PyPI:
python -m twine upload dist/*
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-4.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8de8c0f6137db94459cd48af57910fd2147d95de1543662867f5410dbd08620e |
|
MD5 | 079483ade53165ee90b7d863cac3bc7f |
|
BLAKE2b-256 | 4e0ed427f3f23b722f7805bdf347e87c1df50563ce61708db4fba0d6ce6c4831 |