mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-07 15:10:47 +03:00
Refactoring of kwargs injecting
This commit is contained in:
parent
0364128ba5
commit
5561069d50
|
@ -3,6 +3,7 @@
|
||||||
from six import wraps
|
from six import wraps
|
||||||
|
|
||||||
from .utils import ensure_is_injection
|
from .utils import ensure_is_injection
|
||||||
|
from .utils import get_injectable_kwargs
|
||||||
|
|
||||||
|
|
||||||
def override(catalog):
|
def override(catalog):
|
||||||
|
@ -30,10 +31,10 @@ def inject(injection):
|
||||||
@wraps(callback)
|
@wraps(callback)
|
||||||
def decorated(*args, **kwargs):
|
def decorated(*args, **kwargs):
|
||||||
"""Decorated with dependency injection callback."""
|
"""Decorated with dependency injection callback."""
|
||||||
for injection in getattr(decorated, '_injections'):
|
return callback(*args,
|
||||||
if injection.name not in kwargs:
|
**get_injectable_kwargs(kwargs,
|
||||||
kwargs[injection.name] = injection.value
|
getattr(decorated,
|
||||||
return callback(*args, **kwargs)
|
'_injections')))
|
||||||
|
|
||||||
setattr(decorated, '_injections', (injection,))
|
setattr(decorated, '_injections', (injection,))
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ from .utils import ensure_is_provider
|
||||||
from .utils import is_kwarg_injection
|
from .utils import is_kwarg_injection
|
||||||
from .utils import is_attribute_injection
|
from .utils import is_attribute_injection
|
||||||
from .utils import is_method_injection
|
from .utils import is_method_injection
|
||||||
|
from .utils import get_injectable_kwargs
|
||||||
|
|
||||||
from .errors import Error
|
from .errors import Error
|
||||||
|
|
||||||
|
@ -118,12 +119,9 @@ class Factory(Provider):
|
||||||
|
|
||||||
def _provide(self, *args, **kwargs):
|
def _provide(self, *args, **kwargs):
|
||||||
"""Return provided instance."""
|
"""Return provided instance."""
|
||||||
init_kwargs = dict(((injection.name, injection.value)
|
instance = self._provides(*args,
|
||||||
for injection in self._kwargs))
|
**get_injectable_kwargs(kwargs,
|
||||||
init_kwargs.update(kwargs)
|
self._kwargs))
|
||||||
|
|
||||||
instance = self._provides(*args, **init_kwargs)
|
|
||||||
|
|
||||||
for attribute in self._attributes:
|
for attribute in self._attributes:
|
||||||
setattr(instance, attribute.name, attribute.value)
|
setattr(instance, attribute.name, attribute.value)
|
||||||
for method in self._methods:
|
for method in self._methods:
|
||||||
|
|
|
@ -49,3 +49,11 @@ def is_method_injection(instance):
|
||||||
"""Check if instance is method injection instance."""
|
"""Check if instance is method injection instance."""
|
||||||
return (not isinstance(instance, class_types) and
|
return (not isinstance(instance, class_types) and
|
||||||
getattr(instance, '__IS_METHOD_INJECTION__', False) is True)
|
getattr(instance, '__IS_METHOD_INJECTION__', False) is True)
|
||||||
|
|
||||||
|
|
||||||
|
def get_injectable_kwargs(kwargs, injections):
|
||||||
|
"""Return dictionary of kwargs, patched with injections."""
|
||||||
|
init_kwargs = dict(((injection.name, injection.value)
|
||||||
|
for injection in injections))
|
||||||
|
init_kwargs.update(kwargs)
|
||||||
|
return init_kwargs
|
||||||
|
|
Loading…
Reference in New Issue
Block a user