From eaf5179c76fb834c8bb45fca39ec31815dda0ddf Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Fri, 20 Mar 2015 15:16:11 +0200 Subject: [PATCH] Provider.overridden lazy initialization --- objects/providers.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/objects/providers.py b/objects/providers.py index b9afacc1..391aca60 100644 --- a/objects/providers.py +++ b/objects/providers.py @@ -20,7 +20,7 @@ class Provider(object): def __init__(self): """Initializer.""" - self.overridden = list() + self.overridden = None def __call__(self, *args, **kwargs): """Return provided instance.""" @@ -32,18 +32,21 @@ class Provider(object): def override(self, provider): """Override provider with another provider.""" - self.overridden.append(ensure_is_provider(provider)) + if not self.overridden: + self.overridden = (ensure_is_provider(provider),) + else: + self.overridden = self.overridden + (ensure_is_provider(provider),) def reset_override(self): """Reset all overriding providers.""" - self.overridden = list() + self.overridden = None @property def last_overriding(self): """Return last overriding provider.""" try: return self.overridden[-1] - except IndexError: + except (TypeError, IndexError): raise Error('Provider {0} '.format(str(self)) + 'is not overridden')