>>> async def setup(bus):
... bus.register('Logger', 'Test Plugin',
... [],
-... [MessageTemplate({})],
-... callback_for_receiver('Logger'))
+... [([MessageTemplate({})],
+... callback_for_receiver('Logger'))])
... bus.register('Client 1', 'Test Plugin',
... [MessageTemplate({'k1': {'type': 'string'}})],
-... [MessageTemplate({'target': {'const': 'Client 1'}})],
-... callback_for_receiver('Client 1'))
+... [([MessageTemplate({'target': {'const': 'Client 1'}})],
+... callback_for_receiver('Client 1'))])
While most clients should always use their own name for sending, this is not
enforced and debugging or management clients could send messages on behalf
"""
def __init__(self, sender: str,
- init: Dict[str, MessageValue] = None) -> None:
+ init: Optional[Dict[str, MessageValue]] = None) -> None:
"""Initialise message.
Message is initialised with given sender and possibly given
True
"""
- def __init__(self, init: Dict[str, JSONSchema] = None) -> None:
+ def __init__(self, init: Optional[Dict[str, JSONSchema]] = None) -> None:
"""Initialise message.
Template is initialised empty or with given key-value pairs:
for key in kwargs:
self[key] = kwargs[key]
- def setdefault(self, key: str, value: JSONSchema = None) -> JSONSchema:
+ def setdefault(self, key: str,
+ value: Optional[JSONSchema] = None) -> JSONSchema:
"""Override setdefault to use validity checks.
>>> t = MessageTemplate()
... print("Setting up.")
... bus.register('Logger', 'Test Plugin',
... [],
- ... [MessageTemplate({})],
- ... callback_for_receiver('Logger'))
+ ... [([MessageTemplate({})],
+ ... callback_for_receiver('Logger'))])
... bus.register('Client 1', 'Test Plugin',
... [MessageTemplate({'k1': {'type': 'string'}})],
- ... [MessageTemplate({'target': {'const': 'Client 1'}})],
- ... callback_for_receiver('Client 1'))
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 1'}})],
+ ... callback_for_receiver('Client 1'))])
... bus.register('Client 2', 'Test Plugin',
... [MessageTemplate({})],
- ... [MessageTemplate({'target': {'const': 'Client 2'}})],
- ... callback_for_receiver('Client 2'))
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 2'}})],
+ ... 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 'event' and
... bus = MessageBus()
... bus.register('Logger', 'Test Plugin',
... [], # send nothing
- ... [MessageTemplate({})], # receive everything
- ... callback)
+ ... [([MessageTemplate({})], # receive everything
+ ... callback)])
... bus.register('Client 1', 'Test Plugin',
... [MessageTemplate({'k1': {'type': 'string'}})],
... # send with key 'k1' and string value
- ... [MessageTemplate({'target':
- ... {'const': 'Client 1'}})],
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 1'}})],
... # receive for this client
- ... callback)
+ ... callback)])
... bus.register('Client 2', 'Test Plugin',
... [MessageTemplate({})], # send arbitrary
- ... [MessageTemplate({'target':
- ... {'const': 'Client 2'}})],
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 2'}})],
... # receive for this client
- ... callback)
+ ... callback)])
>>> asyncio.run(main())
"""
if not client:
... bus = MessageBus()
... bus.register('Client 1', 'Test Plugin',
... [MessageTemplate({'k1': {'type': 'string'}})],
- ... [MessageTemplate({'target':
- ... {'const': 'Client 1'}})],
- ... callback)
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 1'}})],
+ ... callback)])
... bus.unregister('Client 1')
>>> asyncio.run(main())
"""
... bus = MessageBus()
... bus.register('Client 1', 'Test Plugin',
... [MessageTemplate({'k1': {'type': 'string'}})],
- ... [MessageTemplate({'target':
- ... {'const': 'Client 1'}})],
- ... callback)
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 1'}})],
+ ... callback)])
... bus.register('Client 2', 'Test Plugin',
... [MessageTemplate({})],
- ... [MessageTemplate({'target':
- ... {'const': 'Client 2'}})],
- ... callback)
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 2'}})],
+ ... callback)])
... bus_task = asyncio.create_task(bus.run())
... await bus.send({'sender': 'Client 1', 'target': 'Client 2',
... 'k1': 'Test'})
... bus = MessageBus()
... bus.register('Client 1', 'Test Plugin',
... [MessageTemplate({'k1': {'type': 'string'}})],
- ... [MessageTemplate({'target':
- ... {'const': 'Client 1'}})],
- ... callback)
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 1'}})],
+ ... callback)])
... bus.register('Client 2', 'Test Plugin',
... [MessageTemplate({})],
- ... [MessageTemplate({'target':
- ... {'const': 'Client 2'}})],
- ... callback)
+ ... [([MessageTemplate({'target':
+ ... {'const': 'Client 2'}})],
+ ... callback)])
... bus_task = asyncio.create_task(bus.run())
... bus.send_nowait({'sender': 'Client 1', 'target': 'Client 2',
... 'k1': 'Test'})