compat.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """
  2. Python 2/3 compatibility helpers.
  3. Note: This module is *not* public API.
  4. """
  5. import contextlib
  6. import operator
  7. import sys
  8. try:
  9. from collections.abc import MutableMapping, Sequence # noqa
  10. except ImportError:
  11. from collections import MutableMapping, Sequence # noqa
  12. PY3 = sys.version_info[0] >= 3
  13. if PY3:
  14. zip = zip
  15. from functools import lru_cache
  16. from io import StringIO as NativeIO
  17. from urllib.parse import (
  18. unquote, urljoin, urlunsplit, SplitResult, urlsplit
  19. )
  20. from urllib.request import pathname2url, urlopen
  21. str_types = str,
  22. int_types = int,
  23. iteritems = operator.methodcaller("items")
  24. else:
  25. from itertools import izip as zip # noqa
  26. from io import BytesIO as NativeIO
  27. from urlparse import urljoin, urlunsplit, SplitResult, urlsplit
  28. from urllib import pathname2url, unquote # noqa
  29. import urllib2 # noqa
  30. def urlopen(*args, **kwargs):
  31. return contextlib.closing(urllib2.urlopen(*args, **kwargs))
  32. str_types = basestring
  33. int_types = int, long
  34. iteritems = operator.methodcaller("iteritems")
  35. from functools32 import lru_cache
  36. def urldefrag(url):
  37. if "#" in url:
  38. s, n, p, q, frag = urlsplit(url)
  39. defrag = urlunsplit((s, n, p, q, ""))
  40. else:
  41. defrag = url
  42. frag = ""
  43. return defrag, frag
  44. # flake8: noqa