1
mirror of https://github.com/home-assistant/core synced 2024-07-15 09:42:11 +02:00

Add support for attribute caching to the text platform (#106262)

This commit is contained in:
J. Nick Koston 2023-12-23 00:10:46 -10:00 committed by GitHub
parent ef0031cbcf
commit ca7daa21fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,7 +6,7 @@ from datetime import timedelta
from enum import StrEnum
import logging
import re
from typing import Any, final
from typing import TYPE_CHECKING, Any, final
import voluptuous as vol
@ -33,6 +33,11 @@ from .const import (
SERVICE_SET_VALUE,
)
if TYPE_CHECKING:
from functools import cached_property
else:
from homeassistant.backports.functools import cached_property
SCAN_INTERVAL = timedelta(seconds=30)
ENTITY_ID_FORMAT = DOMAIN + ".{}"
@ -107,7 +112,16 @@ class TextEntityDescription(EntityDescription, frozen_or_thawed=True):
pattern: str | None = None
class TextEntity(Entity):
CACHED_PROPERTIES_WITH_ATTR_ = {
"mode",
"native_value",
"native_min",
"native_max",
"pattern",
}
class TextEntity(Entity, cached_properties=CACHED_PROPERTIES_WITH_ATTR_):
"""Representation of a Text entity."""
_entity_component_unrecorded_attributes = frozenset(
@ -156,7 +170,7 @@ class TextEntity(Entity):
)
return self.native_value
@property
@cached_property
def mode(self) -> TextMode:
"""Return the mode of the entity."""
if hasattr(self, "_attr_mode"):
@ -165,7 +179,7 @@ class TextEntity(Entity):
return self.entity_description.mode
return TextMode.TEXT
@property
@cached_property
def native_min(self) -> int:
"""Return the minimum length of the value."""
if hasattr(self, "_attr_native_min"):
@ -180,7 +194,7 @@ class TextEntity(Entity):
"""Return the minimum length of the value."""
return max(self.native_min, 0)
@property
@cached_property
def native_max(self) -> int:
"""Return the maximum length of the value."""
if hasattr(self, "_attr_native_max"):
@ -206,7 +220,7 @@ class TextEntity(Entity):
self.__pattern_cmp = re.compile(self.pattern)
return self.__pattern_cmp
@property
@cached_property
def pattern(self) -> str | None:
"""Return the regex pattern that the value must match."""
if hasattr(self, "_attr_pattern"):
@ -215,7 +229,7 @@ class TextEntity(Entity):
return self.entity_description.pattern
return None
@property
@cached_property
def native_value(self) -> str | None:
"""Return the value reported by the text."""
return self._attr_native_value