From eb3fde7261bcd2140fcd68f5da64dfa41d6fa4ea Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 25 Dec 2023 09:13:48 -1000 Subject: [PATCH] Avoid clearing the attr cache in setter when nothing has changed (#106384) --- homeassistant/helpers/entity.py | 5 +++++ tests/components/konnected/test_init.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index bf30943fb58..8f344aff484 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -227,6 +227,9 @@ class EntityPlatformState(Enum): REMOVED = auto() +_SENTINEL = object() + + class EntityDescription(metaclass=FrozenOrThawed, frozen_or_thawed=True): """A class that describes Home Assistant entities.""" @@ -346,6 +349,8 @@ class CachedProperties(type): Also invalidates the corresponding cached_property by calling delattr on it. """ + if getattr(o, private_attr_name, _SENTINEL) == val: + return setattr(o, private_attr_name, val) try: # noqa: SIM105 suppress is much slower delattr(o, name) diff --git a/tests/components/konnected/test_init.py b/tests/components/konnected/test_init.py index 2dff9672f17..658f1053f93 100644 --- a/tests/components/konnected/test_init.py +++ b/tests/components/konnected/test_init.py @@ -706,7 +706,7 @@ async def test_state_updates_zone( resp = await client.post( "/api/konnected/device/112233445566", headers={"Authorization": "Bearer abcdefgh"}, - json={"zone": "5", "temp": 32, "addr": 1}, + json={"zone": "5", "temp": 32.0, "addr": 1}, ) assert resp.status == HTTPStatus.OK result = await resp.json() @@ -863,7 +863,7 @@ async def test_state_updates_pin( resp = await client.post( "/api/konnected/device/112233445566", headers={"Authorization": "Bearer abcdefgh"}, - json={"pin": "7", "temp": 32, "addr": 1}, + json={"pin": "7", "temp": 32.0, "addr": 1}, ) assert resp.status == HTTPStatus.OK result = await resp.json()