python-dependency-injector/examples/external_dependency.py

55 lines
1.4 KiB
Python
Raw Normal View History

"""
Concept example of objects catalogs.
"""
from objects import AbstractCatalog
from objects.providers import Singleton, NewInstance, ExternalDependency
from objects.injections import InitArg, Attribute
import sqlite3
# Some example classes.
class ObjectA(object):
def __init__(self, db):
self.db = db
class ObjectB(object):
def __init__(self, a, db):
self.a = a
self.db = db
# Catalog of objects providers.
class Catalog(AbstractCatalog):
"""
Objects catalog.
"""
database = ExternalDependency(instance_of=sqlite3.Connection)
""" :type: (objects.Provider) -> sqlite3.Connection """
object_a = NewInstance(ObjectA,
InitArg('db', database))
""" :type: (objects.Provider) -> ObjectA """
object_b = NewInstance(ObjectB,
InitArg('a', object_a),
InitArg('db', database))
""" :type: (objects.Provider) -> ObjectB """
# Satisfaction of external dependency.
Catalog.database.satisfy(Singleton(sqlite3.Connection,
InitArg('database', ':memory:'),
Attribute('row_factory', sqlite3.Row)))
# Catalog static provides.
a1, a2 = Catalog.object_a(), Catalog.object_a()
b1, b2 = Catalog.object_b(), Catalog.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 is Catalog.database()