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