python-dependency-injector/objects/decorators.py

42 lines
1.1 KiB
Python
Raw Normal View History

"""Decorators module."""
from six import wraps
from .utils import ensure_is_injection
def override(catalog):
"""Catalog overriding decorator."""
def decorator(overriding_catalog):
"""Overriding decorator."""
catalog.override(overriding_catalog)
return overriding_catalog
return decorator
def inject(injection):
2015-05-16 22:01:03 +03:00
"""Dependency injection decorator.
:type injection: Injection
:return: (callable) -> (callable)
"""
injection = ensure_is_injection(injection)
def decorator(callback):
2015-05-16 22:01:03 +03:00
"""Dependency injection decorator."""
if hasattr(callback, '__injections__'):
callback.__injections__ += (injection,)
@wraps(callback)
def decorated(*args, **kwargs):
2015-05-16 22:01:03 +03:00
"""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)
2015-05-16 22:01:03 +03:00
setattr(decorated, '__injections__', (injection,))
return decorated
return decorator