From a86df491604f844a62facf5658e574f005ab0064 Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Tue, 1 Mar 2016 15:25:34 +0200 Subject: [PATCH] Add providers @override decorator --- dependency_injector/providers.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/dependency_injector/providers.py b/dependency_injector/providers.py index c14eb4b2..67c5cdad 100644 --- a/dependency_injector/providers.py +++ b/dependency_injector/providers.py @@ -1037,3 +1037,32 @@ class ChildConfig(Provider): provides='.'.join(self.parents)) __repr__ = __str__ + + +def override(overridden): + """Decorator for overriding providers. + + This decorator overrides ``overridden`` provider by decorated one. + + .. code-block:: python + + @Factory + class SomeClass(object): + pass + + + @override(SomeClass) + @Factory + class ExtendedSomeClass(SomeClass.cls): + pass + + :param overridden: Provider that should be overridden. + :type overridden: :py:class:`Provider` + + :return: Overriding provider. + :rtype: :py:class:`Provider` + """ + def decorator(overriding): + overridden.override(overriding) + return overriding + return decorator