%PDF- %PDF-
Direktori : /lib/python3/dist-packages/mechanize/ |
Current File : //lib/python3/dist-packages/mechanize/polyglot.py |
#!/usr/bin/env python # vim:fileencoding=utf-8 # Copyright: 2018, Kovid Goyal <kovid at kovidgoyal.net> from __future__ import (absolute_import, division, print_function, unicode_literals) import collections import sys is_py2 = sys.version_info.major < 3 if is_py2: import types from urllib import ( urlencode, pathname2url, quote, addinfourl, quote_plus, urlopen, splitattr, splithost as urllib_splithost, getproxies, ftpwrapper, proxy_bypass as urllib_proxy_bypass, splitpasswd, splitport, splittype, splituser, splitvalue, unquote, unwrap, url2pathname ) from urllib2 import ( HTTPError, URLError, install_opener, build_opener, ProxyHandler ) from robotparser import RobotFileParser from urlparse import urlsplit, urljoin, urlparse, urlunparse from httplib import HTTPMessage, HTTPConnection, HTTPSConnection from cookielib import ( DEFAULT_HTTP_PORT, CookiePolicy, DefaultCookiePolicy, FileCookieJar, LoadError, LWPCookieJar, _debug, domain_match, eff_request_host, escape_path, is_HDN, lwp_cookie_str, reach, request_path, request_port, user_domain_match, Cookie, CookieJar, MozillaCookieJar, request_host) from cStringIO import StringIO from future_builtins import map # noqa def is_string(x): return isinstance(x, basestring) def iteritems(x): return x.iteritems() def itervalues(x): return x.itervalues() def is_class(obj): return isinstance(obj, (types.ClassType, type)) def raise_with_traceback(exc): exec('raise exc, None, sys.exc_info()[2]') def is_mapping(x): return isinstance(x, collections.Mapping) codepoint_to_chr = unichr unicode_type = unicode create_response_info = HTTPMessage else: import re from urllib.error import HTTPError, URLError from urllib.robotparser import RobotFileParser from urllib.parse import ( urlsplit, urljoin, urlparse, urlunparse, urlencode, quote_plus, unquote, unwrap, quote ) from urllib.request import ( pathname2url, addinfourl, install_opener, build_opener, ProxyHandler, urlopen as _urlopen, getproxies, ftpwrapper, proxy_bypass as urllib_proxy_bypass, url2pathname, Request) from http.client import ( HTTPMessage, parse_headers, HTTPConnection, HTTPSConnection) from http.cookiejar import ( DEFAULT_HTTP_PORT, CookiePolicy, DefaultCookiePolicy, FileCookieJar, LoadError, LWPCookieJar, _debug, domain_match, eff_request_host, escape_path, is_HDN, lwp_cookie_str, reach, request_path, request_port, user_domain_match, Cookie, CookieJar, MozillaCookieJar, request_host) from io import StringIO def splitattr(url): words = url.split(';') return words[0], words[1:] def is_string(x): return isinstance(x, str) def iteritems(x): return x.items() def itervalues(x): return x.values() def is_class(obj): return isinstance(obj, type) def raise_with_traceback(exc): raise exc.with_traceback(sys.exc_info()[2]) codepoint_to_chr = chr unicode_type = str map = map # Legacy code expects HTTPMessage.getheaders() def getheaders(self, name): return self.get_all(name, failobj=[]) HTTPMessage.getheaders = getheaders # We want __getitem__ to return the last header not the first def getitem(self, name): vals = self.get_all(name, [None]) return vals[-1] HTTPMessage.__getitem__ = getitem # Legacy method names HTTPMessage.gettype = HTTPMessage.get_content_type HTTPMessage.getmainttype = HTTPMessage.get_content_maintype HTTPMessage.getsubtype = HTTPMessage.get_content_subtype def is_mapping(x): return isinstance(x, collections.abc.Mapping) def create_response_info(fp): return parse_headers(fp) def urlopen(*a, **kw): proxies = kw.pop('proxies', None) if proxies is None: return _urlopen(*a, **kw) r = Request(a[0]) for k, v in proxies.items(): r.set_proxy(v, k) return _urlopen(r, *a[1:], **kw) _hostprog = None def urllib_splithost(url): """splithost('//host[:port]/path') --> 'host[:port]', '/path'.""" global _hostprog if _hostprog is None: _hostprog = re.compile('//([^/#?]*)(.*)', re.DOTALL) match = _hostprog.match(url) if match: host_port, path = match.groups() if path and path[0] != '/': path = '/' + path return host_port, path return None, url _typeprog = None def splittype(url): """splittype('type:opaquestring') --> 'type', 'opaquestring'.""" global _typeprog if _typeprog is None: _typeprog = re.compile('([^/:]+):(.*)', re.DOTALL) match = _typeprog.match(url) if match: scheme, data = match.groups() return scheme.lower(), data return None, url def splituser(host): """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" user, delim, host = host.rpartition('@') return (user if delim else None), host def splitpasswd(user): """splitpasswd('user:passwd') -> 'user', 'passwd'.""" user, delim, passwd = user.partition(':') return user, (passwd if delim else None) _portprog = None def splitport(host): """splitport('host:port') --> 'host', 'port'.""" global _portprog if _portprog is None: _portprog = re.compile('(.*):([0-9]*)$', re.DOTALL) match = _portprog.match(host) if match: host, port = match.groups() if port: return host, port return host, None def splitvalue(attr): """splitvalue('attr=value') --> 'attr', 'value'.""" attr, delim, value = attr.partition('=') return attr, (value if delim else None) def as_unicode(x, encoding='utf-8'): if isinstance(x, bytes): x = x.decode('utf-8') return x if False: (HTTPError, urlsplit, urljoin, urlparse, urlunparse, urlencode, HTTPMessage, splitattr, urllib_splithost, getproxies, ftpwrapper, urllib_proxy_bypass, splituser, splitpasswd, splitport, splitvalue, splittype, unquote, unwrap, url2pathname) pathname2url, RobotFileParser, URLError, quote, HTTPConnection HTTPSConnection, StringIO, addinfourl, install_opener, build_opener ProxyHandler, quote_plus, urlopen (DEFAULT_HTTP_PORT, CookiePolicy, DefaultCookiePolicy, FileCookieJar, LoadError, LWPCookieJar, _debug, domain_match, eff_request_host, escape_path, is_HDN, lwp_cookie_str, reach, request_path, request_port, user_domain_match, Cookie, CookieJar, MozillaCookieJar, request_host)