mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-02 19:39:49 +09:00
Update ipaddress from Python 3.11
This commit is contained in:
26
Lib/ipaddress.py
vendored
26
Lib/ipaddress.py
vendored
@@ -132,7 +132,7 @@ def v4_int_to_packed(address):
|
||||
|
||||
"""
|
||||
try:
|
||||
return address.to_bytes(4, 'big')
|
||||
return address.to_bytes(4) # big endian
|
||||
except OverflowError:
|
||||
raise ValueError("Address negative or too large for IPv4")
|
||||
|
||||
@@ -148,7 +148,7 @@ def v6_int_to_packed(address):
|
||||
|
||||
"""
|
||||
try:
|
||||
return address.to_bytes(16, 'big')
|
||||
return address.to_bytes(16) # big endian
|
||||
except OverflowError:
|
||||
raise ValueError("Address negative or too large for IPv6")
|
||||
|
||||
@@ -1077,15 +1077,16 @@ class _BaseNetwork(_IPAddressBase):
|
||||
|
||||
@property
|
||||
def is_private(self):
|
||||
"""Test if this address is allocated for private networks.
|
||||
"""Test if this network belongs to a private range.
|
||||
|
||||
Returns:
|
||||
A boolean, True if the address is reserved per
|
||||
A boolean, True if the network is reserved per
|
||||
iana-ipv4-special-registry or iana-ipv6-special-registry.
|
||||
|
||||
"""
|
||||
return (self.network_address.is_private and
|
||||
self.broadcast_address.is_private)
|
||||
return any(self.network_address in priv_network and
|
||||
self.broadcast_address in priv_network
|
||||
for priv_network in self._constants._private_networks)
|
||||
|
||||
@property
|
||||
def is_global(self):
|
||||
@@ -1122,6 +1123,15 @@ class _BaseNetwork(_IPAddressBase):
|
||||
return (self.network_address.is_loopback and
|
||||
self.broadcast_address.is_loopback)
|
||||
|
||||
|
||||
class _BaseConstants:
|
||||
|
||||
_private_networks = []
|
||||
|
||||
|
||||
_BaseNetwork._constants = _BaseConstants
|
||||
|
||||
|
||||
class _BaseV4:
|
||||
|
||||
"""Base IPv4 object.
|
||||
@@ -1294,7 +1304,7 @@ class IPv4Address(_BaseV4, _BaseAddress):
|
||||
# Constructing from a packed address
|
||||
if isinstance(address, bytes):
|
||||
self._check_packed_address(address, 4)
|
||||
self._ip = int.from_bytes(address, 'big')
|
||||
self._ip = int.from_bytes(address) # big endian
|
||||
return
|
||||
|
||||
# Assume input argument to be string or any object representation
|
||||
@@ -1561,6 +1571,7 @@ class _IPv4Constants:
|
||||
|
||||
|
||||
IPv4Address._constants = _IPv4Constants
|
||||
IPv4Network._constants = _IPv4Constants
|
||||
|
||||
|
||||
class _BaseV6:
|
||||
@@ -2285,3 +2296,4 @@ class _IPv6Constants:
|
||||
|
||||
|
||||
IPv6Address._constants = _IPv6Constants
|
||||
IPv6Network._constants = _IPv6Constants
|
||||
|
||||
36
Lib/test/test_ipaddress.py
vendored
36
Lib/test/test_ipaddress.py
vendored
@@ -102,7 +102,6 @@ class CommonTestMixin_v4(CommonTestMixin):
|
||||
"000.000.000.000",
|
||||
"192.168.000.001",
|
||||
"016.016.016.016",
|
||||
"192.168.000.001",
|
||||
"001.000.008.016",
|
||||
"01.2.3.40",
|
||||
"1.02.3.40",
|
||||
@@ -1653,7 +1652,7 @@ class IpaddrUnitTest(unittest.TestCase):
|
||||
self.assertRaises(IndexError, self.ipv6_scoped_network.__getitem__, 1 << 64)
|
||||
|
||||
def testGetitem(self):
|
||||
# http://code.google.com/p/ipaddr-py/issues/detail?id=15
|
||||
# https://code.google.com/p/ipaddr-py/issues/detail?id=15
|
||||
addr = ipaddress.IPv4Network('172.31.255.128/255.255.255.240')
|
||||
self.assertEqual(28, addr.prefixlen)
|
||||
addr_list = list(addr)
|
||||
@@ -2278,6 +2277,39 @@ class IpaddrUnitTest(unittest.TestCase):
|
||||
self.assertEqual(False, ipaddress.ip_address('128.0.0.0').is_loopback)
|
||||
self.assertEqual(True, ipaddress.ip_network('0.0.0.0').is_unspecified)
|
||||
|
||||
def testPrivateNetworks(self):
|
||||
self.assertEqual(False, ipaddress.ip_network("0.0.0.0/0").is_private)
|
||||
self.assertEqual(False, ipaddress.ip_network("1.0.0.0/8").is_private)
|
||||
|
||||
self.assertEqual(True, ipaddress.ip_network("0.0.0.0/8").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("10.0.0.0/8").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("127.0.0.0/8").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("169.254.0.0/16").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("172.16.0.0/12").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("192.0.0.0/29").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("192.0.0.170/31").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("192.0.2.0/24").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("192.168.0.0/16").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("198.18.0.0/15").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("198.51.100.0/24").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("203.0.113.0/24").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("240.0.0.0/4").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("255.255.255.255/32").is_private)
|
||||
|
||||
self.assertEqual(False, ipaddress.ip_network("::/0").is_private)
|
||||
self.assertEqual(False, ipaddress.ip_network("::ff/128").is_private)
|
||||
|
||||
self.assertEqual(True, ipaddress.ip_network("::1/128").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("::/128").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("::ffff:0:0/96").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("100::/64").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("2001::/23").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("2001:2::/48").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("2001:db8::/32").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("2001:10::/28").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("fc00::/7").is_private)
|
||||
self.assertEqual(True, ipaddress.ip_network("fe80::/10").is_private)
|
||||
|
||||
def testReservedIpv6(self):
|
||||
|
||||
self.assertEqual(True, ipaddress.ip_network('ffff::').is_multicast)
|
||||
|
||||
Reference in New Issue
Block a user