2016-04-06 23:00:49 +03:00
|
|
|
# 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
|
|
|
|
|
2016-06-04 12:08:00 +03:00
|
|
|
try:
|
|
|
|
import cPickle as pickle
|
|
|
|
pickle.dumps
|
|
|
|
except ImportError:
|
|
|
|
import pickle
|
2016-06-24 03:04:43 +03:00
|
|
|
pickle.dumps # silence pyflakes
|
2016-06-04 12:08:00 +03:00
|
|
|
|
2016-06-27 14:07:37 +03:00
|
|
|
try:
|
|
|
|
import xmlrpclib
|
|
|
|
xmlrpclib.Transport
|
|
|
|
except ImportError:
|
|
|
|
import xmlrpc.client as xmlrpclib
|
|
|
|
xmlrpclib.Transport
|
|
|
|
|
2016-06-27 13:46:10 +03:00
|
|
|
try:
|
|
|
|
import urlparse
|
|
|
|
urlparse.urlparse
|
|
|
|
except ImportError:
|
|
|
|
import urllib.parse as urlparse
|
|
|
|
urlparse.urlparse
|
|
|
|
|
2016-04-06 23:31:31 +03:00
|
|
|
try:
|
|
|
|
import cStringIO as io
|
|
|
|
stringio = io.StringIO
|
|
|
|
except ImportError:
|
|
|
|
import io
|
|
|
|
stringio = io.StringIO
|
|
|
|
|
2016-04-06 23:00:49 +03:00
|
|
|
try:
|
|
|
|
import Queue as _queue
|
2016-04-08 17:03:05 +03:00
|
|
|
_queue.Queue
|
2016-04-06 23:00:49 +03:00
|
|
|
except ImportError:
|
|
|
|
import queue as _queue
|
|
|
|
empty = _queue.Empty
|
|
|
|
queue = _queue.Queue
|
2016-04-07 01:35:52 +03:00
|
|
|
|
2016-04-07 03:05:48 +03:00
|
|
|
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",
|
2016-06-26 03:22:06 +03:00
|
|
|
"HTTPPasswordMgrWithDefaultRealm",
|
2016-04-07 03:05:48 +03:00
|
|
|
"ProxyHandler",
|
|
|
|
"quote",
|
|
|
|
"Request",
|
|
|
|
"splitattr",
|
|
|
|
"splitpasswd",
|
|
|
|
"splitport",
|
|
|
|
"splituser",
|
|
|
|
"unquote",
|
|
|
|
"url2pathname",
|
|
|
|
"urlopen",
|
|
|
|
))
|
|
|
|
import urllib.error
|
|
|
|
_alias(urlerr, urllib.error, (
|
|
|
|
"HTTPError",
|
|
|
|
"URLError",
|
|
|
|
))
|
|
|
|
|
2016-04-07 01:35:52 +03:00
|
|
|
try:
|
|
|
|
xrange
|
|
|
|
except NameError:
|
|
|
|
import builtins
|
|
|
|
builtins.xrange = range
|