From 1f7627fd3ccab0fbab88ad2d082b67f5719af92c Mon Sep 17 00:00:00 2001 From: Sarah Owens Date: Wed, 31 Oct 2012 09:21:55 -0700 Subject: [PATCH] Use python3 urllib when urllib2 not available This is part of a series of changes to introduce Python3 support. Change-Id: I605b145791053c1f2d7bf3c907c5a68649b21d12 --- git_config.py | 19 +++++++++++++++---- main.py | 35 ++++++++++++++++++++++------------- repo | 33 ++++++++++++++++++++++----------- 3 files changed, 59 insertions(+), 28 deletions(-) diff --git a/git_config.py b/git_config.py index d6510aae..6589b193 100644 --- a/git_config.py +++ b/git_config.py @@ -23,7 +23,18 @@ try: except ImportError: import dummy_threading as _threading import time -import urllib2 +try: + import urllib2 +except ImportError: + # For python3 + import urllib.request + import urllib.error +else: + # For python2 + import imp + urllib = imp.new_module('urllib') + urllib.request = urllib2 + urllib.error = urllib2 from signal import SIGTERM from error import GitError, UploadError @@ -580,7 +591,7 @@ class Remote(object): else: try: info_url = u + 'ssh_info' - info = urllib2.urlopen(info_url).read() + info = urllib.request.urlopen(info_url).read() if '<' in info: # Assume the server gave us some sort of HTML # response back, like maybe a login page. @@ -593,9 +604,9 @@ class Remote(object): else: host, port = info.split() self._review_url = self._SshReviewUrl(userEmail, host, port) - except urllib2.HTTPError as e: + except urllib.error.HTTPError as e: raise UploadError('%s: %s' % (self.review, str(e))) - except urllib2.URLError as e: + except urllib.error.URLError as e: raise UploadError('%s: %s' % (self.review, str(e))) REVIEW_CACHE[u] = self._review_url diff --git a/main.py b/main.py index 7a09c6ba..10e1cf8c 100755 --- a/main.py +++ b/main.py @@ -29,7 +29,16 @@ import optparse import os import sys import time -import urllib2 +try: + import urllib2 +except ImportError: + # For python3 + import urllib.request +else: + # For python2 + import imp + urllib = imp.new_module('urllib') + urllib.request = urllib2 from trace import SetTrace from git_command import git, GitCommand @@ -267,7 +276,7 @@ def _UserAgent(): py_version[0], py_version[1], py_version[2]) return _user_agent -class _UserAgentHandler(urllib2.BaseHandler): +class _UserAgentHandler(urllib.request.BaseHandler): def http_request(self, req): req.add_header('User-Agent', _UserAgent()) return req @@ -289,10 +298,10 @@ def _AddPasswordFromUserInput(handler, msg, req): return handler.passwd.add_password(None, url, user, password) -class _BasicAuthHandler(urllib2.HTTPBasicAuthHandler): +class _BasicAuthHandler(urllib.request.HTTPBasicAuthHandler): def http_error_401(self, req, fp, code, msg, headers): _AddPasswordFromUserInput(self, msg, req) - return urllib2.HTTPBasicAuthHandler.http_error_401( + return urllib.request.HTTPBasicAuthHandler.http_error_401( self, req, fp, code, msg, headers) def http_error_auth_reqed(self, authreq, host, req, headers): @@ -302,7 +311,7 @@ class _BasicAuthHandler(urllib2.HTTPBasicAuthHandler): val = val.replace('\n', '') old_add_header(name, val) req.add_header = _add_header - return urllib2.AbstractBasicAuthHandler.http_error_auth_reqed( + return urllib.request.AbstractBasicAuthHandler.http_error_auth_reqed( self, authreq, host, req, headers) except: reset = getattr(self, 'reset_retry_count', None) @@ -312,10 +321,10 @@ class _BasicAuthHandler(urllib2.HTTPBasicAuthHandler): self.retried = 0 raise -class _DigestAuthHandler(urllib2.HTTPDigestAuthHandler): +class _DigestAuthHandler(urllib.request.HTTPDigestAuthHandler): def http_error_401(self, req, fp, code, msg, headers): _AddPasswordFromUserInput(self, msg, req) - return urllib2.HTTPDigestAuthHandler.http_error_401( + return urllib.request.HTTPDigestAuthHandler.http_error_401( self, req, fp, code, msg, headers) def http_error_auth_reqed(self, auth_header, host, req, headers): @@ -325,7 +334,7 @@ class _DigestAuthHandler(urllib2.HTTPDigestAuthHandler): val = val.replace('\n', '') old_add_header(name, val) req.add_header = _add_header - return urllib2.AbstractDigestAuthHandler.http_error_auth_reqed( + return urllib.request.AbstractDigestAuthHandler.http_error_auth_reqed( self, auth_header, host, req, headers) except: reset = getattr(self, 'reset_retry_count', None) @@ -338,7 +347,7 @@ class _DigestAuthHandler(urllib2.HTTPDigestAuthHandler): def init_http(): handlers = [_UserAgentHandler()] - mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() + mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() try: n = netrc.netrc() for host in n.hosts: @@ -354,11 +363,11 @@ def init_http(): if 'http_proxy' in os.environ: url = os.environ['http_proxy'] - handlers.append(urllib2.ProxyHandler({'http': url, 'https': url})) + handlers.append(urllib.request.ProxyHandler({'http': url, 'https': url})) if 'REPO_CURL_VERBOSE' in os.environ: - handlers.append(urllib2.HTTPHandler(debuglevel=1)) - handlers.append(urllib2.HTTPSHandler(debuglevel=1)) - urllib2.install_opener(urllib2.build_opener(*handlers)) + handlers.append(urllib.request.HTTPHandler(debuglevel=1)) + handlers.append(urllib.request.HTTPSHandler(debuglevel=1)) + urllib.request.install_opener(urllib.request.build_opener(*handlers)) def _Main(argv): result = 0 diff --git a/repo b/repo index 7c633fc3..060ea6d1 100755 --- a/repo +++ b/repo @@ -122,7 +122,18 @@ import os import re import subprocess import sys -import urllib2 +try: + import urllib2 +except ImportError: + # For python3 + import urllib.request + import urllib.error +else: + # For python2 + import imp + urllib = imp.new_module('urllib') + urllib.request = urllib2 + urllib.error = urllib2 home_dot_repo = os.path.expanduser('~/.repoconfig') gpg_dir = os.path.join(home_dot_repo, 'gnupg') @@ -355,7 +366,7 @@ def _SetConfig(local, name, value): def _InitHttp(): handlers = [] - mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() + mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() try: import netrc n = netrc.netrc() @@ -365,16 +376,16 @@ def _InitHttp(): mgr.add_password(p[1], 'https://%s/' % host, p[0], p[2]) except: pass - handlers.append(urllib2.HTTPBasicAuthHandler(mgr)) - handlers.append(urllib2.HTTPDigestAuthHandler(mgr)) + handlers.append(urllib.request.HTTPBasicAuthHandler(mgr)) + handlers.append(urllib.request.HTTPDigestAuthHandler(mgr)) if 'http_proxy' in os.environ: url = os.environ['http_proxy'] - handlers.append(urllib2.ProxyHandler({'http': url, 'https': url})) + handlers.append(urllib.request.ProxyHandler({'http': url, 'https': url})) if 'REPO_CURL_VERBOSE' in os.environ: - handlers.append(urllib2.HTTPHandler(debuglevel=1)) - handlers.append(urllib2.HTTPSHandler(debuglevel=1)) - urllib2.install_opener(urllib2.build_opener(*handlers)) + handlers.append(urllib.request.HTTPHandler(debuglevel=1)) + handlers.append(urllib.request.HTTPSHandler(debuglevel=1)) + urllib.request.install_opener(urllib.request.build_opener(*handlers)) def _Fetch(url, local, src, quiet): if not quiet: @@ -423,14 +434,14 @@ def _DownloadBundle(url, local, quiet): dest = open(os.path.join(local, '.git', 'clone.bundle'), 'w+b') try: try: - r = urllib2.urlopen(url) - except urllib2.HTTPError as e: + r = urllib.request.urlopen(url) + except urllib.error.HTTPError as e: if e.code == 404: return False print >>sys.stderr, 'fatal: Cannot get %s' % url print >>sys.stderr, 'fatal: HTTP error %s' % e.code raise CloneFailure() - except urllib2.URLError as e: + except urllib.error.URLError as e: print >>sys.stderr, 'fatal: Cannot get %s' % url print >>sys.stderr, 'fatal: error %s' % e.reason raise CloneFailure()