12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- """
- Python 3 compatibility tools.
- """
- from __future__ import division, absolute_import, print_function
- __all__ = ['bytes', 'asbytes', 'isfileobj', 'getexception', 'strchar',
- 'unicode', 'asunicode', 'asbytes_nested', 'asunicode_nested',
- 'asstr', 'open_latin1', 'long', 'basestring', 'sixu',
- 'integer_types']
- import sys
- if sys.version_info[0] >= 3:
- import io
- long = int
- integer_types = (int,)
- basestring = str
- unicode = str
- bytes = bytes
- def asunicode(s):
- if isinstance(s, bytes):
- return s.decode('latin1')
- return str(s)
- def asbytes(s):
- if isinstance(s, bytes):
- return s
- return str(s).encode('latin1')
- def asstr(s):
- if isinstance(s, bytes):
- return s.decode('latin1')
- return str(s)
- def isfileobj(f):
- return isinstance(f, (io.FileIO, io.BufferedReader, io.BufferedWriter))
- def open_latin1(filename, mode='r'):
- return open(filename, mode=mode, encoding='iso-8859-1')
- def sixu(s):
- return s
- strchar = 'U'
- else:
- bytes = str
- long = long
- basestring = basestring
- unicode = unicode
- integer_types = (int, long)
- asbytes = str
- asstr = str
- strchar = 'S'
- def isfileobj(f):
- return isinstance(f, file)
- def asunicode(s):
- if isinstance(s, unicode):
- return s
- return str(s).decode('ascii')
- def open_latin1(filename, mode='r'):
- return open(filename, mode=mode)
- def sixu(s):
- return unicode(s, 'unicode_escape')
- def getexception():
- return sys.exc_info()[1]
- def asbytes_nested(x):
- if hasattr(x, '__iter__') and not isinstance(x, (bytes, unicode)):
- return [asbytes_nested(y) for y in x]
- else:
- return asbytes(x)
- def asunicode_nested(x):
- if hasattr(x, '__iter__') and not isinstance(x, (bytes, unicode)):
- return [asunicode_nested(y) for y in x]
- else:
- return asunicode(x)
|