1
0
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:
Paulus Schoutsen
2022-03-31 15:04:33 -07:00
committed by GitHub
parent 824066f519
commit 130ca2213f
11 changed files with 63 additions and 90 deletions

View File

@@ -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"],