Only one SCons file uses urllib, and only one routine from that module, so
authorgregnoel <gregnoel@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 30 Mar 2010 13:40:36 +0000 (13:40 +0000)
committergregnoel <gregnoel@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 30 Mar 2010 13:40:36 +0000 (13:40 +0000)
use a simple hack to load that routine, no matter wheter it's Python 2.x or
Python 3.x.  Tested with Python 2.5, 2.6, and 3.0.

git-svn-id: http://scons.tigris.org/svn/scons/trunk@4738 fdb21ef1-2011-0410-befe-b5e4ea1792b1

bin/scons-test.py

index 0089e247ecee828c4bb9df5bc94c9d7788835f41..2191532c7f6a2c1b62a371bcb87b8d9ddcd41a49 100644 (file)
@@ -22,9 +22,18 @@ import os.path
 import sys
 import tempfile
 import time
-import urllib
 import zipfile
 
+try:
+    # try Python 3.x style
+    from urllib.request import urlretrieve
+except ImportError:
+    # nope, must be 2.x; this hack is equivalent
+    import imp
+    # protect import from fixer
+    urlretrieve = imp.load_module('urllib',
+                                  *imp.find_module('urllib')).urlretrieve
+
 helpstr = """\
 Usage: scons-test.py [-f zipfile] [-o outdir] [-v] [--xml] [runtest arguments]
 Options:
@@ -69,7 +78,7 @@ if not os.path.exists(tempdir):
 
 # Fetch the input file if it happens to be across a network somewhere.
 # Ohmigod, does Python make this simple...
-inputfile, headers = urllib.urlretrieve(inputfile)
+inputfile, headers = urlretrieve(inputfile)
 
 # Unzip the header file in the output directory.  We use our own code
 # (lifted from scons-unzip.py) to make the output subdirectory name