82 lines
1.5 KiB
Python
Raw Normal View History

2013-11-27 14:36:57 -05:00
"""Python 2/3 compat layer."""
from __future__ import print_function, division, absolute_import
2013-11-27 14:36:57 -05:00
try:
basestring
except NameError:
basestring = str
try:
unicode
except NameError:
unicode = str
try:
unichr
bytechr = chr
2013-11-27 18:13:48 -05:00
byteord = ord
2013-11-27 14:36:57 -05:00
except:
unichr = chr
def bytechr(n):
return bytes([n])
2013-11-27 18:13:48 -05:00
def byteord(c):
2013-11-27 21:13:05 -05:00
return c if isinstance(c, int) else ord(c)
2013-11-27 14:36:57 -05:00
try:
from StringIO import StringIO
2013-11-27 14:36:57 -05:00
except ImportError:
2013-12-04 04:12:57 -05:00
from io import BytesIO as StringIO
def strjoin(iterable, joiner=''):
return tostr(joiner).join(iterable)
2014-07-21 13:19:53 -04:00
def tobytes(s, encoding='ascii', errors='strict'):
2014-07-21 13:19:53 -04:00
if not isinstance(s, bytes):
return s.encode(encoding, errors)
2014-07-21 13:19:53 -04:00
else:
return s
def tounicode(s, encoding='ascii', errors='strict'):
2014-07-21 13:19:53 -04:00
if not isinstance(s, unicode):
return s.decode(encoding, errors)
2014-07-21 13:19:53 -04:00
else:
return s
if str == bytes:
class Tag(str):
def tobytes(self):
if isinstance(self, bytes):
return self
else:
2013-11-28 06:46:59 -05:00
return self.encode('latin1')
2014-07-21 13:19:53 -04:00
tostr = tobytes
2013-11-27 21:09:03 -05:00
bytesjoin = strjoin
else:
class Tag(str):
@staticmethod
def transcode(blob):
if not isinstance(blob, str):
blob = blob.decode('latin-1')
return blob
def __new__(self, content):
return str.__new__(self, self.transcode(content))
def __ne__(self, other):
return not self.__eq__(other)
def __eq__(self, other):
return str.__eq__(self, self.transcode(other))
def __hash__(self):
return str.__hash__(self)
def tobytes(self):
return self.encode('latin-1')
2014-07-21 13:19:53 -04:00
tostr = tounicode
2013-11-27 21:09:03 -05:00
def bytesjoin(iterable, joiner=b''):
return tobytes(joiner).join(tobytes(item) for item in iterable)