From fe4d83e5fcf6cbad4fc5d8234427612c89ae3aa0 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Tue, 11 Jun 2024 14:08:07 +0200 Subject: [PATCH] Reintroduce ability to get IP addresses without scope (#751) --- matter_server/client/client.py | 4 ++-- matter_server/common/models.py | 2 +- matter_server/server/device_controller.py | 25 ++++++++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/matter_server/client/client.py b/matter_server/client/client.py index f9bf0b3d..719ccadf 100644 --- a/matter_server/client/client.py +++ b/matter_server/client/client.py @@ -273,14 +273,14 @@ async def ping_node(self, node_id: int) -> NodePingResult: async def get_node_ip_addresses( self, node_id: int, prefer_cache: bool = True, scoped: bool = False ) -> list[str]: - """Return the currently known (scoped) IP-adress(es).""" + """Return the currently known (scoped) IP-address(es).""" if TYPE_CHECKING: assert self.server_info is not None if self.server_info.schema_version >= 8: return cast( list[str], await self.send_command( - APICommand.GET_NODE_IP_ADRESSES, + APICommand.GET_NODE_IP_ADDRESSES, require_schema=8, node_id=node_id, prefer_cache=prefer_cache, diff --git a/matter_server/common/models.py b/matter_server/common/models.py index e3a9f8d7..0c9dc144 100644 --- a/matter_server/common/models.py +++ b/matter_server/common/models.py @@ -45,7 +45,7 @@ class APICommand(str, Enum): READ_ATTRIBUTE = "read_attribute" WRITE_ATTRIBUTE = "write_attribute" PING_NODE = "ping_node" - GET_NODE_IP_ADRESSES = "get_node_ip_addresses" + GET_NODE_IP_ADDRESSES = "get_node_ip_addresses" IMPORT_TEST_NODE = "import_test_node" diff --git a/matter_server/server/device_controller.py b/matter_server/server/device_controller.py index a8d0c6be..436d2c68 100644 --- a/matter_server/server/device_controller.py +++ b/matter_server/server/device_controller.py @@ -784,9 +784,7 @@ async def _do_ping(ip_address: str) -> None: node_logger.debug("Pinging address %s", ip_address) result[ip_address] = await ping_ip(ip_address, timeout, attempts=attempts) - ip_addresses = await self.get_node_ip_addresses( - node_id, prefer_cache=False, scoped=True - ) + ip_addresses = await self._get_node_ip_addresses(node_id, prefer_cache=False) tasks = [_do_ping(x) for x in ip_addresses] # TODO: replace this gather with a taskgroup once we bump our py version await asyncio.gather(*tasks) @@ -806,14 +804,10 @@ async def _do_ping(ip_address: str) -> None: return result - @api_command(APICommand.GET_NODE_IP_ADRESSES) - async def get_node_ip_addresses( - self, - node_id: int, - prefer_cache: bool = False, - scoped: bool = False, + async def _get_node_ip_addresses( + self, node_id: int, prefer_cache: bool = False ) -> list[str]: - """Return the currently known (scoped) IP-address(es).""" + """Get the IP addresses of a node.""" cached_info = self._last_known_ip_addresses.get(node_id, []) if prefer_cache and cached_info: return cached_info @@ -839,6 +833,17 @@ async def get_node_ip_addresses( self._last_known_ip_addresses[node_id] = ip_addresses return ip_addresses + @api_command(APICommand.GET_NODE_IP_ADDRESSES) + async def get_node_ip_addresses( + self, + node_id: int, + prefer_cache: bool = False, + scoped: bool = False, + ) -> list[str]: + """Return the currently known (scoped) IP-address(es).""" + ip_addresses = await self._get_node_ip_addresses(node_id, prefer_cache) + return ip_addresses if scoped else [x.split("%")[0] for x in ip_addresses] + @api_command(APICommand.IMPORT_TEST_NODE) async def import_test_node(self, dump: str) -> None: """Import test node(s) from a HA or Matter server diagnostics dump."""