Renaming NewInstance provider to Factory provider

This commit is contained in:
Roman Mogilatov 2015-05-14 11:35:41 +03:00
parent 405c579f7e
commit c824eae566
5 changed files with 55 additions and 43 deletions

View File

@ -7,7 +7,7 @@ from .catalog import AbstractCatalog
from .providers import Provider
from .providers import Delegate
from .providers import NewInstance
from .providers import Factory
from .providers import Singleton
from .providers import ExternalDependency
from .providers import Class
@ -32,7 +32,7 @@ __all__ = ('AbstractCatalog',
# Providers
'Provider',
'Delegate',
'NewInstance',
'Factory',
'Singleton',
'ExternalDependency',
'Class',

View File

@ -69,11 +69,11 @@ class Delegate(Provider):
return self.delegated
class NewInstance(Provider):
class Factory(Provider):
"""New instance provider.
"""Factory provider.
New instance providers will create and return new instance on every call.
Factory providers will create and return new instance on every call.
"""
__slots__ = ('provides', 'kwargs', 'attributes', 'methods')
@ -81,7 +81,7 @@ class NewInstance(Provider):
def __init__(self, provides, *injections):
"""Initializer."""
if not isinstance(provides, class_types):
raise Error('NewInstance provider expects to get class, ' +
raise Error('Factory provider expects to get class, ' +
'got {0} instead'.format(str(provides)))
self.provides = provides
self.kwargs = tuple((injection
@ -93,7 +93,7 @@ class NewInstance(Provider):
self.methods = tuple((injection
for injection in injections
if is_method_injection(injection)))
super(NewInstance, self).__init__()
super(Factory, self).__init__()
def __call__(self, *args, **kwargs):
"""Return provided instance."""
@ -114,24 +114,35 @@ class NewInstance(Provider):
return instance
class Singleton(NewInstance):
class NewInstance(Factory):
"""NewInstance provider.
It is synonym of Factory provider. NewInstance provider is considered to
be deprecated, but will be able to use for further backward
compatibility.
"""
class Singleton(Provider):
"""Singleton provider.
Singleton provider will create instance once and return it on every call.
"""
__slots__ = ('instance',)
__slots__ = ('instance', 'factory')
def __init__(self, *args, **kwargs):
"""Initializer."""
self.instance = None
super(Singleton, self).__init__(*args, **kwargs)
self.factory = Factory(*args, **kwargs)
super(Singleton, self).__init__()
def __call__(self, *args, **kwargs):
"""Return provided instance."""
if not self.instance:
self.instance = super(Singleton, self).__call__(*args, **kwargs)
self.instance = self.factory(*args, **kwargs)
return self.instance
def reset(self):

View File

@ -7,7 +7,7 @@ from objects.decorators import inject
from objects.catalog import AbstractCatalog
from objects.providers import NewInstance
from objects.providers import Factory
from objects.providers import Object
from objects.providers import Value
@ -40,14 +40,15 @@ class OverrideTests(unittest.TestCase):
self.assertEqual(self.Catalog.obj(), 1)
self.assertEqual(self.Catalog.another_obj(), 2)
class InjectTests(unittest.TestCase):
"""Inject decorator test cases."""
def test_decorated(self):
"""Test `inject()` decorated callback."""
provider1 = NewInstance(object)
provider2 = NewInstance(list)
provider1 = Factory(object)
provider2 = Factory(list)
@inject(KwArg('a', provider1))
@inject(KwArg('b', provider2))
@ -67,8 +68,8 @@ class InjectTests(unittest.TestCase):
def test_decorated_kwargs_priority(self):
"""Test `inject()` decorated callback kwargs priority."""
provider1 = NewInstance(object)
provider2 = NewInstance(list)
provider1 = Factory(object)
provider2 = Factory(list)
object_a = object()
@inject(KwArg('a', provider1))
@ -90,7 +91,7 @@ class InjectTests(unittest.TestCase):
def test_decorated_with_args(self):
"""Test `inject()` decorated callback with args."""
provider = NewInstance(list)
provider = Factory(list)
object_a = object()
@inject(KwArg('b', provider))

View File

@ -7,7 +7,7 @@ from objects.injections import KwArg
from objects.injections import Attribute
from objects.injections import Method
from objects.providers import NewInstance
from objects.providers import Factory
class InjectionTests(unittest.TestCase):
@ -27,7 +27,7 @@ class InjectionTests(unittest.TestCase):
def test_value_with_provider_injectable(self):
"""Test Injection value property with provider."""
injection = Injection('some_arg_name', NewInstance(object))
injection = Injection('some_arg_name', Factory(object))
self.assertIsInstance(injection.value, object)

View File

@ -4,7 +4,7 @@ import unittest2 as unittest
from objects.providers import Provider
from objects.providers import Delegate
from objects.providers import NewInstance
from objects.providers import Factory
from objects.providers import Singleton
from objects.providers import ExternalDependency
from objects.providers import Class
@ -130,13 +130,13 @@ class DelegateTests(unittest.TestCase):
self.assertIs(delegated2, self.delegated)
class NewInstanceTests(unittest.TestCase):
class FactoryTests(unittest.TestCase):
"""NewInstance test cases."""
"""Factory test cases."""
class Example(object):
"""Example class for NewInstance provider tests."""
"""Example class for Factory provider tests."""
def __init__(self, init_arg1=None, init_arg2=None):
"""Initializer.
@ -164,15 +164,15 @@ class NewInstanceTests(unittest.TestCase):
def test_is_provider(self):
"""Test `is_provider` check."""
self.assertTrue(is_provider(NewInstance(self.Example)))
self.assertTrue(is_provider(Factory(self.Example)))
def test_init_with_not_class(self):
"""Test creation of provider with not a class."""
self.assertRaises(Error, NewInstance, 123)
self.assertRaises(Error, Factory, 123)
def test_call(self):
"""Test creation of new instances."""
provider = NewInstance(self.Example)
provider = Factory(self.Example)
instance1 = provider()
instance2 = provider()
@ -182,7 +182,7 @@ class NewInstanceTests(unittest.TestCase):
def test_call_with_init_args(self):
"""Test creation of new instances with init args injections."""
provider = NewInstance(self.Example,
provider = Factory(self.Example,
KwArg('init_arg1', 'i1'),
KwArg('init_arg2', 'i2'))
@ -201,7 +201,7 @@ class NewInstanceTests(unittest.TestCase):
def test_call_with_attributes(self):
"""Test creation of new instances with attribute injections."""
provider = NewInstance(self.Example,
provider = Factory(self.Example,
Attribute('attribute1', 'a1'),
Attribute('attribute2', 'a2'))
@ -220,7 +220,7 @@ class NewInstanceTests(unittest.TestCase):
def test_call_with_methods(self):
"""Test creation of new instances with method injections."""
provider = NewInstance(self.Example,
provider = Factory(self.Example,
Method('method1', 'm1'),
Method('method2', 'm2'))
@ -239,7 +239,7 @@ class NewInstanceTests(unittest.TestCase):
def test_call_with_context_args(self):
"""Test creation of new instances with context args."""
provider = NewInstance(self.Example)
provider = Factory(self.Example)
instance = provider(11, 22)
self.assertEqual(instance.init_arg1, 11)
@ -247,7 +247,7 @@ class NewInstanceTests(unittest.TestCase):
def test_call_with_context_kwargs(self):
"""Test creation of new instances with context kwargs."""
provider = NewInstance(self.Example,
provider = Factory(self.Example,
KwArg('init_arg1', 1))
instance1 = provider(init_arg2=22)
@ -260,9 +260,9 @@ class NewInstanceTests(unittest.TestCase):
def test_call_overridden(self):
"""Test creation of new instances on overridden provider."""
provider = NewInstance(self.Example)
overriding_provider1 = NewInstance(dict)
overriding_provider2 = NewInstance(list)
provider = Factory(self.Example)
overriding_provider1 = Factory(dict)
overriding_provider2 = Factory(list)
provider.override(overriding_provider1)
provider.override(overriding_provider2)
@ -323,12 +323,12 @@ class ExternalDependencyTests(unittest.TestCase):
def test_call_overridden(self):
"""Test call of overridden external dependency."""
self.provider.override(NewInstance(list))
self.provider.override(Factory(list))
self.assertIsInstance(self.provider(), list)
def test_call_overridden_but_not_instance_of(self):
"""Test call of overridden external dependency, but not instance of."""
self.provider.override(NewInstance(dict))
self.provider.override(Factory(dict))
self.assertRaises(Error, self.provider)
def test_call_not_overridden(self):