From df48c21900f83b6469394d7b281190955edaad57 Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:21:08 +0000 Subject: [PATCH] Migrate triggerlogs to mashumaru (#1277) --- kasa/smart/modules/triggerlogs.py | 15 +++++++++------ tests/smart/modules/test_triggerlogs.py | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 tests/smart/modules/test_triggerlogs.py diff --git a/kasa/smart/modules/triggerlogs.py b/kasa/smart/modules/triggerlogs.py index 480c72f5..be63ff69 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 @@ class TriggerLogs(SmartModule): @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 00000000..c1d95721 --- /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)