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

View File

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

View File

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