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