mercurial/pycompat.py
changeset 29801 c63ab0524db7
parent 29800 178c89e8519a
child 30030 0f6d6fdd3c2a
equal deleted inserted replaced
29800:178c89e8519a 29801:c63ab0524db7
    51 stringio = io.StringIO
    51 stringio = io.StringIO
    52 empty = _queue.Empty
    52 empty = _queue.Empty
    53 queue = _queue.Queue
    53 queue = _queue.Queue
    54 
    54 
    55 class _pycompatstub(object):
    55 class _pycompatstub(object):
    56     pass
    56     def __init__(self):
       
    57         self._aliases = {}
    57 
    58 
    58 def _alias(alias, origin, items):
    59     def _registeraliases(self, origin, items):
    59     """ populate a _pycompatstub
    60         """Add items that will be populated at the first access"""
       
    61         self._aliases.update((item.replace('_', '').lower(), (origin, item))
       
    62                              for item in items)
    60 
    63 
    61     copies items from origin to alias
    64     def __getattr__(self, name):
    62     """
       
    63     for item in items:
       
    64         try:
    65         try:
    65             lcase = item.replace('_', '').lower()
    66             origin, item = self._aliases[name]
    66             setattr(alias, lcase, getattr(origin, item))
    67         except KeyError:
    67         except AttributeError:
    68             raise AttributeError(name)
    68             pass
    69         self.__dict__[name] = obj = getattr(origin, item)
       
    70         return obj
    69 
    71 
    70 httpserver = _pycompatstub()
    72 httpserver = _pycompatstub()
    71 urlreq = _pycompatstub()
    73 urlreq = _pycompatstub()
    72 urlerr = _pycompatstub()
    74 urlerr = _pycompatstub()
    73 try:
    75 if sys.version_info[0] < 3:
    74     import BaseHTTPServer
    76     import BaseHTTPServer
    75     import CGIHTTPServer
    77     import CGIHTTPServer
    76     import SimpleHTTPServer
    78     import SimpleHTTPServer
    77     import urllib2
    79     import urllib2
    78     import urllib
    80     import urllib
    79     _alias(urlreq, urllib, (
    81     urlreq._registeraliases(urllib, (
    80         "addclosehook",
    82         "addclosehook",
    81         "addinfourl",
    83         "addinfourl",
    82         "ftpwrapper",
    84         "ftpwrapper",
    83         "pathname2url",
    85         "pathname2url",
    84         "quote",
    86         "quote",
    88         "splituser",
    90         "splituser",
    89         "unquote",
    91         "unquote",
    90         "url2pathname",
    92         "url2pathname",
    91         "urlencode",
    93         "urlencode",
    92     ))
    94     ))
    93     _alias(urlreq, urllib2, (
    95     urlreq._registeraliases(urllib2, (
    94         "AbstractHTTPHandler",
    96         "AbstractHTTPHandler",
    95         "BaseHandler",
    97         "BaseHandler",
    96         "build_opener",
    98         "build_opener",
    97         "FileHandler",
    99         "FileHandler",
    98         "FTPHandler",
   100         "FTPHandler",
   104         "install_opener",
   106         "install_opener",
   105         "ProxyHandler",
   107         "ProxyHandler",
   106         "Request",
   108         "Request",
   107         "urlopen",
   109         "urlopen",
   108     ))
   110     ))
   109     _alias(urlerr, urllib2, (
   111     urlerr._registeraliases(urllib2, (
   110         "HTTPError",
   112         "HTTPError",
   111         "URLError",
   113         "URLError",
   112     ))
   114     ))
   113     _alias(httpserver, BaseHTTPServer, (
   115     httpserver._registeraliases(BaseHTTPServer, (
   114         "HTTPServer",
   116         "HTTPServer",
   115         "BaseHTTPRequestHandler",
   117         "BaseHTTPRequestHandler",
   116     ))
   118     ))
   117     _alias(httpserver, SimpleHTTPServer, (
   119     httpserver._registeraliases(SimpleHTTPServer, (
   118         "SimpleHTTPRequestHandler",
   120         "SimpleHTTPRequestHandler",
   119     ))
   121     ))
   120     _alias(httpserver, CGIHTTPServer, (
   122     httpserver._registeraliases(CGIHTTPServer, (
   121         "CGIHTTPRequestHandler",
   123         "CGIHTTPRequestHandler",
   122     ))
   124     ))
   123 
   125 
   124 except ImportError:
   126 else:
   125     import urllib.request
   127     import urllib.request
   126     _alias(urlreq, urllib.request, (
   128     urlreq._registeraliases(urllib.request, (
   127         "AbstractHTTPHandler",
   129         "AbstractHTTPHandler",
   128         "addclosehook",
   130         "addclosehook",
   129         "addinfourl",
   131         "addinfourl",
   130         "BaseHandler",
   132         "BaseHandler",
   131         "build_opener",
   133         "build_opener",
   149         "unquote",
   151         "unquote",
   150         "url2pathname",
   152         "url2pathname",
   151         "urlopen",
   153         "urlopen",
   152     ))
   154     ))
   153     import urllib.error
   155     import urllib.error
   154     _alias(urlerr, urllib.error, (
   156     urlerr._registeraliases(urllib.error, (
   155         "HTTPError",
   157         "HTTPError",
   156         "URLError",
   158         "URLError",
   157     ))
   159     ))
   158     import http.server
   160     import http.server
   159     _alias(httpserver, http.server, (
   161     httpserver._registeraliases(http.server, (
   160         "HTTPServer",
   162         "HTTPServer",
   161         "BaseHTTPRequestHandler",
   163         "BaseHTTPRequestHandler",
   162         "SimpleHTTPRequestHandler",
   164         "SimpleHTTPRequestHandler",
   163         "CGIHTTPRequestHandler",
   165         "CGIHTTPRequestHandler",
   164     ))
   166     ))