pycompat.py
153 lines
| 3.5 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 | ||||
Pulkit Goyal
|
r29584 | import sys | ||
if sys.version_info[0] < 3: | ||||
Pulkit Goyal
|
r29324 | import cPickle as pickle | ||
Pulkit Goyal
|
r29584 | import cStringIO as io | ||
Pulkit Goyal
|
r29455 | import httplib | ||
Pulkit Goyal
|
r29584 | import Queue as _queue | ||
Pulkit Goyal
|
r29433 | import SocketServer as socketserver | ||
Pulkit Goyal
|
r29584 | import urlparse | ||
Pulkit Goyal
|
r29432 | import xmlrpclib | ||
Pulkit Goyal
|
r29584 | else: | ||
import http.client as httplib | ||||
import io | ||||
import pickle | ||||
import queue as _queue | ||||
import socketserver | ||||
import urllib.parse as urlparse | ||||
Pulkit Goyal
|
r29432 | import xmlrpc.client as xmlrpclib | ||
Pulkit Goyal
|
r29431 | |||
Pulkit Goyal
|
r29584 | stringio = io.StringIO | ||
timeless
|
r28818 | 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 | ||||
Pulkit Goyal
|
r29566 | httpserver = _pycompatstub() | ||
timeless
|
r28882 | urlreq = _pycompatstub() | ||
urlerr = _pycompatstub() | ||||
try: | ||||
Pulkit Goyal
|
r29566 | import BaseHTTPServer | ||
import CGIHTTPServer | ||||
import SimpleHTTPServer | ||||
timeless
|
r28882 | 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", | ||||
)) | ||||
Pulkit Goyal
|
r29566 | _alias(httpserver, BaseHTTPServer, ( | ||
"HTTPServer", | ||||
"BaseHTTPRequestHandler", | ||||
)) | ||||
_alias(httpserver, SimpleHTTPServer, ( | ||||
"SimpleHTTPRequestHandler", | ||||
)) | ||||
_alias(httpserver, CGIHTTPServer, ( | ||||
"CGIHTTPRequestHandler", | ||||
)) | ||||
timeless
|
r28882 | |||
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", | ||||
)) | ||||
Pulkit Goyal
|
r29566 | import http.server | ||
_alias(httpserver, http.server, ( | ||||
"HTTPServer", | ||||
"BaseHTTPRequestHandler", | ||||
"SimpleHTTPRequestHandler", | ||||
"CGIHTTPRequestHandler", | ||||
)) | ||||
timeless
|
r28882 | |||
timeless
|
r28834 | try: | ||
xrange | ||||
except NameError: | ||||
import builtins | ||||
builtins.xrange = range | ||||