_compat.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import sys
  2. import array
  3. PY2 = sys.version_info[0] == 2
  4. _identity = lambda x: x
  5. if not PY2:
  6. text_type = str
  7. string_types = (str,)
  8. integer_types = (int, )
  9. unichr = chr
  10. text_to_native = lambda s, enc: s
  11. iterkeys = lambda d: iter(d.keys())
  12. itervalues = lambda d: iter(d.values())
  13. iteritems = lambda d: iter(d.items())
  14. from io import StringIO, BytesIO
  15. import pickle
  16. izip = zip
  17. imap = map
  18. range_type = range
  19. cmp = lambda a, b: (a > b) - (a < b)
  20. array_tobytes = array.array.tobytes
  21. else:
  22. text_type = unicode
  23. string_types = (str, unicode)
  24. integer_types = (int, long)
  25. text_to_native = lambda s, enc: s.encode(enc)
  26. unichr = unichr
  27. iterkeys = lambda d: d.iterkeys()
  28. itervalues = lambda d: d.itervalues()
  29. iteritems = lambda d: d.iteritems()
  30. from cStringIO import StringIO as BytesIO
  31. from StringIO import StringIO
  32. import cPickle as pickle
  33. from itertools import imap
  34. from itertools import izip
  35. range_type = xrange
  36. cmp = cmp
  37. array_tobytes = array.array.tostring
  38. number_types = integer_types + (float,)
  39. #
  40. # Since Python 3.3, a fast decimal implementation is already included in the
  41. # standard library. Otherwise use cdecimal when available
  42. #
  43. if sys.version_info[:2] >= (3, 3):
  44. import decimal
  45. else:
  46. try:
  47. import cdecimal as decimal
  48. except ImportError:
  49. import decimal