|
|
- import sys
- import base64
-
- __all__ = ['PY2', 'string_types', 'integer_types', 'text_type', 'bytes_types',
- 'bytes', 'long', 'input', 'decodebytes', 'encodebytes',
- 'bytestring', 'byte_ord', 'byte_chr', 'byte_mask', 'b', 'u', 'b2s',
- 'StringIO', 'BytesIO', 'is_callable', 'MAXSIZE',
- 'next', 'builtins']
-
- PY2 = sys.version_info[0] < 3
-
- if PY2:
- string_types = basestring # NOQA
- text_type = unicode # NOQA
- bytes_types = str
- bytes = str
- integer_types = (int, long) # NOQA
- long = long # NOQA
- input = raw_input # NOQA
- decodebytes = base64.decodestring
- encodebytes = base64.encodestring
-
- import __builtin__ as builtins
-
-
- def bytestring(s): # NOQA
- if isinstance(s, unicode): # NOQA
- return s.encode('utf-8')
- return s
-
-
- byte_ord = ord # NOQA
- byte_chr = chr # NOQA
-
-
- def byte_mask(c, mask):
- return chr(ord(c) & mask)
-
-
- def b(s, encoding='utf8'): # NOQA
- """cast unicode or bytes to bytes"""
- if isinstance(s, str):
- return s
- elif isinstance(s, unicode): # NOQA
- return s.encode(encoding)
- elif isinstance(s, buffer): # NOQA
- return s
- else:
- raise TypeError("Expected unicode or bytes, got {!r}".format(s))
-
-
- def u(s, encoding='utf8'): # NOQA
- """cast bytes or unicode to unicode"""
- if isinstance(s, str):
- return s.decode(encoding)
- elif isinstance(s, unicode): # NOQA
- return s
- elif isinstance(s, buffer): # NOQA
- return s.decode(encoding)
- else:
- raise TypeError("Expected unicode or bytes, got {!r}".format(s))
-
-
- def b2s(s):
- return s
-
-
- import cStringIO
- StringIO = cStringIO.StringIO
- BytesIO = StringIO
-
-
- def is_callable(c): # NOQA
- return callable(c)
-
-
- def get_next(c): # NOQA
- return c.next
-
-
- def next(c):
- return c.next()
-
- # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
- class X(object):
- def __len__(self):
- return 1 << 31
-
-
- try:
- len(X())
- except OverflowError:
- # 32-bit
- MAXSIZE = int((1 << 31) - 1) # NOQA
- else:
- # 64-bit
- MAXSIZE = int((1 << 63) - 1) # NOQA
- del X
- else:
- import collections
- import struct
- import builtins
- string_types = str
- text_type = str
- bytes = bytes
- bytes_types = bytes
- integer_types = int
- class long(int):
- pass
- input = input
- decodebytes = base64.decodebytes
- encodebytes = base64.encodebytes
-
- def bytestring(s):
- return s
-
- def byte_ord(c):
- # In case we're handed a string instead of an int.
- if not isinstance(c, int):
- c = ord(c)
- return c
-
- def byte_chr(c):
- assert isinstance(c, int)
- return struct.pack('B', c)
-
- def byte_mask(c, mask):
- assert isinstance(c, int)
- return struct.pack('B', c & mask)
-
- def b(s, encoding='utf8'):
- """cast unicode or bytes to bytes"""
- if isinstance(s, bytes):
- return s
- elif isinstance(s, str):
- return s.encode(encoding)
- else:
- raise TypeError("Expected unicode or bytes, got {!r}".format(s))
-
- def u(s, encoding='utf8'):
- """cast bytes or unicode to unicode"""
- if isinstance(s, bytes):
- return s.decode(encoding)
- elif isinstance(s, str):
- return s
- else:
- raise TypeError("Expected unicode or bytes, got {!r}".format(s))
-
- def b2s(s):
- return s.decode() if isinstance(s, bytes) else s
-
- import io
- StringIO = io.StringIO # NOQA
- BytesIO = io.BytesIO # NOQA
-
- def is_callable(c):
- return isinstance(c, collections.Callable)
-
- def get_next(c):
- return c.__next__
-
- next = next
-
- MAXSIZE = sys.maxsize # NOQA
|