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