Message handlers
depeche_db.MessageHandlerRegisterProtocol
Bases: Protocol
, Generic[E]
Message handler register protocol is used by runners to find handlers for messages.
Implemented by
get_all_handlers()
Returns all registered handlers.
get_handler(message_type)
Returns a handler for a given message type.
depeche_db.MessageHandlerRegister()
Bases: Generic[E]
Message handler register is a registry of message handlers.
Typical usage:
handlers = MessageHandlerRegister()
@handlers.register
def handle_message(message: MyMessage):
...
@handlers.register
def handle_other_message(message: StoredMessage[MyOtherMessage]):
...
Implements: MessageHandlerRegisterProtocol
register(handler)
Registers a handler for a given message type.
The handler must have at least one parameter. The first parameter must
be of a message type. E
being your message type, the parameter can be
of type E
, SubscriptionMessage[E]
or StoredMessage[E]
. When a
handler is called, the message will be passed in the requested type.
Multiple handlers can be registered for non-overlapping types of
messages. Overlaps will cause a ValueError
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
handler |
H
|
A handler function. |
required |
Returns:
Type | Description |
---|---|
H
|
The unaltered handler function. |
register_manual(handler, handled_type, requires_middleware=False)
Registers a handler for a given message type.
The handler must have at least one parameter. The first parameter must be of a message type.
Same overlap rules apply to this method as to the register
method.
If the handler takes more than one parameter, you must set the
requires_middleware
parameter to True
!
Parameters:
Name | Type | Description | Default |
---|---|---|---|
handler |
H
|
A handler function. |
required |
handled_type |
Type
|
The type of message to handle. |
required |
requires_middleware |
bool
|
Whether the handler requires middleware. |
False
|
depeche_db.MessageHandler()
Bases: Generic[E]
Message handler is a base class for message handlers.
This is basically a class-based version of the MessageHandlerRegister
.
Typical usage (equivalent to the example in MessageHandlerRegister
):
class MyMessageHandler(MessageHandler):
@MessageHandler.register
def handle_message(self, message: MyMessage):
...
@MessageHandler.register
def handle_other_message(self, message: StoredMessage[MyOtherMessage]):
...
Implements: MessageHandlerRegisterProtocol