Skip to main content

DO NOT USE - This is a sample program

Project description

FOSSA Status

codecov

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

providah-0.1.8.0.tar.gz (5.5 kB view details)

Uploaded Source

File details

Details for the file providah-0.1.8.0.tar.gz.

File metadata

  • Download URL: providah-0.1.8.0.tar.gz
  • Upload date:
  • Size: 5.5 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

Hashes for providah-0.1.8.0.tar.gz
Algorithm Hash digest
SHA256 6702954d86a349336ab0f1e6b5548a6e18a99746d1e66e77896ad1db11adba1d
MD5 e5dc86a70f4433188353b3e865cba041
BLAKE2b-256 ea67186ce572b5083c8d2b96331486fc8d99e97e38100a8e8db5aad0c8adc048

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page