diff options
author | Peter Moody <python@hda3.com> | 2013-10-24 16:47:10 (GMT) |
---|---|---|
committer | Peter Moody <python@hda3.com> | 2013-10-24 16:47:10 (GMT) |
commit | e5019d5183041f4f75cf4a30b2dc84eed347425e (patch) | |
tree | 49e012e5492c1c70690ab72a8d03a980047148b5 /Lib | |
parent | a46079e85394c4c6fa5a5a1a462eca8e38b85a42 (diff) | |
download | cpython-e5019d5183041f4f75cf4a30b2dc84eed347425e.zip cpython-e5019d5183041f4f75cf4a30b2dc84eed347425e.tar.gz cpython-e5019d5183041f4f75cf4a30b2dc84eed347425e.tar.bz2 |
#17400: correct handling of 100.64.0.0/10, fixing the docs and updating NEWS
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/ipaddress.py | 27 | ||||
-rw-r--r-- | Lib/test/test_ipaddress.py | 4 |
2 files changed, 18 insertions, 13 deletions
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 7936192..97ff13d 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1244,7 +1244,6 @@ class IPv4Address(_BaseV4, _BaseAddress): """ 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 @@ class IPv4Address(_BaseV4, _BaseAddress): 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 @@ class IPv4Network(_BaseV4, _BaseNetwork): 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 --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 25f190c..f3b1565 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -1319,8 +1319,10 @@ class IpaddrUnitTest(unittest.TestCase): 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, |