"""Zeroconf discovery data.""" from dataclasses import dataclass from ipaddress import IPv4Address, IPv6Address from typing import Any, Final from homeassistant.data_entry_flow import BaseServiceInfo # Attributes for ZeroconfServiceInfo[ATTR_PROPERTIES] ATTR_PROPERTIES_ID: Final = "id" @dataclass(slots=True) class ZeroconfServiceInfo(BaseServiceInfo): """Prepared info from mDNS entries. The ip_address is the most recently updated address that is not a link local or unspecified address. The ip_addresses are all addresses in order of most recently updated to least recently updated. The host is the string representation of the ip_address. The addresses are the string representations of the ip_addresses. It is recommended to use the ip_address to determine the address to connect to as it will be the most recently updated address that is not a link local or unspecified address. """ ip_address: IPv4Address | IPv6Address ip_addresses: list[IPv4Address | IPv6Address] port: int | None hostname: str type: str name: str properties: dict[str, Any] @property def host(self) -> str: """Return the host.""" return str(self.ip_address) @property def addresses(self) -> list[str]: """Return the addresses.""" return [str(ip_address) for ip_address in self.ip_addresses]