[Secure-testing-commits] r19903 - lib/python

Florian Weimer fw at alioth.debian.org
Mon Aug 6 19:32:58 UTC 2012


Author: fw
Date: 2012-08-06 19:32:58 +0000 (Mon, 06 Aug 2012)
New Revision: 19903

Modified:
   lib/python/debian_support.py
Log:
lib/python/debian_support.py: replace urllib with urllib2 and set timeout


Modified: lib/python/debian_support.py
===================================================================
--- lib/python/debian_support.py	2012-08-06 18:50:38 UTC (rev 19902)
+++ lib/python/debian_support.py	2012-08-06 19:32:58 UTC (rev 19903)
@@ -17,12 +17,15 @@
 
 """This module implements facilities to deal with Debian-specific metadata."""
 
-import types
+import gzip
 import json
 import os.path
 import re
 import sys
 import tempfile
+import types
+import urllib2
+from cStringIO import StringIO
 
 try:
     from hashlib import sha1
@@ -33,6 +36,9 @@
 import apt_pkg
 apt_pkg.init()
 
+# Timeout for downloads.
+TIMEOUT = 30
+
 class ParseError(Exception):
     """An exception which is used to signal a parse failure.
 
@@ -282,23 +288,9 @@
 
     Returns the lines in the file."""
 
-    # The implementation is rather crude, but it seems that the gzip
-    # module needs a real file for input.
-
-    import gzip
-    import tempfile
-    import urllib
-
-    (handle, fname) = tempfile.mkstemp()
-    try:
-        os.close(handle)
-        (filename, headers) = urllib.urlretrieve(remote, fname)
-        gfile = gzip.GzipFile(filename)
-        lines = gfile.readlines()
-        gfile.close()
-    finally:
-        os.unlink(fname)
-    return lines
+    data = urllib2.urlopen(remote, timeout=TIMEOUT)
+    with gzip.GzipFile(fileobj=StringIO(data.read())) as gfile:
+        return gfile.readlines()
         
 def downloadFile(remote, local):
     """Copies a gzipped remote file to the local system.
@@ -330,17 +322,14 @@
     patches_to_apply = []
     patch_hashes = {}
     
-    import urllib
     index_name = remote + '.diff/Index'
 
     re_whitespace=re.compile('\s+')
 
     try:
-        index_url = urllib.urlopen(index_name)
+        index_url = urllib2.urlopen(index_name, timeout=TIMEOUT)
         index_fields = list(PackageFile(index_name, index_url))
     except ParseError:
-        # FIXME: urllib does not raise a proper exception, so we parse
-        # the error message.
         if verbose:
             print "updateFile: could not interpret patch index file"
         return downloadFile(remote, local)




More information about the Secure-testing-commits mailing list