Mercurial > hg-stable
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: