summaryrefslogtreecommitdiff
path: root/factory
diff options
context:
space:
mode:
authorRaphaël Barrois <raphael.barrois@polytechnique.org>2015-03-26 22:37:54 +0100
committerRaphaël Barrois <raphael.barrois@polytechnique.org>2015-03-26 22:37:54 +0100
commit72fd943513b0e516f06c53b13ff35ca814b0a4a0 (patch)
tree2d0bb5f265860afe363ed95d31191ce5ee40a638 /factory
parent69befae5fde1897cf68c4d44a146db5ba642c814 (diff)
downloadfactory-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.py9
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