Renaming Catalog class to AbstractCatalog

This commit is contained in:
Roman Mogilatov 2015-01-18 02:28:41 +02:00
parent 65893178dc
commit 5462bb91c4
6 changed files with 52 additions and 44 deletions

View File

@ -11,7 +11,9 @@ Example of objects catalog definition and usage:
Concept example of objects catalogs. Concept example of objects catalogs.
""" """
from objects import Catalog, Singleton, NewInstance, InitArg, Attribute from objects import AbstractCatalog
from objects.providers import Singleton, NewInstance
from objects.injections import InitArg, Attribute
import sqlite3 import sqlite3
@ -28,7 +30,7 @@ class ObjectB(object):
# Catalog of objects providers. # Catalog of objects providers.
class AppCatalog(Catalog): class Catalog(AbstractCatalog):
""" """
Objects catalog. Objects catalog.
""" """
@ -49,20 +51,20 @@ class AppCatalog(Catalog):
# Catalog static provides. # Catalog static provides.
a1, a2 = AppCatalog.object_a(), AppCatalog.object_a() a1, a2 = Catalog.object_a(), Catalog.object_a()
b1, b2 = AppCatalog.object_b(), AppCatalog.object_b() b1, b2 = Catalog.object_b(), Catalog.object_b()
# Some asserts. # Some asserts.
assert a1 is not a2 assert a1 is not a2
assert b1 is not b2 assert b1 is not b2
assert a1.db is a2.db is b1.db is b2.db is AppCatalog.database() assert a1.db is a2.db is b1.db is b2.db is Catalog.database()
# Dependencies injection (The Python Way) into class. # Dependencies injection (The Python Way) into class.
class Consumer(object): class Consumer(object):
dependencies = AppCatalog(AppCatalog.object_a, dependencies = Catalog(Catalog.object_a,
AppCatalog.object_b) Catalog.object_b)
def test(self): def test(self):
a1 = self.dependencies.object_a() a1 = self.dependencies.object_a()
@ -87,8 +89,8 @@ Consumer().test()
# Dependencies injection (The Python Way) into a callback. # Dependencies injection (The Python Way) into a callback.
def consumer_callback(dependencies=AppCatalog(AppCatalog.object_a, def consumer_callback(dependencies=Catalog(Catalog.object_a,
AppCatalog.object_b)): Catalog.object_b)):
a1 = dependencies.object_a() a1 = dependencies.object_a()
a2 = dependencies.object_a() a2 = dependencies.object_a()
@ -116,7 +118,9 @@ Concept example of objects overrides.
""" """
from objects import Catalog, Singleton, NewInstance, InitArg, Attribute, overrides from objects import AbstractCatalog, overrides
from objects.providers import Singleton, NewInstance
from objects.injections import InitArg, Attribute
import sqlite3 import sqlite3
@ -131,7 +135,7 @@ class ObjectAMock(ObjectA):
# Catalog of objects providers. # Catalog of objects providers.
class AppCatalog(Catalog): class Catalog(AbstractCatalog):
""" """
Objects catalog. Objects catalog.
""" """
@ -146,25 +150,25 @@ class AppCatalog(Catalog):
""" :type: (objects.Provider) -> ObjectA """ """ :type: (objects.Provider) -> ObjectA """
# Overriding AppCatalog by SandboxCatalog with some mocks. # Overriding Catalog by SandboxCatalog with some mocks.
@overrides(AppCatalog) @overrides(Catalog)
class SandboxCatalog(AppCatalog): class SandboxCatalog(Catalog):
""" """
Sandbox objects catalog with some mocks. Sandbox objects catalog with some mocks.
""" """
object_a = NewInstance(ObjectAMock, object_a = NewInstance(ObjectAMock,
InitArg('db', AppCatalog.database)) InitArg('db', Catalog.database))
""" :type: (objects.Provider) -> ObjectA """ """ :type: (objects.Provider) -> ObjectA """
# Catalog static provides. # Catalog static provides.
a1 = AppCatalog.object_a() a1 = Catalog.object_a()
a2 = AppCatalog.object_a() a2 = Catalog.object_a()
# Some asserts. # Some asserts.
assert isinstance(a1, ObjectAMock) assert isinstance(a1, ObjectAMock)
assert isinstance(a2, ObjectAMock) assert isinstance(a2, ObjectAMock)
assert a1 is not a2 assert a1 is not a2
assert a1.db is a2.db is AppCatalog.database() assert a1.db is a2.db is Catalog.database()
``` ```

View File

@ -1 +1 @@
0.0.6 0.1.0

View File

