Dependency injection framework for Python
Go to file
Roman Mogilatov 2a29c43115 0.0.2 version
2015-01-10 14:51:30 +02:00
examples updating concept 2015-01-10 11:24:25 +02:00
objects updating concept 2015-01-10 11:24:25 +02:00
tests adding test sample 2015-01-05 17:10:36 +02:00
.gitignore adding first concepts 2015-01-04 15:54:25 +02:00
LICENSE Initial commit 2015-01-04 15:23:05 +02:00
MANIFEST adding MANIFEST 2015-01-05 11:39:16 +02:00
README.md 0.0.2 version 2015-01-10 14:51:30 +02:00
requirements-tests.txt adding requirements-tests.txt 2015-01-05 11:38:49 +02:00
requirements.txt adding six to requirements 2015-01-05 11:38:33 +02:00
setup.py separating pubish and tag setup.py commands 2015-01-05 17:10:12 +02:00
VERSION 0.0.2 version 2015-01-10 14:51:30 +02:00

Objects

Python catalogs of objects providers.

Example:

"""
Concept example of objects catalogs.
"""

from objects import Catalog, Singleton, NewInstance, InitArg, Attribute
import sqlite3


# Some example classes.
class A(object):
    def __init__(self, db):
        self.db = db


class B(object):
    def __init__(self, a, db):
        self.a = a
        self.db = db


# Catalog of objects providers.
class AppCatalog(Catalog):
    """
    Objects catalog.
    """

    database = Singleton(sqlite3.Connection,
                         InitArg('database', ':memory:'),
                         Attribute('row_factory', sqlite3.Row))
    """ :type: (objects.Provider) -> sqlite3.Connection """

    object_a = NewInstance(A,
                           InitArg('db', database))
    """ :type: (objects.Provider) -> A """

    object_b = NewInstance(B,
                           InitArg('a', object_a),
                           InitArg('db', database))
    """ :type: (objects.Provider) -> B """


# Catalog injection into consumer class.
class Consumer(object):
    catalog = AppCatalog(AppCatalog.object_a,
                         AppCatalog.object_b)

    def return_a_b(self):
        return (self.catalog.object_a(),
                self.catalog.object_b())

a1, b1 = Consumer().return_a_b()


# Catalog static provides.
a2 = AppCatalog.object_a()
b2 = AppCatalog.object_b()

# Some asserts.
assert a1 is not a2
assert b1 is not b2
assert a1.db is a2.db is b1.db is b2.db