1from __future__ import absolute_import, division, unicode_literals
2import sys
3import types
4import base64
5
6PY_MAJOR = sys.version_info[0]
7PY2 = PY_MAJOR == 2
8PY3 = PY_MAJOR == 3
9PY3_ORDERED_DICT = PY3 and sys.version_info[1] >= 6  # Python 3.6+
10
11class_types = (type,)
12iterator_types = (type(iter('')),)
13
14if PY3:
15    import builtins
16    import queue
17    from base64 import encodebytes, decodebytes
18    from collections.abc import Iterator as abc_iterator
19
20    string_types = (str,)
21    numeric_types = (int, float)
22    ustr = str
23else:
24    from collections import Iterator as abc_iterator  # noqa
25
26    builtins = __import__('__builtin__')
27    class_types += (types.ClassType,)
28    encodebytes = base64.encodestring
29    decodebytes = base64.decodestring
30    string_types = (builtins.basestring,)
31    numeric_types = (int, float, builtins.long)
32    queue = __import__('Queue')
33    ustr = builtins.unicode
34
35
36def iterator(class_):
37    if PY2 and hasattr(class_, '__next__'):
38        class_.next = class_.__next__
39    return class_
40