##// END OF EJS Templates
Override input(), not raw_input(), for Qt console in Python 3.
Override input(), not raw_input(), for Qt console in Python 3.

File last commit:

r4759:6feb7557
r4772:786b191e
Show More
py3compat.py
95 lines | 2.5 KiB | text/x-python | PythonLexer
Thomas Kluyver
Python 3 compatibility for identifiers.
r4740 # coding: utf-8
"""Compatibility tricks for Python 3. Mainly to do with unicode."""
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 import sys
Thomas Kluyver
Fix various problems highlighted by the test suite.
r4759 import types
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730
Thomas Kluyver
Add simple implementation of Python 3 style open()
r4743 orig_open = open
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 def no_code(x, encoding=None):
return x
def decode(s, encoding=None):
encoding = encoding or sys.stdin.encoding or sys.getdefaultencoding()
return s.decode(encoding, "replace")
def encode(u, encoding=None):
encoding = encoding or sys.stdin.encoding or sys.getdefaultencoding()
return u.encode(encoding, "replace")
Thomas Kluyver
Start using py3compat module.
r4731
def cast_unicode(s, encoding=None):
if isinstance(s, bytes):
return decode(s, encoding)
return s
def cast_bytes(s, encoding=None):
if not isinstance(s, bytes):
return encode(s, encoding)
return s
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730
if sys.version_info[0] >= 3:
PY3 = True
input = input
builtin_mod_name = "builtins"
str_to_unicode = no_code
unicode_to_str = no_code
str_to_bytes = encode
bytes_to_str = decode
Thomas Kluyver
Fixes for UltraTB and PyColorize with Python 3
r4758 cast_bytes_py2 = no_code
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730
Thomas Kluyver
Python 3 compatibility for identifiers.
r4740 def isidentifier(s, dotted=False):
if dotted:
return all(isidentifier(a) for a in s.split("."))
return s.isidentifier()
Thomas Kluyver
Add simple implementation of Python 3 style open()
r4743
open = orig_open
Thomas Kluyver
Fix various problems highlighted by the test suite.
r4759
MethodType = types.MethodType
Thomas Kluyver
Python 3 compatibility for identifiers.
r4740
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 else:
PY3 = False
input = raw_input
builtin_mod_name = "__builtin__"
str_to_unicode = decode
unicode_to_str = encode
str_to_bytes = no_code
bytes_to_str = no_code
Thomas Kluyver
Fixes for UltraTB and PyColorize with Python 3
r4758 cast_bytes_py2 = cast_bytes
Thomas Kluyver
Python 3 compatibility for identifiers.
r4740
import re
_name_re = re.compile(r"[a-zA-Z_][a-zA-Z0-9_]*$")
def isidentifier(s, dotted=False):
if dotted:
return all(isidentifier(a) for a in s.split("."))
return bool(_name_re.match(s))
Thomas Kluyver
Add simple implementation of Python 3 style open()
r4743
class open(object):
"""Wrapper providing key part of Python 3 open() interface."""
def __init__(self, fname, mode="r", encoding="utf-8"):
self.f = orig_open(fname, mode)
self.enc = encoding
def write(self, s):
return self.f.write(s.encode(self.enc))
def read(self, size=-1):
return self.f.read(size).decode(self.enc)
def close(self):
return self.f.close()
def __enter__(self):
return self
def __exit__(self, etype, value, traceback):
self.f.close()
Thomas Kluyver
Fix various problems highlighted by the test suite.
r4759
def MethodType(func, instance):
return types.MethodType(func, instance, type(instance))
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730
Thomas Kluyver
Start using py3compat module.
r4731 def execfile(fname, glob, loc=None):
loc = loc if (loc is not None) else glob
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 exec compile(open(fname).read(), fname, 'exec') in glob, loc