Send iface at register, 'bus event' to 'event'
authorBenjamin Braatz <bb@bbraatz.eu>
Fri, 5 Mar 2021 09:34:50 +0000 (10:34 +0100)
committerBenjamin Braatz <bb@bbraatz.eu>
Fri, 5 Mar 2021 09:47:11 +0000 (10:47 +0100)
controlpi/__init__.py
controlpi/messagebus.py
doc/index.md

index 176a1c00e62102b826bcf27c9c153cf9368f4ddb..b472781b16c8640194d748cb2afe47a870a283d5 100644 (file)
@@ -71,8 +71,10 @@ client and its registered send and receive templates:
 ...     bus_task.cancel()
 >>> asyncio.run(test_bus())
 BusPlugin 'Bus Test' configured.
-Log: {'sender': '', 'bus event': 'registered', 'client': 'Bus Test'}
-Log: {'sender': '', 'bus event': 'registered', 'client': 'Test'}
+Log: {'sender': '', 'event': 'registered', 'client': 'Bus Test', \
+'sends': [{'event': "<class 'str'>"}], 'receives': [{'target': 'Bus Test'}]}
+Log: {'sender': '', 'event': 'registered', 'client': 'Test', \
+'sends': [{}], 'receives': [{}]}
 Log: {'sender': 'Test', 'target': '', 'command': 'get clients'}
 Log: {'sender': '', 'client': 'Bus Test', \
 'sends': [{'event': "<class 'str'>"}], 'receives': [{'target': 'Bus Test'}]}
index d2853a34cd7fcaab9d21328576bbc57844ed629f..52ec6247e4a56d2c28af009f48ab7fd12cc3a474 100644 (file)
@@ -65,8 +65,10 @@ have to explicitly cancel the task:
 Sending messages.
 Message not allowed for sender Client 1!
 {'sender': 'Client 1', 'k1': 42}
-Logger: {'sender': '', 'bus event': 'registered', 'client': 'Logger'}
-Logger: {'sender': '', 'bus event': 'registered', 'client': 'Client 1'}
+Logger: {'sender': '', 'event': 'registered', 'client': 'Logger', \
+'sends': [], 'receives': [{}]}
+Logger: {'sender': '', 'event': 'registered', 'client': 'Client 1', \
+'sends': [{'k1': "<class 'str'>"}], 'receives': [{'target': 'Client 1'}]}
 Logger: {'sender': 'Client 1', 'k1': 'Test'}
 Logger: {'sender': '', 'target': 'Client 1'}
 Client 1: {'sender': '', 'target': 'Client 1'}
@@ -461,9 +463,9 @@ class MessageBus:
     ...                  callback_for_receiver('Client 2'))
 
     The bus itself is addressed by the empty string. It sends messages for
-    each registration and deregestration of a client with a key 'bus event'
-    and a value of 'registered' or 'unregistered', and a key 'client' with
-    the client's name as value.
+    each registration and deregestration of a client with a key 'event' and
+    a value of 'registered' or 'unregistered', and a key 'client' with the
+    client's name as value.
 
     Clients can send to the bus with the send function. Each message has to
     declare a sender. The send templates of that sender are checked for a
@@ -511,9 +513,12 @@ class MessageBus:
     {'sender': 'Client 1', 'k1': 42}
     Message not allowed for sender Client 1!
     {'sender': 'Client 1', 'k2': 42}
-    Logger: {'sender': '', 'bus event': 'registered', 'client': 'Logger'}
-    Logger: {'sender': '', 'bus event': 'registered', 'client': 'Client 1'}
-    Logger: {'sender': '', 'bus event': 'registered', 'client': 'Client 2'}
+    Logger: {'sender': '', 'event': 'registered', 'client': 'Logger', \
+'sends': [], 'receives': [{}]}
+    Logger: {'sender': '', 'event': 'registered', 'client': 'Client 1', \
+'sends': [{'k1': "<class 'str'>"}], 'receives': [{'target': 'Client 1'}]}
+    Logger: {'sender': '', 'event': 'registered', 'client': 'Client 2', \
+'sends': [{}], 'receives': [{'target': 'Client 2'}]}
     Logger: {'sender': 'Client 1', 'k1': 'Test'}
     Logger: {'sender': 'Client 2', 'target': 'Client 1'}
     Client 1: {'sender': 'Client 2', 'target': 'Client 1'}
@@ -538,7 +543,7 @@ class MessageBus:
         self._recv_reg: MessageTemplateRegistry = MessageTemplateRegistry()
         self._callbacks: dict[str, MessageCallback] = {}
 
