Refactoring of kwargs injecting

This commit is contained in:
Roman Mogilatov 2015-07-27 01:44:20 +03:00
parent 0364128ba5
commit 5561069d50
3 changed files with 17 additions and 10 deletions

View File

@ -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,))

View File

@ -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:

View File

@ -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