Skip to content

Commit

Permalink
#17400: correct handling of 100.64.0.0/10, fixing the docs and updati…
Browse files Browse the repository at this point in the history
…ng NEWS
  • Loading branch information
Peter Moody committed Oct 24, 2013
1 parent a46079e commit e5019d5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 13 deletions.
6 changes: 6 additions & 0 deletions Doc/library/ipaddress.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
27 changes: 15 additions & 12 deletions Lib/ipaddress.py
Original file line number Diff line number Diff line change
Expand Up @@ -1244,7 +1244,6 @@ def is_private(self):
"""
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
Expand All @@ -1258,17 +1257,6 @@ def is_private(self):
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):
Expand Down Expand Up @@ -1501,6 +1489,21 @@ def __init__(self, address, strict=True):
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:

Expand Down
4 changes: 3 additions & 1 deletion Lib/test/test_ipaddress.py
Original file line number Diff line number Diff line change
Expand Up @@ -1319,8 +1319,10 @@ def testReservedIpv4(self):
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,
Expand Down
3 changes: 3 additions & 0 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ Core and Builtins
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.

Expand Down

0 comments on commit e5019d5

Please sign in to comment.