mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-22 09:36:48 +03:00
Renaming NewInstance provider to Factory provider
This commit is contained in:
parent
405c579f7e
commit
c824eae566
|
@ -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',
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue
Block a user