Skip to content

Commit 524494e

Browse files
authored
feat: add ip_addresses_by_version to ServiceInfo (#1145)
1 parent 6a327d0 commit 524494e

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

src/zeroconf/_services/info.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,16 @@ def addresses_by_version(self, version: IPVersion) -> List[bytes]:
233233
*(addr.packed for addr in self._ipv6_addresses),
234234
]
235235

236+
def ip_addresses_by_version(
237+
self, version: IPVersion
238+
) -> Union[List[ipaddress.IPv4Address], List[ipaddress.IPv6Address], List[ipaddress._BaseAddress]]:
239+
"""List ip_address objects matching IP version."""
240+
if version == IPVersion.V4Only:
241+
return self._ipv4_addresses
242+
if version == IPVersion.V6Only:
243+
return self._ipv6_addresses
244+
return [*self._ipv4_addresses, *self._ipv6_addresses]
245+
236246
def parsed_addresses(self, version: IPVersion = IPVersion.All) -> List[str]:
237247
"""List addresses in their parsed string form."""
238248
result = self.addresses_by_version(version)

tests/services/test_info.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import socket
1010
import threading
1111
import unittest
12+
from ipaddress import ip_address
1213
from threading import Event
1314
from typing import Iterable, List, Optional
1415
from unittest.mock import patch
@@ -540,8 +541,18 @@ def test_multiple_addresses():
540541
for info in infos:
541542
assert info.addresses == [address]
542543
assert info.addresses_by_version(r.IPVersion.All) == [address, address_v6, address_v6_ll]
544+
assert info.ip_addresses_by_version(r.IPVersion.All) == [
545+
ip_address(address),
546+
ip_address(address_v6),
547+
ip_address(address_v6_ll),
548+
]
543549
assert info.addresses_by_version(r.IPVersion.V4Only) == [address]
550+
assert info.ip_addresses_by_version(r.IPVersion.V4Only) == [ip_address(address)]
544551
assert info.addresses_by_version(r.IPVersion.V6Only) == [address_v6, address_v6_ll]
552+
assert info.ip_addresses_by_version(r.IPVersion.V6Only) == [
553+
ip_address(address_v6),
554+
ip_address(address_v6_ll),
555+
]
545556
assert info.parsed_addresses() == [address_parsed, address_v6_parsed, address_v6_ll_parsed]
546557
assert info.parsed_addresses(r.IPVersion.V4Only) == [address_parsed]
547558
assert info.parsed_addresses(r.IPVersion.V6Only) == [address_v6_parsed, address_v6_ll_parsed]

0 commit comments

Comments
 (0)