|
|
|
"""Compatibility tricks for Python 3. Mainly to do with unicode. |
|
|
|
This file is deprecated and will be removed in a future version. |
|
""" |
|
import platform |
|
import builtins as builtin_mod |
|
|
|
from .encoding import DEFAULT_ENCODING |
|
|
|
|
|
def decode(s, encoding=None): |
|
encoding = encoding or DEFAULT_ENCODING |
|
return s.decode(encoding, "replace") |
|
|
|
|
|
def encode(u, encoding=None): |
|
encoding = encoding or DEFAULT_ENCODING |
|
return u.encode(encoding, "replace") |
|
|
|
|
|
def cast_unicode(s, encoding=None): |
|
if isinstance(s, bytes): |
|
return decode(s, encoding) |
|
return s |
|
|
|
|
|
def safe_unicode(e): |
|
"""unicode(e) with various fallbacks. Used for exceptions, which may not be |
|
safe to call unicode() on. |
|
""" |
|
try: |
|
return str(e) |
|
except UnicodeError: |
|
pass |
|
|
|
try: |
|
return repr(e) |
|
except UnicodeError: |
|
pass |
|
|
|
return "Unrecoverably corrupt evalue" |
|
|
|
|
|
|
|
|
|
def input(prompt=""): |
|
return builtin_mod.input(prompt) |
|
|
|
|
|
def execfile(fname, glob, loc=None, compiler=None): |
|
loc = loc if (loc is not None) else glob |
|
with open(fname, "rb") as f: |
|
compiler = compiler or compile |
|
exec(compiler(f.read(), fname, "exec"), glob, loc) |
|
|
|
|
|
PYPY = platform.python_implementation() == "PyPy" |
|
|
|
|
|
|
|
|
|
def no_code(x, encoding=None): |
|
return x |
|
|
|
|
|
unicode_to_str = cast_bytes_py2 = no_code |
|
|