1 """Compatibility helpers for the different Python versions."""
7 PY26 = (sys.version_info < (2, 7))
10 PY33 = (sys.version_info >= (3, 3))
12 # Python 3.4 or newer?
13 PY34 = sys.version_info >= (3, 4)
15 # Python 3.5 or newer?
16 PY35 = sys.version_info >= (3, 5)
19 integer_types = (int,)
22 string_types = (bytes, str)
23 BYTES_TYPES = (bytes, bytearray, memoryview)
25 integer_types = (int, long,)
28 string_types = basestring
30 BYTES_TYPES = (str, bytearray, buffer)
32 BYTES_TYPES = (str, bytearray, memoryview, buffer)
36 def reraise(tp, value, tb=None):
37 if value.__traceback__ is not tb:
38 raise value.with_traceback(tb)
41 exec("""def reraise(tp, value, tb=None): raise tp, value, tb""")
44 def flatten_bytes(data):
46 Convert bytes-like objects (bytes, bytearray, memoryview, buffer) to
49 if not isinstance(data, BYTES_TYPES):
50 raise TypeError('data argument must be byte-ish (%r)',
53 # In Python 3.4, socket.send() and bytes.join() accept memoryview
58 if six.PY2 and isinstance(data, (buffer, bytearray)):
60 elif not PY26 and isinstance(data, memoryview):
66 def flatten_list_bytes(data):
67 """Concatenate a sequence of bytes-like objects."""
68 data = map(flatten_bytes, data)