6363 _TYPE_TXT ,
6464)
6565
66+ _IPVersion_All_value = IPVersion .All .value
67+ _IPVersion_V4Only_value = IPVersion .V4Only .value
6668# https://datatracker.ietf.org/doc/html/rfc6762#section-5.2
6769# The most common case for calling ServiceInfo is from a
6870# ServiceBrowser. After the first request we add a few random
@@ -245,14 +247,15 @@ def addresses_by_version(self, version: IPVersion) -> List[bytes]:
245247 This means the first address will always be the most recently added
246248 address of the given IP version.
247249 """
248- if version == IPVersion .V4Only :
250+ version_value = version .value
251+ if version_value == _IPVersion_All_value :
252+ return [
253+ * (addr .packed for addr in self ._ipv4_addresses ),
254+ * (addr .packed for addr in self ._ipv6_addresses ),
255+ ]
256+ if version_value == _IPVersion_V4Only_value :
249257 return [addr .packed for addr in self ._ipv4_addresses ]
250- if version == IPVersion .V6Only :
251- return [addr .packed for addr in self ._ipv6_addresses ]
252- return [
253- * (addr .packed for addr in self ._ipv4_addresses ),
254- * (addr .packed for addr in self ._ipv6_addresses ),
255- ]
258+ return [addr .packed for addr in self ._ipv6_addresses ]
256259
257260 def ip_addresses_by_version (
258261 self , version : IPVersion
@@ -265,11 +268,17 @@ def ip_addresses_by_version(
265268 This means the first address will always be the most recently added
266269 address of the given IP version.
267270 """
268- if version == IPVersion .V4Only :
271+ return self ._ip_addresses_by_version_value (version .value )
272+
273+ def _ip_addresses_by_version_value (
274+ self , version_value : int
275+ ) -> Union [List [ipaddress .IPv4Address ], List [ipaddress .IPv6Address ], List [ipaddress ._BaseAddress ]]:
276+ """Backend for addresses_by_version that uses the raw value."""
277+ if version_value == _IPVersion_All_value :
278+ return [* self ._ipv4_addresses , * self ._ipv6_addresses ]
279+ if version_value == _IPVersion_V4Only_value :
269280 return self ._ipv4_addresses
270- if version == IPVersion .V6Only :
271- return self ._ipv6_addresses
272- return [* self ._ipv4_addresses , * self ._ipv6_addresses ]
281+ return self ._ipv6_addresses
273282
274283 def parsed_addresses (self , version : IPVersion = IPVersion .All ) -> List [str ]:
275284 """List addresses in their parsed string form.
@@ -280,7 +289,7 @@ def parsed_addresses(self, version: IPVersion = IPVersion.All) -> List[str]:
280289 This means the first address will always be the most recently added
281290 address of the given IP version.
282291 """
283- return [str (addr ) for addr in self .ip_addresses_by_version (version )]
292+ return [str (addr ) for addr in self ._ip_addresses_by_version_value (version . value )]
284293
285294 def parsed_scoped_addresses (self , version : IPVersion = IPVersion .All ) -> List [str ]:
286295 """Equivalent to parsed_addresses, with the exception that IPv6 Link-Local
@@ -296,7 +305,7 @@ def parsed_scoped_addresses(self, version: IPVersion = IPVersion.All) -> List[st
296305 return self .parsed_addresses (version )
297306 return [
298307 f"{ addr } %{ self .interface_index } " if addr .version == 6 and addr .is_link_local else str (addr )
299- for addr in self .ip_addresses_by_version (version )
308+ for addr in self ._ip_addresses_by_version_value (version . value )
300309 ]
301310
302311 def _set_properties (self , properties : Dict ) -> None :
@@ -494,7 +503,7 @@ def dns_addresses(
494503 address .packed ,
495504 created = created ,
496505 )
497- for address in self .ip_addresses_by_version (version )
506+ for address in self ._ip_addresses_by_version_value (version . value )
498507 ]
499508
500509 def dns_pointer (self , override_ttl : Optional [int ] = None , created : Optional [float ] = None ) -> DNSPointer :
0 commit comments