mirror of https://github.com/python/cpython
#17400: correct handling of 100.64.0.0/10, fixing the docs and updating NEWS
This commit is contained in:
parent
a46079e853
commit
e5019d5183
|
@ -158,6 +158,12 @@ write code that handles both IP versions correctly.
|
|||
``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
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue