| """ | |
| 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) | |