Refactoring of @inject decorator

This commit is contained in:
Roman Mogilatov 2015-05-16 22:01:03 +03:00
parent 05b65f432c
commit f67343c45c
1 changed files with 12 additions and 5 deletions

View File

@ -15,7 +15,7 @@ def override(catalog):
def inject(injection): def inject(injection):
"""Inject decorator. """Dependency injection decorator.
:type injection: Injection :type injection: Injection
:return: (callable) -> (callable) :return: (callable) -> (callable)
@ -23,12 +23,19 @@ def inject(injection):
injection = ensure_is_injection(injection) injection = ensure_is_injection(injection)
def decorator(callback): def decorator(callback):
"""Decorator.""" """Dependency injection decorator."""
if hasattr(callback, '__injections__'):
callback.__injections__ += (injection,)
@wraps(callback) @wraps(callback)
def decorated(*args, **kwargs): def decorated(*args, **kwargs):
"""Decorated.""" """Decorated with dependency injection callback."""
for injection in getattr(decorated, '__injections__'):
if injection.name not in kwargs: if injection.name not in kwargs:
kwargs[injection.name] = injection.value kwargs[injection.name] = injection.value
return callback(*args, **kwargs) return callback(*args, **kwargs)
setattr(decorated, '__injections__', (injection,))
return decorated return decorated
return decorator return decorator