From 4423a4f61156b040f54e226a10d67e08b9e0f484 Mon Sep 17 00:00:00 2001 From: Lucas Kanashiro Date: Thu, 23 Jul 2015 14:16:52 -0300 Subject: [PATCH] Overwrite reduce parameter of Signal --- colab/signals/__init__.py | 1 + colab/signals/apps.py | 2 ++ colab/signals/signals.py | 32 -------------------------------- colab/signals/tasks.py | 38 ++++++++++++++++++++++++++++++++++++++ colab/signals/tests/test_signals.py | 11 ++++++----- 5 files changed, 47 insertions(+), 37 deletions(-) delete mode 100644 colab/signals/signals.py create mode 100644 colab/signals/tasks.py diff --git a/colab/signals/__init__.py b/colab/signals/__init__.py index e69de29..ff5979f 100644 --- a/colab/signals/__init__.py +++ b/colab/signals/__init__.py @@ -0,0 +1 @@ +default_app_config = 'colab.signals.apps.SignalsConfig' diff --git a/colab/signals/apps.py b/colab/signals/apps.py index aa98493..5134fdc 100644 --- a/colab/signals/apps.py +++ b/colab/signals/apps.py @@ -4,3 +4,5 @@ from django.apps import AppConfig class SignalsConfig(AppConfig): name = 'colab.signals' + registered_signals = {} + signal_instances = {} diff --git a/colab/signals/signals.py b/colab/signals/signals.py deleted file mode 100644 index fe8bfce..0000000 --- a/colab/signals/signals.py +++ /dev/null @@ -1,32 +0,0 @@ -from django.dispatch import Signal -from colab.signals.celery import app - -registered_signals = {} -signal_instances = {} - - -def register_signal(plugin_name, list_signals): - for signal in list_signals: - if signal in registered_signals: - if not plugin_name in registered_signals[signal]: - registered_signals[signal].append(plugin_name) - else: - registered_signals[signal] = [] - registered_signals[signal].append(plugin_name) - signal_instances[signal] = Signal() - - -def connect_signal(signal_name, sender, handling_method): - if signal_name in signal_instances: - signal_instances[signal_name].connect(handling_method, - sender=sender) - else: - raise Exception("Signal does not exist!") - - -@app.task(bind=True) -def send(self, signal_name, sender, **kwargs): - if signal_name in signal_instances: - signal_instances[signal_name].send(sender=sender) - else: - raise Exception("Signal does not exist!") diff --git a/colab/signals/tasks.py b/colab/signals/tasks.py new file mode 100644 index 0000000..33e3a86 --- /dev/null +++ b/colab/signals/tasks.py @@ -0,0 +1,38 @@ +from django.dispatch import Signal +from colab.signals.celery import app + + +registered_signals = {} +signal_instances = {} + + +# Fix celery serialization for signal +def reducer(self): + return (Signal, (self.providing_args,)) +Signal.__reduce__ = reducer + + +def register_signal(plugin_name, list_signals): + for signal in list_signals: + if signal in registered_signals: + if not plugin_name in registered_signals[signal]: + registered_signals[signal].append(plugin_name) + else: + registered_signals[signal] = [] + registered_signals[signal].append(plugin_name) + signal_instances[signal] = Signal() + + +def connect_signal(signal_name, sender, handling_method): + if signal_name in signal_instances: + signal_instances[signal_name].connect(handling_method.delay, + sender=sender) + else: + raise Exception("Signal does not exist!") + + +def send(signal_name, sender, **kwargs): + if signal_name in signal_instances: + signal_instances[signal_name].send(sender=sender) + else: + raise Exception("Signal does not exist!") diff --git a/colab/signals/tests/test_signals.py b/colab/signals/tests/test_signals.py index 2b3522b..7e65f27 100644 --- a/colab/signals/tests/test_signals.py +++ b/colab/signals/tests/test_signals.py @@ -4,13 +4,16 @@ Objective: Test parameters, and behavior. """ from django.test import TestCase -from colab.signals.signals import * +from django.apps import apps +import django +from colab.signals.tasks import * from mock import patch class SignalsTest(TestCase): def setUp(self): + django.setup() self.list_signal = ['a', 'b', 'c'] self.plugin_name = 'test_signal' @@ -21,8 +24,7 @@ class SignalsTest(TestCase): signal_name ='a' signal_list = ['test_signal'] self.assertEqual(len(registered_signals[signal_name]), 1) - self.assertEqual(registered_signals[signal_name], - signal_list) + self.assertEqual(registered_signals[signal_name], signal_list) def test_register_signal_already_registered(self): @@ -34,8 +36,7 @@ class SignalsTest(TestCase): register_signal(self.plugin_name, self.list_signal) self.assertEqual(len(registered_signals[signal_name]), 1) - self.assertEqual(registered_signals[signal_name], - signal_list) + self.assertEqual(registered_signals[signal_name], signal_list) def test_connect_non_registered_signal(self): -- libgit2 0.21.2