compat.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # -*- coding: utf-8 -*-
  2. # flake8: noqa
  3. import sys
  4. import itertools
  5. PY2 = int(sys.version_info[0]) == 2
  6. if PY2:
  7. import urlparse
  8. from collections import Mapping, Iterable, MutableSet
  9. urlparse = urlparse
  10. text_type = unicode
  11. binary_type = str
  12. unicode = unicode
  13. basestring = basestring
  14. iterkeys = lambda d: d.iterkeys()
  15. itervalues = lambda d: d.itervalues()
  16. iteritems = lambda d: d.iteritems()
  17. zip_longest = itertools.izip_longest
  18. else:
  19. import urllib.parse
  20. from collections.abc import Mapping, Iterable, MutableSet
  21. urlparse = urllib.parse
  22. text_type = str
  23. binary_type = bytes
  24. unicode = str
  25. basestring = (str, bytes)
  26. iterkeys = lambda d: d.keys()
  27. itervalues = lambda d: d.values()
  28. iteritems = lambda d: d.items()
  29. zip_longest = itertools.zip_longest
  30. # From six
  31. def with_metaclass(meta, *bases):
  32. """Create a base class with a metaclass."""
  33. # This requires a bit of explanation: the basic idea is to make a dummy
  34. # metaclass for one level of class instantiation that replaces itself with
  35. # the actual metaclass.
  36. class metaclass(meta): # noqa
  37. def __new__(cls, name, this_bases, d):
  38. return meta(name, bases, d)
  39. return type.__new__(metaclass, 'temporary_class', (), {})