##// END OF EJS Templates
pycompat: delay loading modules registered to stub...
Yuya Nishihara -
r29801:c63ab052 default
parent child Browse files
Show More
@@ -53,30 +53,32 b' 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",
@@ -90,7 +92,7 b' try:'
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",
@@ -106,24 +108,24 b' try:'
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",
@@ -151,12 +153,12 b' except ImportError:'
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",
General Comments 0
You need to be logged in to leave comments. Login now