DO NOT USE - This is a beta package
Project description
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')
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
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 |