From f8c04fa426daff933c32c9c1450c0a97b4d6226c Mon Sep 17 00:00:00 2001 From: Luke Date: Tue, 9 Dec 2025 19:58:28 -0500 Subject: [PATCH] feat: log when we see a new key we have never seen before for easier reverse engineering --- roborock/data/containers.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/roborock/data/containers.py b/roborock/data/containers.py index 0c21720a..215211b9 100644 --- a/roborock/data/containers.py +++ b/roborock/data/containers.py @@ -8,7 +8,7 @@ from dataclasses import asdict, dataclass, field from enum import Enum from functools import cached_property -from typing import Any, NamedTuple, get_args, get_origin +from typing import Any, ClassVar, NamedTuple, get_args, get_origin from .code_mappings import ( SHORT_MODEL_TO_ENUM, @@ -64,6 +64,8 @@ def _attr_repr(obj: Any) -> str: class RoborockBase: """Base class for all Roborock data classes.""" + _missing_logged: ClassVar[set[str]] = set() + @staticmethod def _convert_to_class_obj(class_type: type, value): if get_origin(class_type) is list: @@ -93,6 +95,14 @@ def from_dict(cls, data: dict[str, Any]): for orig_key, value in data.items(): key = _decamelize(orig_key) if (field_type := field_types.get(key)) is None: + if (log_key := f"{cls.__name__}.{key}") not in RoborockBase._missing_logged: + _LOGGER.debug( + "Key '%s' (decamelized: '%s') not found in %s fields, skipping", + orig_key, + key, + cls.__name__, + ) + RoborockBase._missing_logged.add(log_key) continue if value == "None" or value is None: result[key] = None