Skip to content

Commit bbc5c7b

Browse files
committed
feat: reduce overhead to enumerate ip addresses in ServiceInfo
Most of the reply overhead was because of the enums
1 parent 8b44947 commit bbc5c7b

1 file changed

Lines changed: 20 additions & 14 deletions

File tree

src/zeroconf/_services/info.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -245,14 +245,24 @@ def addresses_by_version(self, version: IPVersion) -> List[bytes]:
245245
This means the first address will always be the most recently added
246246
address of the given IP version.
247247
"""
248+
if version == IPVersion.All:
249+
return [
250+
*(addr.packed for addr in self._ipv4_addresses),
251+
*(addr.packed for addr in self._ipv6_addresses),
252+
]
248253
if version == IPVersion.V4Only:
249254
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-
]
255+
return [addr.packed for addr in self._ipv6_addresses]
256+
257+
def _ip_addresses_by_version_value(
258+
self, version_value: int
259+
) -> Union[List[ipaddress.IPv4Address], List[ipaddress.IPv6Address], List[ipaddress._BaseAddress]]:
260+
"""Backend for addresses_by_version that uses the raw value."""
261+
if version_value == IPVersion.All.value:
262+
return [*self._ipv4_addresses, *self._ipv6_addresses]
263+
if version_value == IPVersion.V4Only.value:
264+
return self._ipv4_addresses
265+
return self._ipv6_addresses
256266

257267
def ip_addresses_by_version(
258268
self, version: IPVersion
@@ -265,11 +275,7 @@ def ip_addresses_by_version(
265275
This means the first address will always be the most recently added
266276
address of the given IP version.
267277
"""
268-
if version == IPVersion.V4Only:
269-
return self._ipv4_addresses
270-
if version == IPVersion.V6Only:
271-
return self._ipv6_addresses
272-
return [*self._ipv4_addresses, *self._ipv6_addresses]
278+
return self._ip_addresses_by_version_value(version.value)
273279

274280
def parsed_addresses(self, version: IPVersion = IPVersion.All) -> List[str]:
275281
"""List addresses in their parsed string form.
@@ -280,7 +286,7 @@ def parsed_addresses(self, version: IPVersion = IPVersion.All) -> List[str]:
280286
This means the first address will always be the most recently added
281287
address of the given IP version.
282288
"""
283-
return [str(addr) for addr in self.ip_addresses_by_version(version)]
289+
return [str(addr) for addr in self._ip_addresses_by_version_value(version.value)]
284290

285291
def parsed_scoped_addresses(self, version: IPVersion = IPVersion.All) -> List[str]:
286292
"""Equivalent to parsed_addresses, with the exception that IPv6 Link-Local
@@ -296,7 +302,7 @@ def parsed_scoped_addresses(self, version: IPVersion = IPVersion.All) -> List[st
296302
return self.parsed_addresses(version)
297303
return [
298304
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)
305+
for addr in self._ip_addresses_by_version_value(version.value)
300306
]
301307

302308
def _set_properties(self, properties: Dict) -> None:
@@ -494,7 +500,7 @@ def dns_addresses(
494500
address.packed,
495501
created=created,
496502
)
497-
for address in self.ip_addresses_by_version(version)
503+
for address in self._ip_addresses_by_version_value(version.value)
498504
]
499505

500506
def dns_pointer(self, override_ttl: Optional[int] = None, created: Optional[float] = None) -> DNSPointer:

0 commit comments

Comments
 (0)