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
Install extra dependencies (you only have to do this once):
pip install -e '.[build-system]'
Run the build:
python -m build
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.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3210d375cb7fb9a4eb948d0ee5d97f20f2adc6e83cfb5763db7fcd725c2455f3 |
|
MD5 | 137eaabf1b9622c4fdf642873aebc5fb |
|
BLAKE2b-256 | 64a903190fbacea5bf5f2785a8909ce1c506de3bf8178fff45c7c55edfc11a08 |