-    def register(self, name: str,
+    def register(self, client: str,
                  sends: Iterable[Message],
                  receives: Iterable[Message],
                  callback: MessageCallback) -> None:
@@ -565,19 +570,21 @@ class MessageBus:
         ...                  callback)
         >>> asyncio.run(main())
         """
-        if name in self._callbacks:
-            print(f"Client '{name}' already registered at message bus!")
+        if client in self._callbacks:
+            print(f"Client '{client}' already registered at message bus!")
             return
         for template in sends:
-            self._send_reg.insert(template, name)
+            self._send_reg.insert(template, client)
+        sends = self._send_reg.get_templates(client)
         for template in receives:
-            self._recv_reg.insert(template, name)
-        self._callbacks[name] = callback
-        self._queue.put_nowait({'sender': '',
-                                'bus event': 'registered',
-                                'client': name})
-
-    def unregister(self, name: str) -> None:
+            self._recv_reg.insert(template, client)
+        receives = self._recv_reg.get_templates(client)
+        self._callbacks[client] = callback
+        event = {'sender': '', 'event': 'registered', 'client': client,
+                 'sends': sends, 'receives': receives}
+        self._queue.put_nowait(event)
+
+    def unregister(self, client: str) -> None:
         """Unregister a client from the message bus.
 
         >>> async def callback(message):
@@ -589,13 +596,12 @@ class MessageBus:
         ...     bus.unregister('Client 1')
         >>> asyncio.run(main())
         """
-        self._send_reg.delete(name)
-        self._recv_reg.delete(name)
-        if name in self._callbacks:
-            del self._callbacks[name]
-        self._queue.put_nowait({'sender': '',
-                                'bus event': 'unregistered',
-                                'client': name})
+        self._send_reg.delete(client)
+        self._recv_reg.delete(client)
+        if client in self._callbacks:
+            del self._callbacks[client]
+        event = {'sender': '', 'event': 'unregistered', 'client': client}
+        self._queue.put_nowait(event)
 
     async def run(self) -> None:
         """Run the message bus forever.
index b0fe96fe3ad1abe65862ca26aa62e68e9d6771e7..2d95ac216f1a6fbc18512482de2972bc163af41b 100644 (file)
@@ -319,19 +319,48 @@ Haupt-Routinen, da ihr Verhalten nur als Reaktion auf empfangene
 Nachrichten stattfindet.
 
 ```
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'Example State'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'WaitCheck'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerStateCheck'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerWaitCheck'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'WaitOn'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerStateOnOff'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerWaitOnOff'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'WaitOff'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerStateOffOn'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'TriggerWaitOffOn'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'Test Procedure'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'Debug Logger'}
-Debug Logger: {'sender': '', 'bus event': 'registered', 'client': 'State Change Logger'}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'Example State',
+    'sends': [{'sender': 'Example State', 'state': "<class 'bool'>"}],
+    'receives': [{'target': 'Example State', 'command': 'get state'},
+                 {'target': 'Example State', 'command': 'set state',
+                  'state': "<class 'bool'>"}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'WaitCheck',
+    'sends': [{'event': 'finished'}],
+    'receives': [{'target': 'WaitCheck', 'command': 'wait'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerStateCheck',
+    'sends': [{'target': 'Example State', 'command': 'get state'}],
+    'receives': [{'sender': 'WaitCheck', 'event': 'finished'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerWaitCheck',
+    'sends': [{'target': 'WaitCheck', 'command': 'wait'}],
+    'receives': [{'sender': 'WaitCheck', 'event': 'finished'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'WaitOn',
+    'sends': [{'event': 'finished'}],
+    'receives': [{'target': 'WaitOn', 'command': 'wait'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerStateOnOff',
+    'sends': [{'target': 'Example State', 'command': 'set state', 'state': False}],
+    'receives': [{'sender': 'WaitOn', 'event': 'finished'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerWaitOnOff',
+    'sends': [{'target': 'WaitOff', 'command': 'wait'}],
+    'receives': [{'sender': 'WaitOn', 'event': 'finished'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'WaitOff',
+    'sends': [{'event': 'finished'}],
+    'receives': [{'target': 'WaitOff', 'command': 'wait'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerStateOffOn',
+    'sends': [{'target': 'Example State', 'command': 'set state', 'state': True}],
+    'receives': [{'sender': 'WaitOff', 'event': 'finished'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'TriggerWaitOffOn',
+    'sends': [{'target': 'WaitOn', 'command': 'wait'}],
+    'receives': [{'sender': 'WaitOff', 'event': 'finished'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'Test Procedure',
+    'sends': [{'event': 'started'}, {'event': 'stopped'},
+              {'target': 'WaitCheck', 'command': 'wait'},
+              {'target': 'WaitOff', 'command': 'wait'},
+              {'target': 'Test Procedure', 'command': 'execute'}],
+    'receives': [{'target': 'Test Procedure', 'command': 'execute'}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'Debug Logger',
+    'sends': [], 'receives': [{}]}
+Debug Logger: {'sender': '', 'event': 'registered', 'client': 'State Change Logger',
+    'sends': [], 'receives': [{'sender': 'Example State', 'changed': True}]}
 ```
 Die Instanz `Debug Logger` zeigt uns alle im System verschickten
 Nachrichten an. Zunächst meldet der Nachrichten-Bus selbst alle