Show More
@@ -314,150 +314,3 else: | |||
|
314 | 314 | stringio = cStringIO.StringIO |
|
315 | 315 | maplist = map |
|
316 | 316 | rawinput = raw_input |
|
317 | ||
|
318 | class _pycompatstub(object): | |
|
319 | def __init__(self): | |
|
320 | self._aliases = {} | |
|
321 | ||
|
322 | def _registeraliases(self, origin, items): | |
|
323 | """Add items that will be populated at the first access""" | |
|
324 | items = map(sysstr, items) | |
|
325 | self._aliases.update( | |
|
326 | (item.replace(sysstr('_'), sysstr('')).lower(), (origin, item)) | |
|
327 | for item in items) | |
|
328 | ||
|
329 | def _registeralias(self, origin, attr, name): | |
|
330 | """Alias ``origin``.``attr`` as ``name``""" | |
|
331 | self._aliases[sysstr(name)] = (origin, sysstr(attr)) | |
|
332 | ||
|
333 | def __getattr__(self, name): | |
|
334 | try: | |
|
335 | origin, item = self._aliases[name] | |
|
336 | except KeyError: | |
|
337 | raise AttributeError(name) | |
|
338 | self.__dict__[name] = obj = getattr(origin, item) | |
|
339 | return obj | |
|
340 | ||
|
341 | httpserver = _pycompatstub() | |
|
342 | urlreq = _pycompatstub() | |
|
343 | urlerr = _pycompatstub() | |
|
344 | if not ispy3: | |
|
345 | import BaseHTTPServer | |
|
346 | import CGIHTTPServer | |
|
347 | import SimpleHTTPServer | |
|
348 | import urllib2 | |
|
349 | import urllib | |
|
350 | import urlparse | |
|
351 | urlreq._registeraliases(urllib, ( | |
|
352 | "addclosehook", | |
|
353 | "addinfourl", | |
|
354 | "ftpwrapper", | |
|
355 | "pathname2url", | |
|
356 | "quote", | |
|
357 | "splitattr", | |
|
358 | "splitpasswd", | |
|
359 | "splitport", | |
|
360 | "splituser", | |
|
361 | "unquote", | |
|
362 | "url2pathname", | |
|
363 | "urlencode", | |
|
364 | )) | |
|
365 | urlreq._registeraliases(urllib2, ( | |
|
366 | "AbstractHTTPHandler", | |
|
367 | "BaseHandler", | |
|
368 | "build_opener", | |
|
369 | "FileHandler", | |
|
370 | "FTPHandler", | |
|
371 | "HTTPBasicAuthHandler", | |
|
372 | "HTTPDigestAuthHandler", | |
|
373 | "HTTPHandler", | |
|
374 | "HTTPPasswordMgrWithDefaultRealm", | |
|
375 | "HTTPSHandler", | |
|
376 | "install_opener", | |
|
377 | "ProxyHandler", | |
|
378 | "Request", | |
|
379 | "urlopen", | |
|
380 | )) | |
|
381 | urlreq._registeraliases(urlparse, ( | |
|
382 | "urlparse", | |
|
383 | "urlunparse", | |
|
384 | )) | |
|
385 | urlerr._registeraliases(urllib2, ( | |
|
386 | "HTTPError", | |
|
387 | "URLError", | |
|
388 | )) | |
|
389 | httpserver._registeraliases(BaseHTTPServer, ( | |
|
390 | "HTTPServer", | |
|
391 | "BaseHTTPRequestHandler", | |
|
392 | )) | |
|
393 | httpserver._registeraliases(SimpleHTTPServer, ( | |
|
394 | "SimpleHTTPRequestHandler", | |
|
395 | )) | |
|
396 | httpserver._registeraliases(CGIHTTPServer, ( | |
|
397 | "CGIHTTPRequestHandler", | |
|
398 | )) | |
|
399 | ||
|
400 | else: | |
|
401 | import urllib.parse | |
|
402 | urlreq._registeraliases(urllib.parse, ( | |
|
403 | "splitattr", | |
|
404 | "splitpasswd", | |
|
405 | "splitport", | |
|
406 | "splituser", | |
|
407 | "urlparse", | |
|
408 | "urlunparse", | |
|
409 | )) | |
|
410 | urlreq._registeralias(urllib.parse, "unquote_to_bytes", "unquote") | |
|
411 | import urllib.request | |
|
412 | urlreq._registeraliases(urllib.request, ( | |
|
413 | "AbstractHTTPHandler", | |
|
414 | "BaseHandler", | |
|
415 | "build_opener", | |
|
416 | "FileHandler", | |
|
417 | "FTPHandler", | |
|
418 | "ftpwrapper", | |
|
419 | "HTTPHandler", | |
|
420 | "HTTPSHandler", | |
|
421 | "install_opener", | |
|
422 | "pathname2url", | |
|
423 | "HTTPBasicAuthHandler", | |
|
424 | "HTTPDigestAuthHandler", | |
|
425 | "HTTPPasswordMgrWithDefaultRealm", | |
|
426 | "ProxyHandler", | |
|
427 | "Request", | |
|
428 | "url2pathname", | |
|
429 | "urlopen", | |
|
430 | )) | |
|
431 | import urllib.response | |
|
432 | urlreq._registeraliases(urllib.response, ( | |
|
433 | "addclosehook", | |
|
434 | "addinfourl", | |
|
435 | )) | |
|
436 | import urllib.error | |
|
437 | urlerr._registeraliases(urllib.error, ( | |
|
438 | "HTTPError", | |
|
439 | "URLError", | |
|
440 | )) | |
|
441 | import http.server | |
|
442 | httpserver._registeraliases(http.server, ( | |
|
443 | "HTTPServer", | |
|
444 | "BaseHTTPRequestHandler", | |
|
445 | "SimpleHTTPRequestHandler", | |
|
446 | "CGIHTTPRequestHandler", | |
|
447 | )) | |
|
448 | ||
|
449 | # urllib.parse.quote() accepts both str and bytes, decodes bytes | |
|
450 | # (if necessary), and returns str. This is wonky. We provide a custom | |
|
451 | # implementation that only accepts bytes and emits bytes. | |
|
452 | def quote(s, safe=r'/'): | |
|
453 | s = urllib.parse.quote_from_bytes(s, safe=safe) | |
|
454 | return s.encode('ascii', 'strict') | |
|
455 | ||
|
456 | # urllib.parse.urlencode() returns str. We use this function to make | |
|
457 | # sure we return bytes. | |
|
458 | def urlencode(query, doseq=False): | |
|
459 | s = urllib.parse.urlencode(query, doseq=doseq) | |
|
460 | return s.encode('ascii') | |
|
461 | ||
|
462 | urlreq.quote = quote | |
|
463 | urlreq.urlencode = urlencode |
@@ -8,7 +8,99 from __future__ import absolute_import | |||
|
8 | 8 | |
|
9 | 9 | from . import pycompat |
|
10 | 10 | |
|
11 | _sysstr = pycompat.sysstr | |
|
12 | ||
|
13 | class _pycompatstub(object): | |
|
14 | def __init__(self): | |
|
15 | self._aliases = {} | |
|
16 | ||
|
17 | def _registeraliases(self, origin, items): | |
|
18 | """Add items that will be populated at the first access""" | |
|
19 | items = map(_sysstr, items) | |
|
20 | self._aliases.update( | |
|
21 | (item.replace(_sysstr('_'), _sysstr('')).lower(), (origin, item)) | |
|
22 | for item in items) | |
|
23 | ||
|
24 | def _registeralias(self, origin, attr, name): | |
|
25 | """Alias ``origin``.``attr`` as ``name``""" | |
|
26 | self._aliases[_sysstr(name)] = (origin, _sysstr(attr)) | |
|
27 | ||
|
28 | def __getattr__(self, name): | |
|
29 | try: | |
|
30 | origin, item = self._aliases[name] | |
|
31 | except KeyError: | |
|
32 | raise AttributeError(name) | |
|
33 | self.__dict__[name] = obj = getattr(origin, item) | |
|
34 | return obj | |
|
35 | ||
|
36 | httpserver = _pycompatstub() | |
|
37 | urlreq = _pycompatstub() | |
|
38 | urlerr = _pycompatstub() | |
|
39 | ||
|
11 | 40 | if pycompat.ispy3: |
|
41 | import urllib.parse | |
|
42 | urlreq._registeraliases(urllib.parse, ( | |
|
43 | "splitattr", | |
|
44 | "splitpasswd", | |
|
45 | "splitport", | |
|
46 | "splituser", | |
|
47 | "urlparse", | |
|
48 | "urlunparse", | |
|
49 | )) | |
|
50 | urlreq._registeralias(urllib.parse, "unquote_to_bytes", "unquote") | |
|
51 | import urllib.request | |
|
52 | urlreq._registeraliases(urllib.request, ( | |
|
53 | "AbstractHTTPHandler", | |
|
54 | "BaseHandler", | |
|
55 | "build_opener", | |
|
56 | "FileHandler", | |
|
57 | "FTPHandler", | |
|
58 | "ftpwrapper", | |
|
59 | "HTTPHandler", | |
|
60 | "HTTPSHandler", | |
|
61 | "install_opener", | |
|
62 | "pathname2url", | |
|
63 | "HTTPBasicAuthHandler", | |
|
64 | "HTTPDigestAuthHandler", | |
|
65 | "HTTPPasswordMgrWithDefaultRealm", | |
|
66 | "ProxyHandler", | |
|
67 | "Request", | |
|
68 | "url2pathname", | |
|
69 | "urlopen", | |
|
70 | )) | |
|
71 | import urllib.response | |
|
72 | urlreq._registeraliases(urllib.response, ( | |
|
73 | "addclosehook", | |
|
74 | "addinfourl", | |
|
75 | )) | |
|
76 | import urllib.error | |
|
77 | urlerr._registeraliases(urllib.error, ( | |
|
78 | "HTTPError", | |
|
79 | "URLError", | |
|
80 | )) | |
|
81 | import http.server | |
|
82 | httpserver._registeraliases(http.server, ( | |
|
83 | "HTTPServer", | |
|
84 | "BaseHTTPRequestHandler", | |
|
85 | "SimpleHTTPRequestHandler", | |
|
86 | "CGIHTTPRequestHandler", | |
|
87 | )) | |
|
88 | ||
|
89 | # urllib.parse.quote() accepts both str and bytes, decodes bytes | |
|
90 | # (if necessary), and returns str. This is wonky. We provide a custom | |
|
91 | # implementation that only accepts bytes and emits bytes. | |
|
92 | def quote(s, safe=r'/'): | |
|
93 | s = urllib.parse.quote_from_bytes(s, safe=safe) | |
|
94 | return s.encode('ascii', 'strict') | |
|
95 | ||
|
96 | # urllib.parse.urlencode() returns str. We use this function to make | |
|
97 | # sure we return bytes. | |
|
98 | def urlencode(query, doseq=False): | |
|
99 | s = urllib.parse.urlencode(query, doseq=doseq) | |
|
100 | return s.encode('ascii') | |
|
101 | ||
|
102 | urlreq.quote = quote | |
|
103 | urlreq.urlencode = urlencode | |
|
12 | 104 | |
|
13 | 105 | def getfullurl(req): |
|
14 | 106 | return req.full_url |
@@ -25,6 +117,60 if pycompat.ispy3: | |||
|
25 | 117 | def hasdata(req): |
|
26 | 118 | return req.data is not None |
|
27 | 119 | else: |
|
120 | import BaseHTTPServer | |
|
121 | import CGIHTTPServer | |
|
122 | import SimpleHTTPServer | |
|
123 | import urllib2 | |
|
124 | import urllib | |
|
125 | import urlparse | |
|
126 | urlreq._registeraliases(urllib, ( | |
|
127 | "addclosehook", | |
|
128 | "addinfourl", | |
|
129 | "ftpwrapper", | |
|
130 | "pathname2url", | |
|
131 | "quote", | |
|
132 | "splitattr", | |
|
133 | "splitpasswd", | |
|
134 | "splitport", | |
|
135 | "splituser", | |
|
136 | "unquote", | |
|
137 | "url2pathname", | |
|
138 | "urlencode", | |
|
139 | )) | |
|
140 | urlreq._registeraliases(urllib2, ( | |
|
141 | "AbstractHTTPHandler", | |
|
142 | "BaseHandler", | |
|
143 | "build_opener", | |
|
144 | "FileHandler", | |
|
145 | "FTPHandler", | |
|
146 | "HTTPBasicAuthHandler", | |
|
147 | "HTTPDigestAuthHandler", | |
|
148 | "HTTPHandler", | |
|
149 | "HTTPPasswordMgrWithDefaultRealm", | |
|
150 | "HTTPSHandler", | |
|
151 | "install_opener", | |
|
152 | "ProxyHandler", | |
|
153 | "Request", | |
|
154 | "urlopen", | |
|
155 | )) | |
|
156 | urlreq._registeraliases(urlparse, ( | |
|
157 | "urlparse", | |
|
158 | "urlunparse", | |
|
159 | )) | |
|
160 | urlerr._registeraliases(urllib2, ( | |
|
161 | "HTTPError", | |
|
162 | "URLError", | |
|
163 | )) | |
|
164 | httpserver._registeraliases(BaseHTTPServer, ( | |
|
165 | "HTTPServer", | |
|
166 | "BaseHTTPRequestHandler", | |
|
167 | )) | |
|
168 | httpserver._registeraliases(SimpleHTTPServer, ( | |
|
169 | "SimpleHTTPRequestHandler", | |
|
170 | )) | |
|
171 | httpserver._registeraliases(CGIHTTPServer, ( | |
|
172 | "CGIHTTPRequestHandler", | |
|
173 | )) | |
|
28 | 174 | |
|
29 | 175 | def gethost(req): |
|
30 | 176 | return req.get_host() |
@@ -50,6 +50,7 from . import ( | |||
|
50 | 50 | i18n, |
|
51 | 51 | policy, |
|
52 | 52 | pycompat, |
|
53 | urllibcompat, | |
|
53 | 54 | ) |
|
54 | 55 | |
|
55 | 56 | base85 = policy.importmod(r'base85') |
@@ -62,7 +63,6 b85encode = base85.b85encode | |||
|
62 | 63 | cookielib = pycompat.cookielib |
|
63 | 64 | empty = pycompat.empty |
|
64 | 65 | httplib = pycompat.httplib |
|
65 | httpserver = pycompat.httpserver | |
|
66 | 66 | pickle = pycompat.pickle |
|
67 | 67 | queue = pycompat.queue |
|
68 | 68 | socketserver = pycompat.socketserver |
@@ -70,10 +70,12 stderr = pycompat.stderr | |||
|
70 | 70 | stdin = pycompat.stdin |
|
71 | 71 | stdout = pycompat.stdout |
|
72 | 72 | stringio = pycompat.stringio |
|
73 | urlerr = pycompat.urlerr | |
|
74 | urlreq = pycompat.urlreq | |
|
75 | 73 | xmlrpclib = pycompat.xmlrpclib |
|
76 | 74 | |
|
75 | httpserver = urllibcompat.httpserver | |
|
76 | urlerr = urllibcompat.urlerr | |
|
77 | urlreq = urllibcompat.urlreq | |
|
78 | ||
|
77 | 79 | # workaround for win32mbcs |
|
78 | 80 | _filenamebytestr = pycompat.bytestr |
|
79 | 81 |
General Comments 0
You need to be logged in to leave comments.
Login now