From d0ba42283c6ccddd15f703dee9880e99c6513f2f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 15 Oct 2023 15:24:49 -1000 Subject: [PATCH] Use stdlib ip_address method in the network helper when compatible (#102019) --- homeassistant/util/network.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/homeassistant/util/network.py b/homeassistant/util/network.py index f92396f57df..46eaece25c4 100644 --- a/homeassistant/util/network.py +++ b/homeassistant/util/network.py @@ -7,10 +7,12 @@ import re import yarl # RFC6890 - IP addresses of loopback interfaces +IPV6_IPV4_LOOPBACK = ip_network("::ffff:127.0.0.0/104") + LOOPBACK_NETWORKS = ( ip_network("127.0.0.0/8"), ip_network("::1/128"), - ip_network("::ffff:127.0.0.0/104"), + IPV6_IPV4_LOOPBACK, ) # RFC6890 - Address allocation for Private Internets @@ -34,7 +36,7 @@ LINK_LOCAL_NETWORKS = ( def is_loopback(address: IPv4Address | IPv6Address) -> bool: """Check if an address is a loopback address.""" - return any(address in network for network in LOOPBACK_NETWORKS) + return address.is_loopback or address in IPV6_IPV4_LOOPBACK def is_private(address: IPv4Address | IPv6Address) -> bool: @@ -44,7 +46,7 @@ def is_private(address: IPv4Address | IPv6Address) -> bool: def is_link_local(address: IPv4Address | IPv6Address) -> bool: """Check if an address is link-local (local but not necessarily unique).""" - return any(address in network for network in LINK_LOCAL_NETWORKS) + return address.is_link_local def is_local(address: IPv4Address | IPv6Address) -> bool: @@ -54,7 +56,7 @@ def is_local(address: IPv4Address | IPv6Address) -> bool: def is_invalid(address: IPv4Address | IPv6Address) -> bool: """Check if an address is invalid.""" - return bool(address == ip_address("0.0.0.0")) + return address.is_unspecified def is_ip_address(address: str) -> bool: