1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#-----------------------------------------------------------------------------
# Copyright (c) 2008 by David P. D. Moss. All rights reserved.
#
# Released under the BSD license. See the LICENSE file for details.
#-----------------------------------------------------------------------------
"""
Compatibility wrappers providing uniform behaviour for Python code required to
run under both Python 2.x and 3.x.
All operations emulate 2.x behaviour where applicable.
"""
import sys as _sys
if _sys.version_info[0] == 3:
# Python 3.x specific logic.
_sys_maxint = _sys.maxsize
_int_type = int
_str_type = str
_bytes_type = lambda x: bytes(x, 'UTF-8')
_is_str = lambda x: isinstance(x, (str, type(''.encode())))
_is_int = lambda x: isinstance(x, int)
_callable = lambda x: hasattr(x, '__call__')
_dict_keys = lambda x: list(x.keys())
_dict_items = lambda x: list(x.items())
_iter_dict_keys = lambda x: x.keys()
def _bytes_join(*args):
return ''.encode().join(*args)
def _zip(*args):
return list(zip(*args))
def _range(*args, **kwargs):
return list(range(*args, **kwargs))
_iter_range = range
def _iter_next(x):
return next(x)
elif _sys.version_info[0:2] > [2, 3]:
# Python 2.4 or higher.
_sys_maxint = _sys.maxint
_int_type = (int, long)
_str_type = basestring
_bytes_type = str
_is_str = lambda x: isinstance(x, basestring)
_is_int = lambda x: isinstance(x, (int, long))
_callable = lambda x: callable(x)
_dict_keys = lambda x: x.keys()
_dict_items = lambda x: x.items()
_iter_dict_keys = lambda x: iter(x.keys())
def _bytes_join(*args):
return ''.join(*args)
def _zip(*args):
return zip(*args)
def _range(*args, **kwargs):
return range(*args, **kwargs)
_iter_range = xrange
def _iter_next(x):
return x.next()
else:
# Unsupported versions.
raise RuntimeError(
'this module only supports Python 2.4.x or higher (including 3.x)!')
try:
from importlib import resources as _importlib_resources
except ImportError:
import importlib_resources as _importlib_resources
if hasattr(_importlib_resources, 'files'):
def _open_binary(pkg, res):
return _importlib_resources.files(pkg).joinpath(res).open('rb')
else:
_open_binary = _importlib_resources.open_binary
|