| """ |
| requests.compat |
| ~~~~~~~~~~~~~~~ |
| |
| This module previously handled import compatibility issues |
| between Python 2 and Python 3. It remains for backwards |
| compatibility until the next major version. |
| """ |
| |
| import importlib |
| import sys |
| |
| # ------- |
| # urllib3 |
| # ------- |
| from urllib3 import __version__ as urllib3_version |
| |
| # Detect which major version of urllib3 is being used. |
| try: |
| is_urllib3_1 = int(urllib3_version.split(".")[0]) == 1 |
| except (TypeError, AttributeError): |
| # If we can't discern a version, prefer old functionality. |
| is_urllib3_1 = True |
| |
| # ------------------- |
| # Character Detection |
| # ------------------- |
| |
| |
| def _resolve_char_detection(): |
| """Find supported character detection libraries.""" |
| chardet = None |
| for lib in ("chardet", "charset_normalizer"): |
| if chardet is None: |
| try: |
| chardet = importlib.import_module(lib) |
| except ImportError: |
| pass |
| return chardet |
| |
| |
| chardet = _resolve_char_detection() |
| |
| # ------- |
| # Pythons |
| # ------- |
| |
| # Syntax sugar. |
| _ver = sys.version_info |
| |
| #: Python 2.x? |
| is_py2 = _ver[0] == 2 |
| |
| #: Python 3.x? |
| is_py3 = _ver[0] == 3 |
| |
| # json/simplejson module import resolution |
| has_simplejson = False |
| try: |
| import simplejson as json |
| |
| has_simplejson = True |
| except ImportError: |
| import json |
| |
| if has_simplejson: |
| from simplejson import JSONDecodeError |
| else: |
| from json import JSONDecodeError |
| |
| # Keep OrderedDict for backwards compatibility. |
| from collections import OrderedDict |
| from collections.abc import Callable, Mapping, MutableMapping |
| from http import cookiejar as cookielib |
| from http.cookies import Morsel |
| from io import StringIO |
| |
| # -------------- |
| # Legacy Imports |
| # -------------- |
| from urllib.parse import ( |
| quote, |
| quote_plus, |
| unquote, |
| unquote_plus, |
| urldefrag, |
| urlencode, |
| urljoin, |
| urlparse, |
| urlsplit, |
| urlunparse, |
| ) |
| from urllib.request import ( |
| getproxies, |
| getproxies_environment, |
| parse_http_list, |
| proxy_bypass, |
| proxy_bypass_environment, |
| ) |
| |
| builtin_str = str |
| str = str |
| bytes = bytes |
| basestring = (str, bytes) |
| numeric_types = (int, float) |
| integer_types = (int,) |