Blame python-ouimeaux-move-statechange.patch

213e69d
From 607bfb3627c32937ca7e542e462053bbb124ee06 Mon Sep 17 00:00:00 2001
213e69d
From: Andrew Bauer <zonexpertconsulting@outlook.com>
213e69d
Date: Thu, 18 Jun 2020 07:49:49 -0500
213e69d
Subject: [PATCH] move StateChange subclass to signals.py
213e69d
213e69d
---
213e69d
 ouimeaux/signals.py              | 39 ++++++++++++++++++++++++++-
213e69d
 1 files changed, 26 insertions(+), 1 deletions(-)
213e69d
213e69d
diff --git a/ouimeaux/signals.py b/ouimeaux/signals.py
213e69d
index b421aab..22547d2 100644
213e69d
--- a/ouimeaux/signals.py
213e69d
+++ b/ouimeaux/signals.py
213e69d
@@ -1,4 +1,4 @@
213e69d
-from pysignals import Signal, StateChange, receiver
213e69d
+from pysignals import Signal, receiver
213e69d
 
213e69d
 # Work around a bug in pysignals when in the interactive interpreter
213e69d
 import sys
213e69d
@@ -6,6 +6,43 @@
213e69d
 if _main:
213e69d
     _main.__file__ = "__main__.py"
213e69d
 
213e69d
+class StateChange( Signal ):
213e69d
+
213e69d
+    def __init__(self, providing_args=None):
213e69d
+        super(StateChange, self).__init__(providing_args)
213e69d
+        self.sender_status = {}
213e69d
+
213e69d
+    def send(self, sender, **named):
213e69d
+        """
213e69d
+        Send signal from sender to all connected receivers *only if* the signal's
213e69d
+        contents has changed.
213e69d
+        If any receiver raises an error, the error propagates back through send,
213e69d
+        terminating the dispatch loop, so it is quite possible to not have all
213e69d
+        receivers called if a raises an error.
213e69d
+        Arguments:
213e69d
+            sender
213e69d
+                The sender of the signal Either a specific object or None.
213e69d
+            named
213e69d
+                Named arguments which will be passed to receivers.
213e69d
+        Returns a list of tuple pairs [(receiver, response), ... ].
213e69d
+        """
213e69d
+        responses = []
213e69d
+        if not self.receivers:
213e69d
+            return responses
213e69d
+
213e69d
+        sender_id = _make_id(sender)
213e69d
+        if sender_id not in self.sender_status:
213e69d
+            self.sender_status[sender_id] = {}
213e69d
+
213e69d
+        if self.sender_status[sender_id] == named:
213e69d
+            return responses
213e69d
+
213e69d
+        self.sender_status[sender_id] = named
213e69d
+
213e69d
+        for receiver in self._live_receivers(sender_id):
213e69d
+            response = receiver(signal=self, sender=sender, **named)
213e69d
+            responses.append((receiver, response))
213e69d
+        return responses
213e69d
 
213e69d
 # Fires when a device responds to a broadcast 
213e69d
 discovered = Signal(providing_args=["address", "headers"])