[Python-checkins] cpython: Close #14814: Avoid depending on struct by using newer features. Also use

nick.coghlan python-checkins at python.org
Mon Aug 20 02:19:35 CEST 2012


http://hg.python.org/cpython/rev/811d91591f73
changeset:   78662:811d91591f73
user:        Nick Coghlan <ncoghlan at gmail.com>
date:        Mon Aug 20 10:19:12 2012 +1000
summary:
  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.

files:
  Lib/ipaddress.py |  14 ++++++--------
  1 files changed, 6 insertions(+), 8 deletions(-)


diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -11,7 +11,6 @@
 __version__ = '1.0'
 
 
-import struct
 import functools
 
 IPV4LENGTH = 32
@@ -135,7 +134,7 @@
 
     """
     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 @@
 
     """
     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 @@
         # 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 @@
         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 @@
         # 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

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list