diff options
author | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2015-03-26 22:37:54 +0100 |
---|---|---|
committer | Raphaël Barrois <raphael.barrois@polytechnique.org> | 2015-03-26 22:37:54 +0100 |
commit | 72fd943513b0e516f06c53b13ff35ca814b0a4a0 (patch) | |
tree | 2d0bb5f265860afe363ed95d31191ce5ee40a638 /factory | |
parent | 69befae5fde1897cf68c4d44a146db5ba642c814 (diff) | |
download | factory-boy-72fd943513b0e516f06c53b13ff35ca814b0a4a0.tar factory-boy-72fd943513b0e516f06c53b13ff35ca814b0a4a0.tar.gz |
Fix issues between mute_signals() and factory inheritance (Closes #183).
Previously, if a factory was decorated with ``@mute_signals`` and one of
its descendant called another one of its descendant, signals weren't
unmuted properly.
Diffstat (limited to 'factory')
-rw-r--r-- | factory/django.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/factory/django.py b/factory/django.py index 7050366..e823ee9 100644 --- a/factory/django.py +++ b/factory/django.py @@ -269,6 +269,9 @@ class mute_signals(object): signal.receivers = receivers self.paused = {} + def copy(self): + return mute_signals(*self.signals) + def __call__(self, callable_obj): if isinstance(callable_obj, base.FactoryMetaClass): # Retrieve __func__, the *actual* callable object. @@ -277,7 +280,8 @@ class mute_signals(object): @classmethod @functools.wraps(generate_method) def wrapped_generate(*args, **kwargs): - with self: + # A mute_signals() object is not reentrant; use a copy everytime. + with self.copy(): return generate_method(*args, **kwargs) callable_obj._generate = wrapped_generate @@ -286,7 +290,8 @@ class mute_signals(object): else: @functools.wraps(callable_obj) def wrapper(*args, **kwargs): - with self: + # A mute_signals() object is not reentrant; use a copy everytime. + with self.copy(): return callable_obj(*args, **kwargs) return wrapper |