Add type to device registry (#35095)
parent
6f6c670b3b
commit
b90cb09fd1
homeassistant
components
adguard
config
tests
components/config
|
@ -206,4 +206,5 @@ class AdGuardHomeDeviceEntity(AdGuardHomeEntity):
|
|||
"name": "AdGuard Home",
|
||||
"manufacturer": "AdGuard Team",
|
||||
"sw_version": self.hass.data[DOMAIN].get(DATA_ADGUARD_VERION),
|
||||
"type": "service",
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ def _entry_dict(entry):
|
|||
"model": entry.model,
|
||||
"name": entry.name,
|
||||
"sw_version": entry.sw_version,
|
||||
"entry_type": entry.entry_type,
|
||||
"id": entry.id,
|
||||
"via_device_id": entry.via_device_id,
|
||||
"area_id": entry.area_id,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"""Provide a way to connect entities belonging to one device."""
|
||||
from collections import OrderedDict
|
||||
import logging
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any, Dict, List, Optional, Set, Tuple
|
||||
import uuid
|
||||
|
||||
import attr
|
||||
|
@ -32,19 +32,24 @@ CONNECTION_ZIGBEE = "zigbee"
|
|||
class DeviceEntry:
|
||||
"""Device Registry Entry."""
|
||||
|
||||
config_entries = attr.ib(type=set, converter=set, default=attr.Factory(set))
|
||||
connections = attr.ib(type=set, converter=set, default=attr.Factory(set))
|
||||
identifiers = attr.ib(type=set, converter=set, default=attr.Factory(set))
|
||||
manufacturer = attr.ib(type=str, default=None)
|
||||
model = attr.ib(type=str, default=None)
|
||||
name = attr.ib(type=str, default=None)
|
||||
sw_version = attr.ib(type=str, default=None)
|
||||
via_device_id = attr.ib(type=str, default=None)
|
||||
area_id = attr.ib(type=str, default=None)
|
||||
name_by_user = attr.ib(type=str, default=None)
|
||||
id = attr.ib(type=str, default=attr.Factory(lambda: uuid.uuid4().hex))
|
||||
config_entries: Set[str] = attr.ib(converter=set, default=attr.Factory(set))
|
||||
connections: Set[Tuple[str, str]] = attr.ib(
|
||||
converter=set, default=attr.Factory(set)
|
||||
)
|
||||
identifiers: Set[Tuple[str, str]] = attr.ib(
|
||||
converter=set, default=attr.Factory(set)
|
||||
)
|
||||
manufacturer: str = attr.ib(default=None)
|
||||
model: str = attr.ib(default=None)
|
||||
name: str = attr.ib(default=None)
|
||||
sw_version: str = attr.ib(default=None)
|
||||
via_device_id: str = attr.ib(default=None)
|
||||
area_id: str = attr.ib(default=None)
|
||||
name_by_user: str = attr.ib(default=None)
|
||||
entry_type: str = attr.ib(default=None)
|
||||
id: str = attr.ib(default=attr.Factory(lambda: uuid.uuid4().hex))
|
||||
# This value is not stored, just used to keep track of events to fire.
|
||||
is_new = attr.ib(type=bool, default=False)
|
||||
is_new: bool = attr.ib(default=False)
|
||||
|
||||
|
||||
def format_mac(mac: str) -> str:
|
||||
|
@ -105,6 +110,7 @@ class DeviceRegistry:
|
|||
model=_UNDEF,
|
||||
name=_UNDEF,
|
||||
sw_version=_UNDEF,
|
||||
entry_type=_UNDEF,
|
||||
via_device=None,
|
||||
):
|
||||
"""Get device. Create if it doesn't exist."""
|
||||
|
@ -144,6 +150,7 @@ class DeviceRegistry:
|
|||
model=model,
|
||||
name=name,
|
||||
sw_version=sw_version,
|
||||
entry_type=entry_type,
|
||||
)
|
||||
|
||||
@callback
|
||||
|
@ -189,6 +196,7 @@ class DeviceRegistry:
|
|||
model=_UNDEF,
|
||||
name=_UNDEF,
|
||||
sw_version=_UNDEF,
|
||||
entry_type=_UNDEF,
|
||||
via_device_id=_UNDEF,
|
||||
area_id=_UNDEF,
|
||||
name_by_user=_UNDEF,
|
||||
|
@ -236,6 +244,7 @@ class DeviceRegistry:
|
|||
("model", model),
|
||||
("name", name),
|
||||
("sw_version", sw_version),
|
||||
("entry_type", entry_type),
|
||||
("via_device_id", via_device_id),
|
||||
):
|
||||
if value is not _UNDEF and value != getattr(old, attr_name):
|
||||
|
@ -291,6 +300,8 @@ class DeviceRegistry:
|
|||
model=device["model"],
|
||||
name=device["name"],
|
||||
sw_version=device["sw_version"],
|
||||
# Introduced in 0.110
|
||||
entry_type=device.get("entry_type"),
|
||||
id=device["id"],
|
||||
# Introduced in 0.79
|
||||
# renamed in 0.95
|
||||
|
@ -323,6 +334,7 @@ class DeviceRegistry:
|
|||
"model": entry.model,
|
||||
"name": entry.name,
|
||||
"sw_version": entry.sw_version,
|
||||
"entry_type": entry.entry_type,
|
||||
"id": entry.id,
|
||||
"via_device_id": entry.via_device_id,
|
||||
"area_id": entry.area_id,
|
||||
|
|
|
@ -353,6 +353,7 @@ class EntityPlatform:
|
|||
"model",
|
||||
"name",
|
||||
"sw_version",
|
||||
"entry_type",
|
||||
"via_device",
|
||||
):
|
||||
if key in device_info:
|
||||
|
|
|
@ -34,6 +34,7 @@ async def test_list_devices(hass, client, registry):
|
|||
manufacturer="manufacturer",
|
||||
model="model",
|
||||
via_device=("bridgeid", "0123"),
|
||||
entry_type="service",
|
||||
)
|
||||
|
||||
await client.send_json({"id": 5, "type": "config/device_registry/list"})
|
||||
|
@ -49,6 +50,7 @@ async def test_list_devices(hass, client, registry):
|
|||
"model": "model",
|
||||
"name": None,
|
||||
"sw_version": None,
|
||||
"entry_type": None,
|
||||
"via_device_id": None,
|
||||
"area_id": None,
|
||||
"name_by_user": None,
|
||||
|
@ -60,6 +62,7 @@ async def test_list_devices(hass, client, registry):
|
|||
"model": "model",
|
||||
"name": None,
|
||||
"sw_version": None,
|
||||
"entry_type": "service",
|
||||
"via_device_id": dev1,
|
||||
"area_id": None,
|
||||
"name_by_user": None,
|
||||
|
|
|
@ -149,6 +149,7 @@ async def test_loading_from_storage(hass, hass_storage):
|
|||
"model": "model",
|
||||
"name": "name",
|
||||
"sw_version": "version",
|
||||
"entry_type": "service",
|
||||
"area_id": "12345A",
|
||||
"name_by_user": "Test Friendly Name",
|
||||
}
|
||||
|
@ -168,6 +169,7 @@ async def test_loading_from_storage(hass, hass_storage):
|
|||
assert entry.id == "abcdefghijklm"
|
||||
assert entry.area_id == "12345A"
|
||||
assert entry.name_by_user == "Test Friendly Name"
|
||||
assert entry.entry_type == "service"
|
||||
assert isinstance(entry.config_entries, set)
|
||||
|
||||
|
||||
|
@ -304,6 +306,9 @@ async def test_loading_saving_data(hass, registry):
|
|||
identifiers={("hue", "0123")},
|
||||
manufacturer="manufacturer",
|
||||
model="via",
|
||||
name="Original Name",
|
||||
sw_version="Orig SW 1",
|
||||
entry_type="device",
|
||||
)
|
||||
|
||||
orig_light = registry.async_get_or_create(
|
||||
|
@ -317,6 +322,10 @@ async def test_loading_saving_data(hass, registry):
|
|||
|
||||
assert len(registry.devices) == 2
|
||||
|
||||
orig_via = registry.async_update_device(
|
||||
orig_via.id, area_id="mock-area-id", name_by_user="mock-name-by-user"
|
||||
)
|
||||
|
||||
# Now load written data in new registry
|
||||
registry2 = device_registry.DeviceRegistry(hass)
|
||||
await flush_store(registry._store)
|
||||
|
|
|
@ -704,6 +704,7 @@ async def test_device_info_called(hass):
|
|||
"model": "test-model",
|
||||
"name": "test-name",
|
||||
"sw_version": "test-sw",
|
||||
"entry_type": "service",
|
||||
"via_device": ("hue", "via-id"),
|
||||
},
|
||||
),
|
||||
|
@ -730,6 +731,7 @@ async def test_device_info_called(hass):
|
|||
assert device.model == "test-model"
|
||||
assert device.name == "test-name"
|
||||
assert device.sw_version == "test-sw"
|
||||
assert device.entry_type == "service"
|
||||
assert device.via_device_id == via.id
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue