mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Improve entity cached attributes (#128876)
This commit is contained in:
parent
827d6d1d2d
commit
0d447c9d50
@ -337,7 +337,9 @@ class CachedProperties(type):
|
||||
Also invalidates the corresponding cached_property by calling
|
||||
delattr on it.
|
||||
"""
|
||||
if getattr(o, private_attr_name, _SENTINEL) == val:
|
||||
if (
|
||||
old_val := getattr(o, private_attr_name, _SENTINEL)
|
||||
) == val and type(old_val) is type(val):
|
||||
return
|
||||
setattr(o, private_attr_name, val)
|
||||
# Invalidate the cache of the cached property
|
||||
|
@ -2314,7 +2314,12 @@ async def test_update_capabilities_too_often_cooldown(
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("property", "default_value", "values"), [("attribution", None, ["abcd", "efgh"])]
|
||||
("property", "default_value", "values"),
|
||||
[
|
||||
("attribution", None, ["abcd", "efgh"]),
|
||||
("attribution", None, [True, 1]),
|
||||
("attribution", None, [1.0, 1]),
|
||||
],
|
||||
)
|
||||
async def test_cached_entity_properties(
|
||||
hass: HomeAssistant, property: str, default_value: Any, values: Any
|
||||
@ -2323,22 +2328,30 @@ async def test_cached_entity_properties(
|
||||
ent1 = entity.Entity()
|
||||
ent2 = entity.Entity()
|
||||
assert getattr(ent1, property) == default_value
|
||||
assert type(getattr(ent1, property)) is type(default_value)
|
||||
assert getattr(ent2, property) == default_value
|
||||
assert type(getattr(ent2, property)) is type(default_value)
|
||||
|
||||
# Test set
|
||||
setattr(ent1, f"_attr_{property}", values[0])
|
||||
assert getattr(ent1, property) == values[0]
|
||||
assert type(getattr(ent1, property)) is type(values[0])
|
||||
assert getattr(ent2, property) == default_value
|
||||
assert type(getattr(ent2, property)) is type(default_value)
|
||||
|
||||
# Test update
|
||||
setattr(ent1, f"_attr_{property}", values[1])
|
||||
assert getattr(ent1, property) == values[1]
|
||||
assert type(getattr(ent1, property)) is type(values[1])
|
||||
assert getattr(ent2, property) == default_value
|
||||
assert type(getattr(ent2, property)) is type(default_value)
|
||||
|
||||
# Test delete
|
||||
delattr(ent1, f"_attr_{property}")
|
||||
assert getattr(ent1, property) == default_value
|
||||
assert type(getattr(ent1, property)) is type(default_value)
|
||||
assert getattr(ent2, property) == default_value
|
||||
assert type(getattr(ent2, property)) is type(default_value)
|
||||
|
||||
|
||||
async def test_cached_entity_property_delete_attr(hass: HomeAssistant) -> None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user