changeset: 86598:b9623fa5a0dd user: Peter Moody date: Thu Oct 24 09:47:10 2013 -0700 files: Doc/library/ipaddress.rst Lib/ipaddress.py Lib/test/test_ipaddress.py Misc/NEWS description: #17400: correct handling of 100.64.0.0/10, fixing the docs and updating NEWS diff -r 060d9b2e4d5e -r b9623fa5a0dd Doc/library/ipaddress.rst --- a/Doc/library/ipaddress.rst Wed Oct 23 21:55:35 2013 -0700 +++ b/Doc/library/ipaddress.rst Thu Oct 24 09:47:10 2013 -0700 @@ -158,6 +158,12 @@ ``True`` if the address is reserved for multicast use. See :RFC:`3171` (for IPv4) or :RFC:`2373` (for IPv6). + .. attribute:: is_private + + ``True`` if the address is allocated for private networks. See + iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry + (for IPv6). + .. attribute:: is_global ``True`` if the address is allocated for public networks. See diff -r 060d9b2e4d5e -r b9623fa5a0dd Lib/ipaddress.py --- a/Lib/ipaddress.py Wed Oct 23 21:55:35 2013 -0700 +++ b/Lib/ipaddress.py Thu Oct 24 09:47:10 2013 -0700 @@ -1244,7 +1244,6 @@ """ return (self in IPv4Network('0.0.0.0/8') or self in IPv4Network('10.0.0.0/8') or - self in IPv4Network('100.64.0.0/10') or self in IPv4Network('127.0.0.0/8') or self in IPv4Network('169.254.0.0/16') or self in IPv4Network('172.16.0.0/12') or @@ -1258,17 +1257,6 @@ self in IPv4Network('240.0.0.0/4') or self in IPv4Network('255.255.255.255/32')) - @property - def is_global(self): - """Test if this address is allocated for public networks. - - Returns: - A boolean, True if the address is not reserved per - iana-ipv4-special-registry. - - """ - return self in IPv4Network('100.64.0.0/10') or not self.is_private - @property def is_multicast(self): @@ -1501,6 +1489,21 @@ if self._prefixlen == (self._max_prefixlen - 1): self.hosts = self.__iter__ + @property + @functools.lru_cache() + def is_global(self): + """Test if this address is allocated for public networks. + + Returns: + A boolean, True if the address is not reserved per + iana-ipv4-special-registry. + + """ + return (not (self.network_address in IPv4Network('100.64.0.0/10') and + self.broadcast_address in IPv4Network('100.64.0.0/10')) and + not self.is_private) + + class _BaseV6: diff -r 060d9b2e4d5e -r b9623fa5a0dd Lib/test/test_ipaddress.py --- a/Lib/test/test_ipaddress.py Wed Oct 23 21:55:35 2013 -0700 +++ b/Lib/test/test_ipaddress.py Thu Oct 24 09:47:10 2013 -0700 @@ -1319,8 +1319,10 @@ self.assertEqual(True, ipaddress.ip_network( '127.42.0.0/16').is_loopback) self.assertEqual(False, ipaddress.ip_network('128.0.0.0').is_loopback) - self.assertEqual(True, ipaddress.ip_network('100.64.0.0/10').is_private) + self.assertEqual(False, + ipaddress.ip_network('100.64.0.0/10').is_private) self.assertEqual(False, ipaddress.ip_network('100.64.0.0/10').is_global) + self.assertEqual(True, ipaddress.ip_network('192.0.2.128/25').is_private) self.assertEqual(True, diff -r 060d9b2e4d5e -r b9623fa5a0dd Misc/NEWS --- a/Misc/NEWS Wed Oct 23 21:55:35 2013 -0700 +++ b/Misc/NEWS Thu Oct 24 09:47:10 2013 -0700 @@ -19,6 +19,9 @@ Library ------- +- Issue #17400: New 'is_global' attribute for ipaddress to tell if an address + is allocated by IANA for global or private networks. + - Issue #19350: Increasing the test coverage of macurl2path. Patch by Colin Williams.