summaryrefslogtreecommitdiffstats
path: root/Lib/ipaddress.py
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2012-08-20 00:19:12 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2012-08-20 00:19:12 (GMT)
commitdb7920b97874bf3988984fae57f4ca80fced558f (patch)
tree29e81f0066c1a49d8bea089f9671eab4348d4cd8 /Lib/ipaddress.py
parenta8517ad3d9ac743a1bdd7e590e28a0da169f6e91 (diff)
downloadcpython-db7920b97874bf3988984fae57f4ca80fced558f.zip
cpython-db7920b97874bf3988984fae57f4ca80fced558f.tar.gz
cpython-db7920b97874bf3988984fae57f4ca80fced558f.tar.bz2
Close #14814: Avoid depending on struct by using newer features. Also use enumerate where appropriate (patch by Serhiy Storchaka). Declaring PEP 3144 final at this point - any further changes to code or docs can go in new issues.
Diffstat (limited to 'Lib/ipaddress.py')
-rw-r--r--Lib/ipaddress.py14
1 files changed, 6 insertions, 8 deletions
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index cfc370c..22efb09 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -11,7 +11,6 @@ and networks.
__version__ = '1.0'
-import struct
import functools
IPV4LENGTH = 32
@@ -135,7 +134,7 @@ def v4_int_to_packed(address):
"""
try:
- return struct.pack('!I', address)
+ return address.to_bytes(4, 'big')
except:
raise ValueError("Address negative or too large for IPv4")
@@ -151,7 +150,7 @@ def v6_int_to_packed(address):
"""
try:
- return struct.pack('!QQ', address >> 64, address & (2**64 - 1))
+ return address.to_bytes(16, 'big')
except:
raise ValueError("Address negative or too large for IPv6")
@@ -1195,7 +1194,7 @@ class IPv4Address(_BaseV4, _BaseAddress):
# Constructing from a packed address
if isinstance(address, bytes):
self._check_packed_address(address, 4)
- self._ip = struct.unpack('!I', address)[0]
+ self._ip = int.from_bytes(address, 'big')
return
# Assume input argument to be string or any object representation
@@ -1632,8 +1631,8 @@ class _BaseV6:
best_doublecolon_len = 0
doublecolon_start = -1
doublecolon_len = 0
- for index in range(len(hextets)):
- if hextets[index] == '0':
+ for index, hextet in enumerate(hextets):
+ if hextet == '0':
doublecolon_len += 1
if doublecolon_start == -1:
# Start of a sequence of zeros.
@@ -1750,8 +1749,7 @@ class IPv6Address(_BaseV6, _BaseAddress):
# Constructing from a packed address
if isinstance(address, bytes):
self._check_packed_address(address, 16)
- tmp = struct.unpack('!QQ', address)
- self._ip = (tmp[0] << 64) | tmp[1]
+ self._ip = int.from_bytes(address, 'big')
return
# Assume input argument to be string or any object representation