diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2012-08-20 00:19:12 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2012-08-20 00:19:12 (GMT) |
commit | db7920b97874bf3988984fae57f4ca80fced558f (patch) | |
tree | 29e81f0066c1a49d8bea089f9671eab4348d4cd8 /Lib/ipaddress.py | |
parent | a8517ad3d9ac743a1bdd7e590e28a0da169f6e91 (diff) | |
download | cpython-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.py | 14 |
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 |