# coding: utf-8 """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" # keep reference to builtin_mod because the kernel overrides that value # to forward requests to a frontend. 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" # Cython still rely on that as a Dec 28 2019 # See https://github.com/cython/cython/pull/3291 and # https://github.com/ipython/ipython/issues/12068 def no_code(x, encoding=None): return x unicode_to_str = cast_bytes_py2 = no_code