mirror of
https://github.com/python/cpython.git
synced 2025-07-30 14:44:10 +00:00
make py3k compat code explicitly on
This commit is contained in:
parent
6bf1900e18
commit
b83819f291
2 changed files with 36 additions and 58 deletions
|
@ -193,17 +193,6 @@ def collapse_address_list(addresses):
|
||||||
sorted(addresses, key=BaseIP._get_networks_key))
|
sorted(addresses, key=BaseIP._get_networks_key))
|
||||||
|
|
||||||
|
|
||||||
# Test whether this Python implementation supports byte objects that
|
|
||||||
# are not identical to str ones.
|
|
||||||
# We need to exclude platforms where bytes == str so that we can
|
|
||||||
# distinguish between packed representations and strings, for example
|
|
||||||
# b'12::' (the IPv4 address 49.50.58.58) and '12::' (an IPv6 address).
|
|
||||||
try:
|
|
||||||
_compat_has_real_bytes = bytes != str
|
|
||||||
except NameError: # <Python2.6
|
|
||||||
_compat_has_real_bytes = False
|
|
||||||
|
|
||||||
|
|
||||||
class BaseIP(object):
|
class BaseIP(object):
|
||||||
|
|
||||||
"""A generic IP object.
|
"""A generic IP object.
|
||||||
|
@ -591,13 +580,11 @@ class IPv4(BaseIP):
|
||||||
raise IPv4IpValidationError(ipaddr)
|
raise IPv4IpValidationError(ipaddr)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Constructing from a packed address
|
if isinstance(ipaddr, bytes) and len(ipaddr) == 4:
|
||||||
if _compat_has_real_bytes:
|
self.ip = struct.unpack('!I', ipaddr)[0]
|
||||||
if isinstance(ipaddr, bytes) and len(ipaddr) == 4:
|
self._prefixlen = 32
|
||||||
self.ip = struct.unpack('!I', ipaddr)[0]
|
self.netmask = self._ALL_ONES
|
||||||
self._prefixlen = 32
|
return
|
||||||
self.netmask = self._ALL_ONES
|
|
||||||
return
|
|
||||||
|
|
||||||
# Assume input argument to be string or any object representation
|
# Assume input argument to be string or any object representation
|
||||||
# which converts into a formatted IP prefix string.
|
# which converts into a formatted IP prefix string.
|
||||||
|
@ -930,14 +917,12 @@ class IPv6(BaseIP):
|
||||||
raise IPv6IpValidationError(ipaddr)
|
raise IPv6IpValidationError(ipaddr)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Constructing from a packed address
|
if isinstance(ipaddr, bytes) and len(ipaddr) == 16:
|
||||||
if _compat_has_real_bytes:
|
tmp = struct.unpack('!QQ', ipaddr)
|
||||||
if isinstance(ipaddr, bytes) and len(ipaddr) == 16:
|
self.ip = (tmp[0] << 64) | tmp[1]
|
||||||
tmp = struct.unpack('!QQ', ipaddr)
|
self._prefixlen = 128
|
||||||
self.ip = (tmp[0] << 64) | tmp[1]
|
self.netmask = self._ALL_ONES
|
||||||
self._prefixlen = 128
|
return
|
||||||
self.netmask = self._ALL_ONES
|
|
||||||
return
|
|
||||||
|
|
||||||
# Assume input argument to be string or any object representation
|
# Assume input argument to be string or any object representation
|
||||||
# which converts into a formatted IP prefix string.
|
# which converts into a formatted IP prefix string.
|
||||||
|
|
|
@ -22,12 +22,6 @@ import unittest
|
||||||
|
|
||||||
import ipaddr
|
import ipaddr
|
||||||
|
|
||||||
# Compatibility function to cast str to bytes objects
|
|
||||||
if ipaddr._compat_has_real_bytes:
|
|
||||||
_cb = lambda bytestr: bytes(bytestr, 'charmap')
|
|
||||||
else:
|
|
||||||
_cb = str
|
|
||||||
|
|
||||||
class IpaddrUnitTest(unittest.TestCase):
|
class IpaddrUnitTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -99,26 +93,25 @@ class IpaddrUnitTest(unittest.TestCase):
|
||||||
self.assertEqual(ipaddr.IP(self.ipv4.ip).version, 4)
|
self.assertEqual(ipaddr.IP(self.ipv4.ip).version, 4)
|
||||||
self.assertEqual(ipaddr.IP(self.ipv6.ip).version, 6)
|
self.assertEqual(ipaddr.IP(self.ipv6.ip).version, 6)
|
||||||
|
|
||||||
if ipaddr._compat_has_real_bytes: # on python3+
|
def testIpFromPacked(self):
|
||||||
def testIpFromPacked(self):
|
ip = ipaddr.IP
|
||||||
ip = ipaddr.IP
|
|
||||||
|
|
||||||
self.assertEqual(self.ipv4.ip,
|
self.assertEqual(self.ipv4.ip,
|
||||||
ip(_cb('\x01\x02\x03\x04')).ip)
|
ip(b'\x01\x02\x03\x04').ip)
|
||||||
self.assertEqual(ip('255.254.253.252'),
|
self.assertEqual(ip('255.254.253.252'),
|
||||||
ip(_cb('\xff\xfe\xfd\xfc')))
|
ip(b'\xff\xfe\xfd\xfc'))
|
||||||
self.assertRaises(ValueError, ipaddr.IP, _cb('\x00' * 3))
|
self.assertRaises(ValueError, ipaddr.IP, b'\x00' * 3)
|
||||||
self.assertRaises(ValueError, ipaddr.IP, _cb('\x00' * 5))
|
self.assertRaises(ValueError, ipaddr.IP, b'\x00' * 5)
|
||||||
self.assertEqual(self.ipv6.ip,
|
self.assertEqual(self.ipv6.ip,
|
||||||
ip(_cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
|
ip(b'\x20\x01\x06\x58\x02\x2a\xca\xfe'
|
||||||
'\x02\x00\x00\x00\x00\x00\x00\x01')).ip)
|
b'\x02\x00\x00\x00\x00\x00\x00\x01').ip)
|
||||||
self.assertEqual(ip('ffff:2:3:4:ffff::'),
|
self.assertEqual(ip('ffff:2:3:4:ffff::'),
|
||||||
ip(_cb('\xff\xff\x00\x02\x00\x03\x00\x04' +
|
ip(b'\xff\xff\x00\x02\x00\x03\x00\x04' +
|
||||||
'\xff\xff' + '\x00' * 6)))
|
b'\xff\xff' + b'\x00' * 6))
|
||||||
self.assertEqual(ip('::'),
|
self.assertEqual(ip('::'),
|
||||||
ip(_cb('\x00' * 16)))
|
ip(b'\x00' * 16))
|
||||||
self.assertRaises(ValueError, ip, _cb('\x00' * 15))
|
self.assertRaises(ValueError, ip, b'\x00' * 15)
|
||||||
self.assertRaises(ValueError, ip, _cb('\x00' * 17))
|
self.assertRaises(ValueError, ip, b'\x00' * 17)
|
||||||
|
|
||||||
def testGetIp(self):
|
def testGetIp(self):
|
||||||
self.assertEqual(self.ipv4.ip, 16909060)
|
self.assertEqual(self.ipv4.ip, 16909060)
|
||||||
|
@ -404,17 +397,17 @@ class IpaddrUnitTest(unittest.TestCase):
|
||||||
|
|
||||||
def testPacked(self):
|
def testPacked(self):
|
||||||
self.assertEqual(self.ipv4.packed,
|
self.assertEqual(self.ipv4.packed,
|
||||||
_cb('\x01\x02\x03\x04'))
|
b'\x01\x02\x03\x04')
|
||||||
self.assertEqual(ipaddr.IPv4('255.254.253.252').packed,
|
self.assertEqual(ipaddr.IPv4('255.254.253.252').packed,
|
||||||
_cb('\xff\xfe\xfd\xfc'))
|
b'\xff\xfe\xfd\xfc')
|
||||||
self.assertEqual(self.ipv6.packed,
|
self.assertEqual(self.ipv6.packed,
|
||||||
_cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
|
b'\x20\x01\x06\x58\x02\x2a\xca\xfe' +
|
||||||
'\x02\x00\x00\x00\x00\x00\x00\x01'))
|
b'\x02\x00\x00\x00\x00\x00\x00\x01')
|
||||||
self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed,
|
self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed,
|
||||||
_cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
|
b'\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
|
||||||
+ '\x00' * 6))
|
+ b'\x00' * 6)
|
||||||
self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed,
|
self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed,
|
||||||
_cb('\x00' * 6 + '\x00\x01' + '\x00' * 8))
|
b'\x00' * 6 + b'\x00\x01' + b'\x00' * 8)
|
||||||
|
|
||||||
def testIpStrFromPrefixlen(self):
|
def testIpStrFromPrefixlen(self):
|
||||||
ipv4 = ipaddr.IPv4('1.2.3.4/24')
|
ipv4 = ipaddr.IPv4('1.2.3.4/24')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue