Skeleton ready
This commit is contained in:
0
feature/__init__.py
Normal file
0
feature/__init__.py
Normal file
0
feature/listen_user_message/__init__.py
Normal file
0
feature/listen_user_message/__init__.py
Normal file
15
feature/listen_user_message/listen_user_message.py
Normal file
15
feature/listen_user_message/listen_user_message.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from typing import override
|
||||
|
||||
from kernel.feature.provider import Provider
|
||||
from kernel.event.registrar import Registrar
|
||||
|
||||
from feature.listen_user_message.manager.message import Message
|
||||
|
||||
class ListenUserMessage(Provider, Registrar):
|
||||
@override
|
||||
def register(self) -> None:
|
||||
self._container.register(Message, Message)
|
||||
|
||||
@override
|
||||
def bootstrap(self) -> None:
|
||||
pass
|
||||
0
feature/listen_user_message/manager/__init__.py
Normal file
0
feature/listen_user_message/manager/__init__.py
Normal file
37
feature/listen_user_message/manager/message.py
Normal file
37
feature/listen_user_message/manager/message.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from aio_pika.abc import AbstractIncomingMessage
|
||||
from json import loads as json_loads
|
||||
|
||||
from kernel.application.enum.encoding import Encoding
|
||||
|
||||
from shared.bus.view.message import Message as BusMessage
|
||||
|
||||
|
||||
class Message:
|
||||
__message: AbstractIncomingMessage
|
||||
__required_columns = [
|
||||
"id",
|
||||
"type",
|
||||
"source",
|
||||
"message",
|
||||
]
|
||||
|
||||
def __init__(self, message: AbstractIncomingMessage) -> None:
|
||||
self.__message = message
|
||||
|
||||
def get_message(self) -> BusMessage:
|
||||
payload: str = self.__message.body.decode(Encoding.utf8)
|
||||
payload_json: dict = json_loads(payload)
|
||||
|
||||
for column in self.__required_columns:
|
||||
if column not in payload_json:
|
||||
raise ValueError(
|
||||
f"Missing required column: {column}"
|
||||
)
|
||||
|
||||
return BusMessage(
|
||||
id=payload_json["id"],
|
||||
type=payload_json["type"],
|
||||
source=payload_json["source"],
|
||||
message=payload_json["message"]
|
||||
)
|
||||
|
||||
0
feature/log_bus_message/__init__.py
Normal file
0
feature/log_bus_message/__init__.py
Normal file
0
feature/log_bus_message/listener/__init__.py
Normal file
0
feature/log_bus_message/listener/__init__.py
Normal file
25
feature/log_bus_message/listener/log_message.py
Normal file
25
feature/log_bus_message/listener/log_message.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from typing import override
|
||||
from logging import Logger
|
||||
|
||||
from kernel.event.listener import Listener
|
||||
|
||||
from shared.bus.view.message import Message
|
||||
|
||||
|
||||
class LogMessage(Listener[Message]):
|
||||
@override
|
||||
async def handle(self, event: str, payload: Message) -> None:
|
||||
logger: Logger = self._container.resolve(Logger)
|
||||
|
||||
logger.info(f"Event: {event}\n")
|
||||
|
||||
content = (
|
||||
f"Received message\n"
|
||||
f"Id: {payload.id}\n"
|
||||
f"Type: {payload.type}\n"
|
||||
f"Source: {payload.source}\n"
|
||||
f"Message: {payload.message}"
|
||||
)
|
||||
|
||||
logger.debug(content)
|
||||
|
||||
18
feature/log_bus_message/log_bus_message.py
Normal file
18
feature/log_bus_message/log_bus_message.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from typing import override
|
||||
|
||||
from kernel.feature.provider import Provider
|
||||
from kernel.event.registrar import Registrar
|
||||
|
||||
from shared.event.type import Type as EventType
|
||||
|
||||
from feature.log_bus_message.listener.log_message import LogMessage
|
||||
|
||||
|
||||
class LogBusMessage(Provider, Registrar):
|
||||
@override
|
||||
def register(self) -> None:
|
||||
pass
|
||||
|
||||
@override
|
||||
def bootstrap(self) -> None:
|
||||
self.add_event_listener(EventType.MESSAGE_RECEIVED, LogMessage)
|
||||
Reference in New Issue
Block a user