@ -2,7 +2,9 @@
Concept example of objects catalogs. Concept example of objects catalogs.
""" """
from objects import Catalog, Singleton, NewInstance, InitArg, Attribute from objects import AbstractCatalog
from objects.providers import Singleton, NewInstance
from objects.injections import InitArg, Attribute
import sqlite3 import sqlite3
@ -19,7 +21,7 @@ class ObjectB(object):
# Catalog of objects providers. # Catalog of objects providers.
class AppCatalog(Catalog): class Catalog(AbstractCatalog):
""" """
Objects catalog. Objects catalog.
""" """
@ -40,20 +42,20 @@ class AppCatalog(Catalog):
# Catalog static provides. # Catalog static provides.
a1, a2 = AppCatalog.object_a(), AppCatalog.object_a() a1, a2 = Catalog.object_a(), Catalog.object_a()
b1, b2 = AppCatalog.object_b(), AppCatalog.object_b() b1, b2 = Catalog.object_b(), Catalog.object_b()
# Some asserts. # Some asserts.
assert a1 is not a2 assert a1 is not a2
assert b1 is not b2 assert b1 is not b2
assert a1.db is a2.db is b1.db is b2.db is AppCatalog.database() assert a1.db is a2.db is b1.db is b2.db is Catalog.database()
# Dependencies injection (The Python Way) into class. # Dependencies injection (The Python Way) into class.
class Consumer(object): class Consumer(object):
dependencies = AppCatalog(AppCatalog.object_a, dependencies = Catalog(Catalog.object_a,
AppCatalog.object_b) Catalog.object_b)
def test(self): def test(self):
a1 = self.dependencies.object_a() a1 = self.dependencies.object_a()
@ -78,8 +80,8 @@ Consumer().test()
# Dependencies injection (The Python Way) into a callback. # Dependencies injection (The Python Way) into a callback.
def consumer_callback(dependencies=AppCatalog(AppCatalog.object_a, def consumer_callback(dependencies=Catalog(Catalog.object_a,
AppCatalog.object_b)): Catalog.object_b)):
a1 = dependencies.object_a() a1 = dependencies.object_a()
a2 = dependencies.object_a() a2 = dependencies.object_a()

View File

@ -3,7 +3,9 @@ Concept example of objects overrides.
""" """
from objects import Catalog, Singleton, NewInstance, InitArg, Attribute, overrides from objects import AbstractCatalog, overrides
from objects.providers import Singleton, NewInstance
from objects.injections import InitArg, Attribute
import sqlite3 import sqlite3
@ -18,7 +20,7 @@ class ObjectAMock(ObjectA):
# Catalog of objects providers. # Catalog of objects providers.
class AppCatalog(Catalog): class Catalog(AbstractCatalog):
""" """
Objects catalog. Objects catalog.
""" """
@ -33,24 +35,24 @@ class AppCatalog(Catalog):
""" :type: (objects.Provider) -> ObjectA """ """ :type: (objects.Provider) -> ObjectA """
# Overriding AppCatalog by SandboxCatalog with some mocks. # Overriding Catalog by SandboxCatalog with some mocks.
@overrides(AppCatalog) @overrides(Catalog)
class SandboxCatalog(AppCatalog): class SandboxCatalog(Catalog):
""" """
Sandbox objects catalog with some mocks. Sandbox objects catalog with some mocks.
""" """
object_a = NewInstance(ObjectAMock, object_a = NewInstance(ObjectAMock,
InitArg('db', AppCatalog.database)) InitArg('db', Catalog.database))
""" :type: (objects.Provider) -> ObjectA """ """ :type: (objects.Provider) -> ObjectA """
# Catalog static provides. # Catalog static provides.
a1 = AppCatalog.object_a() a1 = Catalog.object_a()
a2 = AppCatalog.object_a() a2 = Catalog.object_a()
# Some asserts. # Some asserts.
assert isinstance(a1, ObjectAMock) assert isinstance(a1, ObjectAMock)
assert isinstance(a2, ObjectAMock) assert isinstance(a2, ObjectAMock)
assert a1 is not a2 assert a1 is not a2
assert a1.db is a2.db is AppCatalog.database() assert a1.db is a2.db is Catalog.database()

View File

@ -2,13 +2,13 @@
`Objects` library. `Objects` library.
""" """
from .catalog import Catalog, overrides from .catalog import AbstractCatalog, overrides
from .providers import (Provider, NewInstance, Singleton, Class, Object, from .providers import (Provider, NewInstance, Singleton, Class, Object,
Function, Value) Function, Value)
from .injections import InitArg, Attribute, Method from .injections import InitArg, Attribute, Method
__all__ = ['Catalog', 'overrides', __all__ = ['AbstractCatalog', 'overrides',
# Providers # Providers
'Provider', 'NewInstance', 'Singleton', 'Class', 'Provider', 'NewInstance', 'Singleton', 'Class',

View File

@ -5,9 +5,9 @@ Catalog module.
from .providers import Provider from .providers import Provider
class Catalog(object): class AbstractCatalog(object):
""" """
Object provides catalog. Abstract object provides catalog.
""" """
def __init__(self, *used_providers): def __init__(self, *used_providers):
@ -23,7 +23,7 @@ class Catalog(object):
:param item: :param item:
:return: :return:
""" """
attribute = super(Catalog, self).__getattribute__(item) attribute = super(AbstractCatalog, self).__getattribute__(item)
if item in ('__used_providers__',): if item in ('__used_providers__',):
return attribute return attribute
@ -38,7 +38,7 @@ class Catalog(object):
Returns set of all class providers. Returns set of all class providers.
""" """
providers = set() providers = set()
for attr_name in set(dir(cls)) - set(dir(Catalog)): for attr_name in set(dir(cls)) - set(dir(AbstractCatalog)):
provider = getattr(cls, attr_name) provider = getattr(cls, attr_name)
if not isinstance(provider, Provider): if not isinstance(provider, Provider):
continue continue
@ -50,7 +50,7 @@ class Catalog(object):
""" """
Overrides current catalog providers by overriding catalog providers. Overrides current catalog providers by overriding catalog providers.
:param overriding: Catalog :param overriding: AbstractCatalog
""" """
overriden = overriding.__all_providers__() - cls.__all_providers__() overriden = overriding.__all_providers__() - cls.__all_providers__()
for name, provider in overriden: for name, provider in overriden: