compat.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # -*- coding: utf-8 -*-
  2. """
  3. requests.compat
  4. ~~~~~~~~~~~~~~~
  5. This module handles import compatibility issues between Python 2 and
  6. Python 3.
  7. """
  8. from pip._vendor import chardet
  9. import sys
  10. # -------
  11. # Pythons
  12. # -------
  13. # Syntax sugar.
  14. _ver = sys.version_info
  15. #: Python 2.x?
  16. is_py2 = (_ver[0] == 2)
  17. #: Python 3.x?
  18. is_py3 = (_ver[0] == 3)
  19. # Note: We've patched out simplejson support in pip because it prevents
  20. # upgrading simplejson on Windows.
  21. # try:
  22. # import simplejson as json
  23. # except (ImportError, SyntaxError):
  24. # # simplejson does not support Python 3.2, it throws a SyntaxError
  25. # # because of u'...' Unicode literals.
  26. import json
  27. # ---------
  28. # Specifics
  29. # ---------
  30. if is_py2:
  31. from urllib import (
  32. quote, unquote, quote_plus, unquote_plus, urlencode, getproxies,
  33. proxy_bypass, proxy_bypass_environment, getproxies_environment)
  34. from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag
  35. from urllib2 import parse_http_list
  36. import cookielib
  37. from Cookie import Morsel
  38. from StringIO import StringIO
  39. # Keep OrderedDict for backwards compatibility.
  40. from collections import Callable, Mapping, MutableMapping, OrderedDict
  41. builtin_str = str
  42. bytes = str
  43. str = unicode
  44. basestring = basestring
  45. numeric_types = (int, long, float)
  46. integer_types = (int, long)
  47. JSONDecodeError = ValueError
  48. elif is_py3:
  49. from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag
  50. from urllib.request import parse_http_list, getproxies, proxy_bypass, proxy_bypass_environment, getproxies_environment
  51. from http import cookiejar as cookielib
  52. from http.cookies import Morsel
  53. from io import StringIO
  54. # Keep OrderedDict for backwards compatibility.
  55. from collections import OrderedDict
  56. from collections.abc import Callable, Mapping, MutableMapping
  57. from json import JSONDecodeError
  58. builtin_str = str
  59. str = str
  60. bytes = bytes
  61. basestring = (str, bytes)
  62. numeric_types = (int, float)
  63. integer_types = (int,)