bpo-28577: Special case added to IP v4 and v6 hosts for /32 and /128 networks (GH-18757)
The `.hosts()` method now returns the single address present in a /32 or /128 network.
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index f4a4afb..bbb3fc8 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1424,6 +1424,15 @@
self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
list(ipaddress.ip_network(tpl_args).hosts()))
+ # special case where the network is a /32
+ addrs = [ipaddress.IPv4Address('1.2.3.4')]
+ str_args = '1.2.3.4/32'
+ tpl_args = ('1.2.3.4', 32)
+ self.assertEqual(addrs, list(ipaddress.ip_network(str_args).hosts()))
+ self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts()))
+ self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
+ list(ipaddress.ip_network(tpl_args).hosts()))
+
addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::'),
ipaddress.IPv6Address('2001:658:22a:cafe::1')]
str_args = '2001:658:22a:cafe::/127'
@@ -1432,10 +1441,10 @@
self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts()))
self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),
list(ipaddress.ip_network(tpl_args).hosts()))
- addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::'),
- ipaddress.IPv6Address('2001:658:22a:cafe::1')]
- str_args = '2001:658:22a:cafe::/127'
- tpl_args = ('2001:658:22a:cafe::', 127)
+
+ addrs = [ipaddress.IPv6Address('2001:658:22a:cafe::1'), ]
+ str_args = '2001:658:22a:cafe::1/128'
+ tpl_args = ('2001:658:22a:cafe::1', 128)
self.assertEqual(addrs, list(ipaddress.ip_network(str_args).hosts()))
self.assertEqual(addrs, list(ipaddress.ip_network(tpl_args).hosts()))
self.assertEqual(list(ipaddress.ip_network(str_args).hosts()),