From a19f7571209238842b4a65be336e9731d946d6c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 30 Apr 2021 09:56:55 +0300 Subject: [PATCH] Allow str 1..n-tuples in device registry identifier type hints (#49864) This reflects current practice, but the intent has been to have them as 2-tuples, and a future change is likely to start enforcing that (again). Refs https://github.com/home-assistant/core/pull/49670#discussion_r622344872 --- .../components/huawei_lte/__init__.py | 2 +- homeassistant/components/syncthru/__init__.py | 2 +- homeassistant/components/zwave_js/helpers.py | 2 +- homeassistant/helpers/device_registry.py | 28 +++++++++---------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/huawei_lte/__init__.py b/homeassistant/components/huawei_lte/__init__.py index 690d9ed63a4..108e581ddd6 100644 --- a/homeassistant/components/huawei_lte/__init__.py +++ b/homeassistant/components/huawei_lte/__init__.py @@ -163,7 +163,7 @@ class Router: return DEFAULT_DEVICE_NAME @property - def device_identifiers(self) -> set[tuple[str, str]]: + def device_identifiers(self) -> set[tuple[str, ...]]: """Get router identifiers for device registry.""" try: return {(DOMAIN, self.data[KEY_DEVICE_INFORMATION]["SerialNumber"])} diff --git a/homeassistant/components/syncthru/__init__.py b/homeassistant/components/syncthru/__init__.py index 120796d935f..a5dbd2a9a35 100644 --- a/homeassistant/components/syncthru/__init__.py +++ b/homeassistant/components/syncthru/__init__.py @@ -60,7 +60,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return unload_ok -def device_identifiers(printer: SyncThru) -> set[tuple[str, str]]: +def device_identifiers(printer: SyncThru) -> set[tuple[str, ...]]: """Get device identifiers for device registry.""" return {(DOMAIN, printer.serial_number())} diff --git a/homeassistant/components/zwave_js/helpers.py b/homeassistant/components/zwave_js/helpers.py index 98c308ea58c..664d35ea972 100644 --- a/homeassistant/components/zwave_js/helpers.py +++ b/homeassistant/components/zwave_js/helpers.py @@ -43,7 +43,7 @@ def get_device_id(client: ZwaveClient, node: ZwaveNode) -> tuple[str, str]: @callback -def get_home_and_node_id_from_device_id(device_id: tuple[str, str]) -> list[str]: +def get_home_and_node_id_from_device_id(device_id: tuple[str, ...]) -> list[str]: """ Get home ID and node ID for Z-Wave device registry entry. diff --git a/homeassistant/helpers/device_registry.py b/homeassistant/helpers/device_registry.py index 80c54ed296f..024b11476e7 100644 --- a/homeassistant/helpers/device_registry.py +++ b/homeassistant/helpers/device_registry.py @@ -55,7 +55,7 @@ class DeviceEntry: config_entries: set[str] = attr.ib(converter=set, factory=set) connections: set[tuple[str, str]] = attr.ib(converter=set, factory=set) - identifiers: set[tuple[str, str]] = attr.ib(converter=set, factory=set) + identifiers: set[tuple[str, ...]] = attr.ib(converter=set, factory=set) manufacturer: str | None = attr.ib(default=None) model: str | None = attr.ib(default=None) name: str | None = attr.ib(default=None) @@ -92,7 +92,7 @@ class DeletedDeviceEntry: config_entries: set[str] = attr.ib() connections: set[tuple[str, str]] = attr.ib() - identifiers: set[tuple[str, str]] = attr.ib() + identifiers: set[tuple[str, ...]] = attr.ib() id: str = attr.ib() orphaned_timestamp: float | None = attr.ib() @@ -100,7 +100,7 @@ class DeletedDeviceEntry: self, config_entry_id: str, connections: set[tuple[str, str]], - identifiers: set[tuple[str, str]], + identifiers: set[tuple[str, ...]], ) -> DeviceEntry: """Create DeviceEntry from DeletedDeviceEntry.""" return DeviceEntry( @@ -138,7 +138,7 @@ class DeviceRegistry: devices: dict[str, DeviceEntry] deleted_devices: dict[str, DeletedDeviceEntry] - _devices_index: dict[str, dict[str, dict[tuple[str, str], str]]] + _devices_index: dict[str, dict[str, dict[tuple[str, ...], str]]] def __init__(self, hass: HomeAssistant) -> None: """Initialize the device registry.""" @@ -154,7 +154,7 @@ class DeviceRegistry: @callback def async_get_device( self, - identifiers: set[tuple[str, str]], + identifiers: set[tuple[str, ...]], connections: set[tuple[str, str]] | None = None, ) -> DeviceEntry | None: """Check if device is registered.""" @@ -167,7 +167,7 @@ class DeviceRegistry: def _async_get_deleted_device( self, - identifiers: set[tuple[str, str]], + identifiers: set[tuple[str, ...]], connections: set[tuple[str, str]] | None, ) -> DeletedDeviceEntry | None: """Check if device is deleted.""" @@ -181,7 +181,7 @@ class DeviceRegistry: def _async_get_device_id_from_index( self, index: str, - identifiers: set[tuple[str, str]], + identifiers: set[tuple[str, ...]], connections: set[tuple[str, str]] | None, ) -> str | None: """Check if device has previously been registered.""" @@ -247,7 +247,7 @@ class DeviceRegistry: *, config_entry_id: str, connections: set[tuple[str, str]] | None = None, - identifiers: set[tuple[str, str]] | None = None, + identifiers: set[tuple[str, ...]] | None = None, manufacturer: str | None | UndefinedType = UNDEFINED, model: str | None | UndefinedType = UNDEFINED, name: str | None | UndefinedType = UNDEFINED, @@ -331,7 +331,7 @@ class DeviceRegistry: model: str | None | UndefinedType = UNDEFINED, name: str | None | UndefinedType = UNDEFINED, name_by_user: str | None | UndefinedType = UNDEFINED, - new_identifiers: set[tuple[str, str]] | UndefinedType = UNDEFINED, + new_identifiers: set[tuple[str, ...]] | UndefinedType = UNDEFINED, sw_version: str | None | UndefinedType = UNDEFINED, via_device_id: str | None | UndefinedType = UNDEFINED, remove_config_entry_id: str | UndefinedType = UNDEFINED, @@ -362,8 +362,8 @@ class DeviceRegistry: add_config_entry_id: str | UndefinedType = UNDEFINED, remove_config_entry_id: str | UndefinedType = UNDEFINED, merge_connections: set[tuple[str, str]] | UndefinedType = UNDEFINED, - merge_identifiers: set[tuple[str, str]] | UndefinedType = UNDEFINED, - new_identifiers: set[tuple[str, str]] | UndefinedType = UNDEFINED, + merge_identifiers: set[tuple[str, ...]] | UndefinedType = UNDEFINED, + new_identifiers: set[tuple[str, ...]] | UndefinedType = UNDEFINED, manufacturer: str | None | UndefinedType = UNDEFINED, model: str | None | UndefinedType = UNDEFINED, name: str | None | UndefinedType = UNDEFINED, @@ -521,7 +521,7 @@ class DeviceRegistry: config_entries=set(device["config_entries"]), # type ignores (if tuple arg was cast): likely https://github.com/python/mypy/issues/8625 connections={tuple(conn) for conn in device["connections"]}, # type: ignore[misc] - identifiers={tuple(iden) for iden in device["identifiers"]}, # type: ignore[misc] + identifiers={tuple(iden) for iden in device["identifiers"]}, id=device["id"], # Introduced in 2021.2 orphaned_timestamp=device.get("orphaned_timestamp"), @@ -786,7 +786,7 @@ def _normalize_connections(connections: set[tuple[str, str]]) -> set[tuple[str, def _add_device_to_index( - devices_index: dict[str, dict[tuple[str, str], str]], + devices_index: dict[str, dict[tuple[str, ...], str]], device: DeviceEntry | DeletedDeviceEntry, ) -> None: """Add a device to the index.""" @@ -797,7 +797,7 @@ def _add_device_to_index( def _remove_device_from_index( - devices_index: dict[str, dict[tuple[str, str], str]], + devices_index: dict[str, dict[tuple[str, ...], str]], device: DeviceEntry | DeletedDeviceEntry, ) -> None: """Remove a device from the index."""