mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-25 11:04:01 +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 Provider
|
||||||
from .providers import Delegate
|
from .providers import Delegate
|
||||||
from .providers import NewInstance
|
from .providers import Factory
|
||||||
from .providers import Singleton
|
from .providers import Singleton
|
||||||
from .providers import ExternalDependency
|
from .providers import ExternalDependency
|
||||||
from .providers import Class
|
from .providers import Class
|
||||||
|
@ -32,7 +32,7 @@ __all__ = ('AbstractCatalog',
|
||||||
# Providers
|
# Providers
|
||||||
'Provider',
|
'Provider',
|
||||||
'Delegate',
|
'Delegate',
|
||||||
'NewInstance',
|
'Factory',
|
||||||
'Singleton',
|
'Singleton',
|
||||||
'ExternalDependency',
|
'ExternalDependency',
|
||||||
'Class',
|
'Class',
|
||||||
|
|
|
@ -69,11 +69,11 @@ class Delegate(Provider):
|
||||||
return self.delegated
|
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')
|
__slots__ = ('provides', 'kwargs', 'attributes', 'methods')
|
||||||
|
@ -81,7 +81,7 @@ class NewInstance(Provider):
|
||||||
def __init__(self, provides, *injections):
|
def __init__(self, provides, *injections):
|
||||||
"""Initializer."""
|
"""Initializer."""
|
||||||
if not isinstance(provides, class_types):
|
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)))
|
'got {0} instead'.format(str(provides)))
|
||||||
self.provides = provides
|
self.provides = provides
|
||||||
self.kwargs = tuple((injection
|
self.kwargs = tuple((injection
|
||||||
|
@ -93,7 +93,7 @@ class NewInstance(Provider):
|
||||||
self.methods = tuple((injection
|
self.methods = tuple((injection
|
||||||
for injection in injections
|
for injection in injections
|
||||||
if is_method_injection(injection)))
|
if is_method_injection(injection)))
|
||||||
super(NewInstance, self).__init__()
|
super(Factory, self).__init__()
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
"""Return provided instance."""
|
"""Return provided instance."""
|
||||||
|
@ -114,24 +114,35 @@ class NewInstance(Provider):
|
||||||
return instance
|
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.
|
||||||
|
|
||||||
Singleton provider will create instance once and return it on every call.
|
Singleton provider will create instance once and return it on every call.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = ('instance',)
|
__slots__ = ('instance', 'factory')
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
"""Initializer."""
|
"""Initializer."""
|
||||||
self.instance = None
|
self.instance = None
|
||||||
super(Singleton, self).__init__(*args, **kwargs)
|
self.factory = Factory(*args, **kwargs)
|
||||||
|
super(Singleton, self).__init__()
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
"""Return provided instance."""
|
"""Return provided instance."""
|
||||||
if not self.instance:
|
if not self.instance:
|
||||||
self.instance = super(Singleton, self).__call__(*args, **kwargs)
|
self.instance = self.factory(*args, **kwargs)
|
||||||
return self.instance
|
return self.instance
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
|
|
@ -7,7 +7,7 @@ from objects.decorators import inject
|
||||||
|
|
||||||
from objects.catalog import AbstractCatalog
|
from objects.catalog import AbstractCatalog
|
||||||
|
|
||||||
from objects.providers import NewInstance
|
from objects.providers import Factory
|
||||||
from objects.providers import Object
|
from objects.providers import Object
|
||||||
from objects.providers import Value
|
from objects.providers import Value
|
||||||
|
|
||||||
|
@ -40,14 +40,15 @@ class OverrideTests(unittest.TestCase):
|
||||||
self.assertEqual(self.Catalog.obj(), 1)
|
self.assertEqual(self.Catalog.obj(), 1)
|
||||||
self.assertEqual(self.Catalog.another_obj(), 2)
|
self.assertEqual(self.Catalog.another_obj(), 2)
|
||||||
|
|
||||||
|
|
||||||
class InjectTests(unittest.TestCase):
|
class InjectTests(unittest.TestCase):
|
||||||
|
|
||||||
"""Inject decorator test cases."""
|
"""Inject decorator test cases."""
|
||||||
|
|
||||||
def test_decorated(self):
|
def test_decorated(self):
|
||||||
"""Test `inject()` decorated callback."""
|
"""Test `inject()` decorated callback."""
|
||||||
provider1 = NewInstance(object)
|
provider1 = Factory(object)
|
||||||
provider2 = NewInstance(list)
|
provider2 = Factory(list)
|
||||||
|
|
||||||
@inject(KwArg('a', provider1))
|
@inject(KwArg('a', provider1))
|
||||||
@inject(KwArg('b', provider2))
|
@inject(KwArg('b', provider2))
|
||||||
|
@ -67,8 +68,8 @@ class InjectTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_decorated_kwargs_priority(self):
|
def test_decorated_kwargs_priority(self):
|
||||||
"""Test `inject()` decorated callback kwargs priority."""
|
"""Test `inject()` decorated callback kwargs priority."""
|
||||||
provider1 = NewInstance(object)
|
provider1 = Factory(object)
|
||||||
provider2 = NewInstance(list)
|
provider2 = Factory(list)
|
||||||
object_a = object()
|
object_a = object()
|
||||||
|
|
||||||
@inject(KwArg('a', provider1))
|
@inject(KwArg('a', provider1))
|
||||||
|
@ -90,7 +91,7 @@ class InjectTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_decorated_with_args(self):
|
def test_decorated_with_args(self):
|
||||||
"""Test `inject()` decorated callback with args."""
|
"""Test `inject()` decorated callback with args."""
|
||||||
provider = NewInstance(list)
|
provider = Factory(list)
|
||||||
object_a = object()
|
object_a = object()
|
||||||
|
|
||||||
@inject(KwArg('b', provider))
|
@inject(KwArg('b', provider))
|
||||||
|
|
|
@ -7,7 +7,7 @@ from objects.injections import KwArg
|
||||||
from objects.injections import Attribute
|
from objects.injections import Attribute
|
||||||
from objects.injections import Method
|
from objects.injections import Method
|
||||||
|
|
||||||
from objects.providers import NewInstance
|
from objects.providers import Factory
|
||||||
|
|
||||||
|
|
||||||
class InjectionTests(unittest.TestCase):
|
class InjectionTests(unittest.TestCase):
|
||||||
|
@ -27,7 +27,7 @@ class InjectionTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_value_with_provider_injectable(self):
|
def test_value_with_provider_injectable(self):
|
||||||
"""Test Injection value property with provider."""
|
"""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)
|
self.assertIsInstance(injection.value, object)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import unittest2 as unittest
|
||||||
|
|
||||||
from objects.providers import Provider
|
from objects.providers import Provider
|
||||||
from objects.providers import Delegate
|
from objects.providers import Delegate
|
||||||
from objects.providers import NewInstance
|
from objects.providers import Factory
|
||||||
from objects.providers import Singleton
|
from objects.providers import Singleton
|
||||||
from objects.providers import ExternalDependency
|
from objects.providers import ExternalDependency
|
||||||
from objects.providers import Class
|
from objects.providers import Class
|
||||||
|
@ -130,13 +130,13 @@ class DelegateTests(unittest.TestCase):
|
||||||
self.assertIs(delegated2, self.delegated)
|
self.assertIs(delegated2, self.delegated)
|
||||||
|
|
||||||
|
|
||||||
class NewInstanceTests(unittest.TestCase):
|
class FactoryTests(unittest.TestCase):
|
||||||
|
|
||||||
"""NewInstance test cases."""
|
"""Factory test cases."""
|
||||||
|
|
||||||
class Example(object):
|
class Example(object):
|
||||||
|
|
||||||
"""Example class for NewInstance provider tests."""
|
"""Example class for Factory provider tests."""
|
||||||
|
|
||||||
def __init__(self, init_arg1=None, init_arg2=None):
|
def __init__(self, init_arg1=None, init_arg2=None):
|
||||||
"""Initializer.
|
"""Initializer.
|
||||||
|
@ -164,15 +164,15 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_is_provider(self):
|
def test_is_provider(self):
|
||||||
"""Test `is_provider` check."""
|
"""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):
|
def test_init_with_not_class(self):
|
||||||
"""Test creation of provider with not a class."""
|
"""Test creation of provider with not a class."""
|
||||||
self.assertRaises(Error, NewInstance, 123)
|
self.assertRaises(Error, Factory, 123)
|
||||||
|
|
||||||
def test_call(self):
|
def test_call(self):
|
||||||
"""Test creation of new instances."""
|
"""Test creation of new instances."""
|
||||||
provider = NewInstance(self.Example)
|
provider = Factory(self.Example)
|
||||||
instance1 = provider()
|
instance1 = provider()
|
||||||
instance2 = provider()
|
instance2 = provider()
|
||||||
|
|
||||||
|
@ -182,9 +182,9 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_with_init_args(self):
|
def test_call_with_init_args(self):
|
||||||
"""Test creation of new instances with init args injections."""
|
"""Test creation of new instances with init args injections."""
|
||||||
provider = NewInstance(self.Example,
|
provider = Factory(self.Example,
|
||||||
KwArg('init_arg1', 'i1'),
|
KwArg('init_arg1', 'i1'),
|
||||||
KwArg('init_arg2', 'i2'))
|
KwArg('init_arg2', 'i2'))
|
||||||
|
|
||||||
instance1 = provider()
|
instance1 = provider()
|
||||||
instance2 = provider()
|
instance2 = provider()
|
||||||
|
@ -201,9 +201,9 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_with_attributes(self):
|
def test_call_with_attributes(self):
|
||||||
"""Test creation of new instances with attribute injections."""
|
"""Test creation of new instances with attribute injections."""
|
||||||
provider = NewInstance(self.Example,
|
provider = Factory(self.Example,
|
||||||
Attribute('attribute1', 'a1'),
|
Attribute('attribute1', 'a1'),
|
||||||
Attribute('attribute2', 'a2'))
|
Attribute('attribute2', 'a2'))
|
||||||
|
|
||||||
instance1 = provider()
|
instance1 = provider()
|
||||||
instance2 = provider()
|
instance2 = provider()
|
||||||
|
@ -220,9 +220,9 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_with_methods(self):
|
def test_call_with_methods(self):
|
||||||
"""Test creation of new instances with method injections."""
|
"""Test creation of new instances with method injections."""
|
||||||
provider = NewInstance(self.Example,
|
provider = Factory(self.Example,
|
||||||
Method('method1', 'm1'),
|
Method('method1', 'm1'),
|
||||||
Method('method2', 'm2'))
|
Method('method2', 'm2'))
|
||||||
|
|
||||||
instance1 = provider()
|
instance1 = provider()
|
||||||
instance2 = provider()
|
instance2 = provider()
|
||||||
|
@ -239,7 +239,7 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_with_context_args(self):
|
def test_call_with_context_args(self):
|
||||||
"""Test creation of new instances with context args."""
|
"""Test creation of new instances with context args."""
|
||||||
provider = NewInstance(self.Example)
|
provider = Factory(self.Example)
|
||||||
instance = provider(11, 22)
|
instance = provider(11, 22)
|
||||||
|
|
||||||
self.assertEqual(instance.init_arg1, 11)
|
self.assertEqual(instance.init_arg1, 11)
|
||||||
|
@ -247,8 +247,8 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_with_context_kwargs(self):
|
def test_call_with_context_kwargs(self):
|
||||||
"""Test creation of new instances with context kwargs."""
|
"""Test creation of new instances with context kwargs."""
|
||||||
provider = NewInstance(self.Example,
|
provider = Factory(self.Example,
|
||||||
KwArg('init_arg1', 1))
|
KwArg('init_arg1', 1))
|
||||||
|
|
||||||
instance1 = provider(init_arg2=22)
|
instance1 = provider(init_arg2=22)
|
||||||
self.assertEqual(instance1.init_arg1, 1)
|
self.assertEqual(instance1.init_arg1, 1)
|
||||||
|
@ -260,9 +260,9 @@ class NewInstanceTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_overridden(self):
|
def test_call_overridden(self):
|
||||||
"""Test creation of new instances on overridden provider."""
|
"""Test creation of new instances on overridden provider."""
|
||||||
provider = NewInstance(self.Example)
|
provider = Factory(self.Example)
|
||||||
overriding_provider1 = NewInstance(dict)
|
overriding_provider1 = Factory(dict)
|
||||||
overriding_provider2 = NewInstance(list)
|
overriding_provider2 = Factory(list)
|
||||||
|
|
||||||
provider.override(overriding_provider1)
|
provider.override(overriding_provider1)
|
||||||
provider.override(overriding_provider2)
|
provider.override(overriding_provider2)
|
||||||
|
@ -323,12 +323,12 @@ class ExternalDependencyTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_call_overridden(self):
|
def test_call_overridden(self):
|
||||||
"""Test call of overridden external dependency."""
|
"""Test call of overridden external dependency."""
|
||||||
self.provider.override(NewInstance(list))
|
self.provider.override(Factory(list))
|
||||||
self.assertIsInstance(self.provider(), list)
|
self.assertIsInstance(self.provider(), list)
|
||||||
|
|
||||||
def test_call_overridden_but_not_instance_of(self):
|
def test_call_overridden_but_not_instance_of(self):
|
||||||
"""Test call of overridden external dependency, but not instance of."""
|
"""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)
|
self.assertRaises(Error, self.provider)
|
||||||
|
|
||||||
def test_call_not_overridden(self):
|
def test_call_not_overridden(self):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user