mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
Enforce EntityCategory enum (#69015)
Co-authored-by: Franck Nijhof <git@frenck.dev>
This commit is contained in:
@@ -91,16 +91,6 @@ class RegistryEntryHider(StrEnum):
|
||||
USER = "user"
|
||||
|
||||
|
||||
def _convert_to_entity_category(
|
||||
value: EntityCategory | str | None, raise_report: bool = True
|
||||
) -> EntityCategory | None:
|
||||
"""Force incoming entity_category to be an enum."""
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from .entity import convert_to_entity_category
|
||||
|
||||
return convert_to_entity_category(value, raise_report=raise_report)
|
||||
|
||||
|
||||
@attr.s(slots=True, frozen=True)
|
||||
class RegistryEntry:
|
||||
"""Entity Registry Entry."""
|
||||
@@ -115,9 +105,7 @@ class RegistryEntry:
|
||||
device_id: str | None = attr.ib(default=None)
|
||||
domain: str = attr.ib(init=False, repr=False)
|
||||
disabled_by: RegistryEntryDisabler | None = attr.ib(default=None)
|
||||
entity_category: EntityCategory | None = attr.ib(
|
||||
default=None, converter=_convert_to_entity_category
|
||||
)
|
||||
entity_category: EntityCategory | None = attr.ib(default=None)
|
||||
hidden_by: RegistryEntryHider | None = attr.ib(default=None)
|
||||
icon: str | None = attr.ib(default=None)
|
||||
id: str = attr.ib(factory=uuid_util.random_uuid_hex)
|
||||
@@ -339,8 +327,7 @@ class EntityRegistry:
|
||||
capabilities: Mapping[str, Any] | None = None,
|
||||
config_entry: ConfigEntry | None = None,
|
||||
device_id: str | None = None,
|
||||
# Type str (ENTITY_CATEG*) is deprecated as of 2021.12, use EntityCategory
|
||||
entity_category: EntityCategory | str | None = None,
|
||||
entity_category: EntityCategory | None = None,
|
||||
original_device_class: str | None = None,
|
||||
original_icon: str | None = None,
|
||||
original_name: str | None = None,
|
||||
@@ -390,13 +377,18 @@ class EntityRegistry:
|
||||
):
|
||||
disabled_by = RegistryEntryDisabler.INTEGRATION
|
||||
|
||||
from .entity import EntityCategory # pylint: disable=import-outside-toplevel
|
||||
|
||||
if entity_category and not isinstance(entity_category, EntityCategory):
|
||||
raise ValueError("entity_category must be a valid EntityCategory instance")
|
||||
|
||||
entry = RegistryEntry(
|
||||
area_id=area_id,
|
||||
capabilities=capabilities,
|
||||
config_entry_id=config_entry_id,
|
||||
device_id=device_id,
|
||||
disabled_by=disabled_by,
|
||||
entity_category=_convert_to_entity_category(entity_category),
|
||||
entity_category=entity_category,
|
||||
entity_id=entity_id,
|
||||
hidden_by=hidden_by,
|
||||
original_device_class=original_device_class,
|
||||
@@ -502,8 +494,7 @@ class EntityRegistry:
|
||||
device_class: str | None | UndefinedType = UNDEFINED,
|
||||
device_id: str | None | UndefinedType = UNDEFINED,
|
||||
disabled_by: RegistryEntryDisabler | None | UndefinedType = UNDEFINED,
|
||||
# Type str (ENTITY_CATEG*) is deprecated as of 2021.12, use EntityCategory
|
||||
entity_category: EntityCategory | str | None | UndefinedType = UNDEFINED,
|
||||
entity_category: EntityCategory | None | UndefinedType = UNDEFINED,
|
||||
hidden_by: RegistryEntryHider | None | UndefinedType = UNDEFINED,
|
||||
icon: str | None | UndefinedType = UNDEFINED,
|
||||
name: str | None | UndefinedType = UNDEFINED,
|
||||
@@ -528,6 +519,15 @@ class EntityRegistry:
|
||||
):
|
||||
raise ValueError("disabled_by must be a RegistryEntryDisabler value")
|
||||
|
||||
from .entity import EntityCategory # pylint: disable=import-outside-toplevel
|
||||
|
||||
if (
|
||||
entity_category
|
||||
and entity_category is not UNDEFINED
|
||||
and not isinstance(entity_category, EntityCategory)
|
||||
):
|
||||
raise ValueError("entity_category must be a valid EntityCategory instance")
|
||||
|
||||
for attr_name, value in (
|
||||
("area_id", area_id),
|
||||
("capabilities", capabilities),
|
||||
@@ -629,6 +629,8 @@ class EntityRegistry:
|
||||
)
|
||||
entities = EntityRegistryItems()
|
||||
|
||||
from .entity import EntityCategory # pylint: disable=import-outside-toplevel
|
||||
|
||||
if data is not None:
|
||||
for entity in data["entities"]:
|
||||
# Some old installations can have some bad entities.
|
||||
@@ -646,9 +648,9 @@ class EntityRegistry:
|
||||
disabled_by=RegistryEntryDisabler(entity["disabled_by"])
|
||||
if entity["disabled_by"]
|
||||
else None,
|
||||
entity_category=_convert_to_entity_category(
|
||||
entity["entity_category"], raise_report=False
|
||||
),
|
||||
entity_category=EntityCategory(entity["entity_category"])
|
||||
if entity["entity_category"]
|
||||
else None,
|
||||
entity_id=entity["entity_id"],
|
||||
hidden_by=entity["hidden_by"],
|
||||
icon=entity["icon"],
|
||||
|
||||
Reference in New Issue
Block a user