feat: add ip_addresses_by_version to ServiceInfo (#1145) · python-zeroconf/python-zeroconf@524494e

2 files changed

lines changed

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)

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]