From f023e5a477668b8374a75c78e87d946b21a27f15 Mon Sep 17 00:00:00 2001 From: Alexey Kotlyarov Date: Tue, 8 Dec 2015 12:57:24 +1100 Subject: Don't leave AttributeBuilder in an inconsistent state on exceptions When one of the LazyValues raises an exception, don't leave its name in __pending stack of the AttributeBuilder, preventing evaluation of any other LazyValues. --- factory/containers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/factory/containers.py b/factory/containers.py index 0ae354b..ec33ca1 100644 --- a/factory/containers.py +++ b/factory/containers.py @@ -102,8 +102,10 @@ class LazyStub(object): val = self.__attrs[name] if isinstance(val, LazyValue): self.__pending.append(name) - val = val.evaluate(self, self.__containers) - last = self.__pending.pop() + try: + val = val.evaluate(self, self.__containers) + finally: + last = self.__pending.pop() assert name == last self.__values[name] = val return val -- cgit v1.2.3