Commit bf316bce4662160d8e1ad4fb605c303e1ddfdee5

Authored by Sergio Oliveira
1 parent b883fd46

Refactored signals connections

Showing 2 changed files with 8 additions and 10 deletions   Show diff stats
colab/__init__.py
1 1 from __future__ import absolute_import
2 2  
3   -from . import plugins
4   -
5 3 # This will make sure the app is always imported when
6 4 # Django starts so that shared_task will use this app.
7 5 from .celery import app as celery_app # noqa
8   -
... ...
colab/signals/signals.py
... ... @@ -7,17 +7,18 @@ registered_signals = {}
7 7 signal_instances = {}
8 8  
9 9  
10   -def reducer(self):
11   - '''
  10 +class ColabSignal(Signal):
  11 + def __reduce__(self):
  12 + """
  13 +
12 14 In order to send a signal to a celery task, it is necessary to pickle
13 15 the objects that will be used as parameters. However,
14 16 django.dispatch.Signal has an instance of threading.Lock, which is an
15 17 object that cannot be pickled. Therefore, this function changes the
16 18 pickle behaviour of Signal, making that only the providind_args of
17   - Signal to be pickled.
18   - '''
19   - return (Signal, (self.providing_args,))
20   -Signal.__reduce__ = reducer
  19 + Signal to be pickled."""
  20 +
  21 + return (ColabSignal, (self.providing_args,))
21 22  
22 23  
23 24 def register_signal(plugin_name, list_signals):
... ... @@ -28,7 +29,7 @@ def register_signal(plugin_name, list_signals):
28 29 else:
29 30 registered_signals[signal] = []
30 31 registered_signals[signal].append(plugin_name)
31   - signal_instances[signal] = Signal()
  32 + signal_instances[signal] = ColabSignal()
32 33  
33 34  
34 35 def connect_signal(signal_name, sender, handling_method):
... ...