pycompat.py
159 lines
| 3.3 KiB
| text/x-python
|
PythonLexer
/ mercurial / pycompat.py
timeless
|
r28818 | # pycompat.py - portability shim for python 3 | ||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
"""Mercurial portability shim for python 3. | ||||
This contains aliases to hide python version-specific details from the core. | ||||
""" | ||||
from __future__ import absolute_import | ||||
try: | ||||
Pulkit Goyal
|
r29324 | import cPickle as pickle | ||
pickle.dumps | ||||
except ImportError: | ||||
import pickle | ||||
Pierre-Yves David
|
r29405 | pickle.dumps # silence pyflakes | ||
Pulkit Goyal
|
r29324 | |||
try: | ||||
Pulkit Goyal
|
r29455 | import httplib | ||
httplib.HTTPException | ||||
except ImportError: | ||||
import http.client as httplib | ||||
httplib.HTTPException | ||||
try: | ||||
Pulkit Goyal
|
r29433 | import SocketServer as socketserver | ||
socketserver.ThreadingMixIn | ||||
except ImportError: | ||||
import socketserver | ||||
socketserver.ThreadingMixIn | ||||
try: | ||||
Pulkit Goyal
|
r29432 | import xmlrpclib | ||
xmlrpclib.Transport | ||||
except ImportError: | ||||
import xmlrpc.client as xmlrpclib | ||||
xmlrpclib.Transport | ||||
try: | ||||
Pulkit Goyal
|
r29431 | import urlparse | ||
urlparse.urlparse | ||||
except ImportError: | ||||
import urllib.parse as urlparse | ||||
urlparse.urlparse | ||||
try: | ||||
timeless
|
r28835 | import cStringIO as io | ||
stringio = io.StringIO | ||||
except ImportError: | ||||
import io | ||||
stringio = io.StringIO | ||||
try: | ||||
timeless
|
r28818 | import Queue as _queue | ||
timeless
|
r28833 | _queue.Queue | ||
timeless
|
r28818 | except ImportError: | ||
import queue as _queue | ||||
empty = _queue.Empty | ||||
queue = _queue.Queue | ||||
timeless
|
r28834 | |||
timeless
|
r28882 | 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", | ||||
Gregory Szorc
|
r29414 | "HTTPPasswordMgrWithDefaultRealm", | ||
timeless
|
r28882 | "ProxyHandler", | ||
"quote", | ||||
"Request", | ||||
"splitattr", | ||||
"splitpasswd", | ||||
"splitport", | ||||
"splituser", | ||||
"unquote", | ||||
"url2pathname", | ||||
"urlopen", | ||||
)) | ||||
import urllib.error | ||||
_alias(urlerr, urllib.error, ( | ||||
"HTTPError", | ||||
"URLError", | ||||
)) | ||||
timeless
|
r28834 | try: | ||
xrange | ||||
except NameError: | ||||
import builtins | ||||
builtins.xrange = range | ||||