forked from p15670423/monkey
Common: Add event type to serialized agent events
This commit is contained in:
parent
03989e1964
commit
ed0e8c4870
|
@ -2,8 +2,9 @@ import logging
|
|||
from typing import Generic, Type, TypeVar
|
||||
|
||||
from common.events import AbstractAgentEvent
|
||||
from common.utils.code_utils import del_key
|
||||
|
||||
from . import IEventSerializer, JSONSerializable
|
||||
from . import EVENT_TYPE_FIELD, IEventSerializer, JSONSerializable
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -18,7 +19,19 @@ class PydanticEventSerializer(IEventSerializer, Generic[T]):
|
|||
if not isinstance(event, self._event_class):
|
||||
raise TypeError(f"Event object must be of type: {self._event_class.__name__}")
|
||||
|
||||
return event.dict(simplify=True)
|
||||
event_dict = event.dict(simplify=True)
|
||||
event_dict[EVENT_TYPE_FIELD] = type(event).__name__
|
||||
|
||||
return event_dict
|
||||
|
||||
def deserialize(self, serialized_event: JSONSerializable) -> T:
|
||||
return self._event_class(**serialized_event)
|
||||
if not isinstance(serialized_event, dict):
|
||||
raise TypeError(
|
||||
"Serialized pydantic events must be a dictionary, but got {type(serialized_event)}"
|
||||
)
|
||||
|
||||
# pydantic serialized events will always be dicts with a copy() method
|
||||
event_dict = serialized_event.copy() # type: ignore[union-attr]
|
||||
del_key(event_dict, EVENT_TYPE_FIELD)
|
||||
|
||||
return self._event_class(**event_dict)
|
||||
|
|
|
@ -5,7 +5,7 @@ from uuid import UUID
|
|||
import pytest
|
||||
from pydantic import Field
|
||||
|
||||
from common.event_serializers import IEventSerializer, PydanticEventSerializer
|
||||
from common.event_serializers import EVENT_TYPE_FIELD, IEventSerializer, PydanticEventSerializer
|
||||
from common.events import AbstractAgentEvent
|
||||
|
||||
AGENT_ID = UUID("f811ad00-5a68-4437-bd51-7b5cc1768ad5")
|
||||
|
@ -52,3 +52,10 @@ def test_pydanitc_event_serializer__de_serialize(pydantic_event_serializer):
|
|||
|
||||
assert type(serialized_event) != type(deserialized_object)
|
||||
assert deserialized_object == pydantic_event
|
||||
|
||||
|
||||
def test_pydanitc_event_serializer__serialize_inclued_type(pydantic_event_serializer):
|
||||
pydantic_event = PydanticEvent(source=AGENT_ID, some_field="some_field")
|
||||
|
||||
serialized_event = pydantic_event_serializer.serialize(pydantic_event)
|
||||
assert serialized_event[EVENT_TYPE_FIELD] == PydanticEvent.__name__
|
||||
|
|
Loading…
Reference in New Issue