mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +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
|
Also invalidates the corresponding cached_property by calling
|
||||||
delattr on it.
|
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
|
return
|
||||||
setattr(o, private_attr_name, val)
|
setattr(o, private_attr_name, val)
|
||||||
# Invalidate the cache of the cached property
|
# Invalidate the cache of the cached property
|
||||||
|
@ -2314,7 +2314,12 @@ async def test_update_capabilities_too_often_cooldown(
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@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(
|
async def test_cached_entity_properties(
|
||||||
hass: HomeAssistant, property: str, default_value: Any, values: Any
|
hass: HomeAssistant, property: str, default_value: Any, values: Any
|
||||||
@ -2323,22 +2328,30 @@ async def test_cached_entity_properties(
|
|||||||
ent1 = entity.Entity()
|
ent1 = entity.Entity()
|
||||||
ent2 = entity.Entity()
|
ent2 = entity.Entity()
|
||||||
assert getattr(ent1, property) == default_value
|
assert getattr(ent1, property) == default_value
|
||||||
|
assert type(getattr(ent1, property)) is type(default_value)
|
||||||
assert getattr(ent2, property) == default_value
|
assert getattr(ent2, property) == default_value
|
||||||
|
assert type(getattr(ent2, property)) is type(default_value)
|
||||||
|
|
||||||
# Test set
|
# Test set
|
||||||
setattr(ent1, f"_attr_{property}", values[0])
|
setattr(ent1, f"_attr_{property}", values[0])
|
||||||
assert getattr(ent1, 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 getattr(ent2, property) == default_value
|
||||||
|
assert type(getattr(ent2, property)) is type(default_value)
|
||||||
|
|
||||||
# Test update
|
# Test update
|
||||||
setattr(ent1, f"_attr_{property}", values[1])
|
setattr(ent1, f"_attr_{property}", values[1])
|
||||||
assert getattr(ent1, 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 getattr(ent2, property) == default_value
|
||||||
|
assert type(getattr(ent2, property)) is type(default_value)
|
||||||
|
|
||||||
# Test delete
|
# Test delete
|
||||||
delattr(ent1, f"_attr_{property}")
|
delattr(ent1, f"_attr_{property}")
|
||||||
assert getattr(ent1, property) == default_value
|
assert getattr(ent1, property) == default_value
|
||||||
|
assert type(getattr(ent1, property)) is type(default_value)
|
||||||
assert getattr(ent2, property) == 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:
|
async def test_cached_entity_property_delete_attr(hass: HomeAssistant) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user