Add aliases to device registry items (#84246)

This commit is contained in:
Erik Montnemery
2022-12-20 23:43:31 +01:00
committed by GitHub
parent 79d3d4ceae
commit 057bb6ea0a
4 changed files with 68 additions and 5 deletions

View File

@@ -32,7 +32,7 @@ DATA_REGISTRY = "device_registry"
EVENT_DEVICE_REGISTRY_UPDATED = "device_registry_updated"
STORAGE_KEY = "core.device_registry"
STORAGE_VERSION_MAJOR = 1
STORAGE_VERSION_MINOR = 3
STORAGE_VERSION_MINOR = 4
SAVE_DELAY = 10
CLEANUP_DELAY = 10
@@ -70,6 +70,7 @@ class DeviceEntryType(StrEnum):
class DeviceEntry:
"""Device Registry Entry."""
aliases: set[str] = attr.ib(factory=set)
area_id: str | None = attr.ib(default=None)
config_entries: set[str] = attr.ib(converter=set, factory=set)
configuration_url: str | None = attr.ib(default=None)
@@ -174,6 +175,9 @@ class DeviceRegistryStore(storage.Store[dict[str, list[dict[str, Any]]]]):
# Version 1.3 adds hw_version
for device in old_data["devices"]:
device["hw_version"] = None
if old_minor_version < 4:
for device in old_data["devices"]:
device["aliases"] = []
if old_major_version > 1:
raise NotImplementedError
@@ -376,6 +380,7 @@ class DeviceRegistry:
device_id: str,
*,
add_config_entry_id: str | UndefinedType = UNDEFINED,
aliases: set[str] | UndefinedType = UNDEFINED,
area_id: str | None | UndefinedType = UNDEFINED,
configuration_url: str | None | UndefinedType = UNDEFINED,
disabled_by: DeviceEntryDisabler | None | UndefinedType = UNDEFINED,
@@ -464,6 +469,7 @@ class DeviceRegistry:
old_values["identifiers"] = old.identifiers
for attr_name, value in (
("aliases", aliases),
("area_id", area_id),
("configuration_url", configuration_url),
("disabled_by", disabled_by),
@@ -542,6 +548,7 @@ class DeviceRegistry:
if data is not None:
for device in data["devices"]:
devices[device["id"]] = DeviceEntry(
aliases=set(device["aliases"]),
area_id=device["area_id"],
config_entries=set(device["config_entries"]),
configuration_url=device["configuration_url"],
@@ -589,6 +596,7 @@ class DeviceRegistry:
data["devices"] = [
{
"aliases": list(entry.aliases),
"area_id": entry.area_id,
"config_entries": list(entry.config_entries),
"configuration_url": entry.configuration_url,