changeset 28882:800ec7c048b0

pycompat: add util.urlerr util.urlreq classes for py3 compat python3 url.request and url.error are mapped as util.urlreq/util.urlerr python2 equivalents from urllib/urllib2 are mapped according to the py3 hierarchy
author timeless <timeless@mozdev.org>
date Thu, 07 Apr 2016 00:05:48 +0000
parents d9f7f590f1e3
children 032c4c2f802a
files mercurial/pycompat.py mercurial/util.py
diffstat 2 files changed, 93 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/pycompat.py	Sun Mar 20 16:49:56 2016 -0700
+++ b/mercurial/pycompat.py	Thu Apr 07 00:05:48 2016 +0000
@@ -25,6 +25,97 @@
 empty = _queue.Empty
 queue = _queue.Queue
 
+class _pycompatstub(object):
+    pass
+
+def _alias(alias, origin, items):
+    """ populate a _pycompatstub
+
+    copies items from origin to alias
+    """
+    def hgcase(item):
+        return item.replace('_', '').lower()
+    for item in items:
+        try:
+            setattr(alias, hgcase(item), getattr(origin, item))
+        except AttributeError:
+            pass
+
+urlreq = _pycompatstub()
+urlerr = _pycompatstub()
+try:
+    import urllib2
+    import urllib
+    _alias(urlreq, urllib, (
+        "addclosehook",
+        "addinfourl",
+        "ftpwrapper",
+        "pathname2url",
+        "quote",
+        "splitattr",
+        "splitpasswd",
+        "splitport",
+        "splituser",
+        "unquote",
+        "url2pathname",
+        "urlencode",
+        "urlencode",
+    ))
+    _alias(urlreq, urllib2, (
+        "AbstractHTTPHandler",
+        "BaseHandler",
+        "build_opener",
+        "FileHandler",
+        "FTPHandler",
+        "HTTPBasicAuthHandler",
+        "HTTPDigestAuthHandler",
+        "HTTPHandler",
+        "HTTPPasswordMgrWithDefaultRealm",
+        "HTTPSHandler",
+        "install_opener",
+        "ProxyHandler",
+        "Request",
+        "urlopen",
+    ))
+    _alias(urlerr, urllib2, (
+        "HTTPError",
+        "URLError",
+    ))
+
+except ImportError:
+    import urllib.request
+    _alias(urlreq, urllib.request, (
+        "AbstractHTTPHandler",
+        "addclosehook",
+        "addinfourl",
+        "BaseHandler",
+        "build_opener",
+        "FileHandler",
+        "FTPHandler",
+        "ftpwrapper",
+        "HTTPHandler",
+        "HTTPSHandler",
+        "install_opener",
+        "pathname2url",
+        "HTTPBasicAuthHandler",
+        "HTTPDigestAuthHandler",
+        "ProxyHandler",
+        "quote",
+        "Request",
+        "splitattr",
+        "splitpasswd",
+        "splitport",
+        "splituser",
+        "unquote",
+        "url2pathname",
+        "urlopen",
+    ))
+    import urllib.error
+    _alias(urlerr, urllib.error, (
+        "HTTPError",
+        "URLError",
+    ))
+
 try:
     xrange
 except NameError:
--- a/mercurial/util.py	Sun Mar 20 16:49:56 2016 -0700
+++ b/mercurial/util.py	Thu Apr 07 00:05:48 2016 +0000
@@ -49,6 +49,8 @@
 for attr in (
     'empty',
     'queue',
+    'urlerr',
+    'urlreq',
     'stringio',
 ):
     globals()[attr] = getattr(pycompat, attr)