providah
providah is a small, simple utility. It is an opinionated approach to creating object factories in Python without adding the additional complexity of maintaining factories.
Concept
The library is utilized as a basic global (to package) Iversion of Control (IoC) Container (Dependency Injection Container). The idea as presented is to provide an approach where all class in a package will automatically be registered. You can also override a specific registered class when you have monkey patched the class. When a new class is added it can manually be added to the registry, and this is helpful for application level classes, local extensions to a library, and so on. In even other situations you may want to add a a class when you want to retain the default version of a class, but want to support an alternative version as well.
Design
Examples
Example 1 - Library Factory
Within an __init__ .py - often at the root of a library's source code. This is ideal when you want to register all classes in the library in a single factory.
from providah.factories.package_factory import PackageFactory
PackageFactory.fill_registry()
Example 2 - Patching
When You want to monkey patch the functionality of a class.
from X import Y
from providah.factories.package_factory import PackageFactory
def new_method(params):
print('Hello there')
Y.print = new_method()
PackageFactory.register(key=str('Y'), library=str('X'), class_def=Y)
Example 3 - Ad Hoc Registration
When you want to add a class that will later be referenced by a label - in the case you are creating more than one class with the same key, but not using library identifiers.
class Writer:
@classmethod
def write(cls) -> None:
raise NotImplementedError('Base class method - must be implemented.')
class A(Writer):
@classmethod
def write(cls) -> None:
print("Hello World")
import sqlite3
class B(Writer):
__db_conn: sqlite3.connect('B.db')
@classmethod
def write(cls):
cls.__write_to_db('Hello World')
@classmethod
def __write_to_db(cls, data: str) -> None:
with cls.db_conn.cursor() as cursor:
cursor.execute(f"INSERT INTO logs VALUES ({data})")
cursor.commit()
from providah.factories.package_factory import PackageFactory
PackageFactory.register(key=str('A'), class_def=A, label=str('print_writer'))
PackageFactory.register(key=str('B'), class_def=A, label=str('db_writer'))
Example 4 - Using IoC Factory
from providah.factories.package_factory import PackageFactory
# Must import library - when library classes added to factory as in Example 1 (above) the
# runtime execution of this will happen when the library is imported.
import some_package
import another_package
# To make sure we get the right version - Exceptions occur otherwise.
some_obj = PackageFactory.create('bob', library='some_package')
another_obj = PackageFactory.create('bob', library='another_package')
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file providah-0.1.15.0.tar.gz.
File metadata
- Download URL: providah-0.1.15.0.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9f814e8b1b00070f2eb4432af4a04322e41914b7414249324973cc658fd9578
|
|
| MD5 |
aaa8f65d0846bfd43b45d3780bd84de4
|
|
| BLAKE2b-256 |
f9d205b5f6fa470a3a29e77c2489ada3d6c4d6475a2f57bc758169ffacc9c7ba
|