diff --git a/kasa/smart/modules/triggerlogs.py b/kasa/smart/modules/triggerlogs.py index 480c72f5e..be63ff698 100644 --- a/kasa/smart/modules/triggerlogs.py +++ b/kasa/smart/modules/triggerlogs.py @@ -2,19 +2,22 @@ from __future__ import annotations -from datetime import datetime +from dataclasses import dataclass +from typing import Annotated -from pydantic.v1 import BaseModel, Field, parse_obj_as +from mashumaro import DataClassDictMixin +from mashumaro.types import Alias from ..smartmodule import SmartModule -class LogEntry(BaseModel): +@dataclass +class LogEntry(DataClassDictMixin): """Presentation of a single log entry.""" id: int - event_id: str = Field(alias="eventId") - timestamp: datetime + event_id: Annotated[str, Alias("eventId")] + timestamp: int event: str @@ -31,4 +34,4 @@ def query(self) -> dict: @property def logs(self) -> list[LogEntry]: """Return logs.""" - return parse_obj_as(list[LogEntry], self.data["logs"]) + return [LogEntry.from_dict(log) for log in self.data["logs"]] diff --git a/tests/smart/modules/test_triggerlogs.py b/tests/smart/modules/test_triggerlogs.py new file mode 100644 index 000000000..c1d957217 --- /dev/null +++ b/tests/smart/modules/test_triggerlogs.py @@ -0,0 +1,22 @@ +from kasa import Device, Module + +from ...device_fixtures import parametrize + +triggerlogs = parametrize( + "has trigger_logs", + component_filter="trigger_log", + protocol_filter={"SMART", "SMART.CHILD"}, +) + + +@triggerlogs +async def test_trigger_logs(dev: Device): + """Test that features are registered and work as expected.""" + triggerlogs = dev.modules.get(Module.TriggerLogs) + assert triggerlogs is not None + if logs := triggerlogs.logs: + first = logs[0] + assert isinstance(first.id, int) + assert isinstance(first.timestamp, int) + assert isinstance(first.event, str) + assert isinstance(first.event_id, str)