message_flow/commands/consumer/command_handler.py (28 lines of code) (raw):
from typing import Callable, Generic, List, Optional, Type
from message_flow.commands.common import C, CommandMessageHeaders
from message_flow.commands.consumer.command_message import CommandMessage
from message_flow.messaging.common import IMessage
CommandResult = Optional[List[IMessage]]
Handler = Callable[[CommandMessage[C]], CommandResult]
class CommandHandler(Generic[C]):
def __init__(
self,
channel: str,
command_class: Type[C],
handler: Handler,
) -> None:
self._channel = channel
self._command_class = command_class
self._handler = handler
@property
def channel(self) -> str:
return self._channel
@property
def command_class(self) -> Type[C]:
return self._command_class
def handles(self, message: IMessage) -> bool:
return self._command_class.__name__ == message.get_required_header(
CommandMessageHeaders.COMMAND_TYPE
)
def invoke_method(self, command_message: CommandMessage) -> CommandResult:
return self._handler(command_message)