Skip to content

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