git: 79ee504ae882 - main - devel/py-pyrepl: Fix build with setuptools 58.0.0+
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 25 Mar 2022 13:44:18 UTC
The branch main has been updated by sunpoet: URL: https://cgit.FreeBSD.org/ports/commit/?id=79ee504ae882a8104de6c99e27e984f2828ce7f4 commit 79ee504ae882a8104de6c99e27e984f2828ce7f4 Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org> AuthorDate: 2022-03-25 12:59:59 +0000 Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org> CommitDate: 2022-03-25 13:37:00 +0000 devel/py-pyrepl: Fix build with setuptools 58.0.0+ --- devel/py-pyrepl/files/patch-2to3 | 703 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 703 insertions(+) diff --git a/devel/py-pyrepl/files/patch-2to3 b/devel/py-pyrepl/files/patch-2to3 new file mode 100644 index 000000000000..afdeccca2b3b --- /dev/null +++ b/devel/py-pyrepl/files/patch-2to3 @@ -0,0 +1,703 @@ +--- pyrepl/cmdrepl.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/cmdrepl.py +@@ -33,7 +33,7 @@ It was designed to let you do this: + which is in fact done by the `pythoni' script that comes with + pyrepl.""" + +-from __future__ import print_function ++ + + from pyrepl import completer + from pyrepl.completing_reader import CompletingReader as CR +--- pyrepl/completer.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/completer.py +@@ -18,7 +18,7 @@ + # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + try: +- import __builtin__ as builtins ++ import builtins as builtins + builtins # silence broken pyflakes + except ImportError: + import builtins +@@ -44,8 +44,8 @@ class Completer(object): + import keyword + matches = [] + for list in [keyword.kwlist, +- builtins.__dict__.keys(), +- self.ns.keys()]: ++ list(builtins.__dict__.keys()), ++ list(self.ns.keys())]: + for word in list: + if word.startswith(text) and word != "__builtins__": + matches.append(word) +--- pyrepl/completing_reader.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/completing_reader.py +@@ -64,7 +64,7 @@ def build_menu(cons, wordlist, start, use_brackets, so + else: + item = "%s " + padding = 2 +- maxlen = min(max(map(real_len, wordlist)), cons.width - padding) ++ maxlen = min(max(list(map(real_len, wordlist))), cons.width - padding) + cols = cons.width / (maxlen + padding) + rows = (len(wordlist) - 1)/cols + 1 + +--- pyrepl/historical_reader.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/historical_reader.py +@@ -23,7 +23,7 @@ from pyrepl.reader import Reader as R + isearch_keymap = tuple( + [('\\%03o'%c, 'isearch-end') for c in range(256) if chr(c) != '\\'] + \ + [(c, 'isearch-add-character') +- for c in map(chr, range(32, 127)) if c != '\\'] + \ ++ for c in map(chr, list(range(32, 127))) if c != '\\'] + \ + [('\\%03o'%c, 'isearch-add-character') + for c in range(256) if chr(c).isalpha() and chr(c) != '\\'] + \ + [('\\\\', 'self-insert'), +@@ -292,7 +292,7 @@ class HistoricalReader(R): + def finish(self): + super(HistoricalReader, self).finish() + ret = self.get_unicode() +- for i, t in self.transient_history.items(): ++ for i, t in list(self.transient_history.items()): + if i < len(self.history) and i != self.historyi: + self.history[i] = t + if ret: +--- pyrepl/input.py.orig 2019-04-16 13:00:52 UTC ++++ pyrepl/input.py +@@ -32,11 +32,11 @@ + # executive, temporary decision: [tab] and [C-i] are distinct, but + # [meta-key] is identified with [esc key]. We demand that any console + # class does quite a lot towards emulating a unix terminal. +-from __future__ import print_function ++ + import unicodedata + from collections import deque + import pprint +-from trace import trace ++from .trace import trace + + + class InputTranslator(object): +--- pyrepl/keymap.py.orig 2019-04-16 13:00:52 UTC ++++ pyrepl/keymap.py +@@ -174,17 +174,17 @@ def parse_keys(key): + + def compile_keymap(keymap, empty=b''): + r = {} +- for key, value in keymap.items(): ++ for key, value in list(keymap.items()): + if isinstance(key, bytes): + first = key[:1] + else: + first = key[0] + r.setdefault(first, {})[key[1:]] = value +- for key, value in r.items(): ++ for key, value in list(r.items()): + if empty in value: + if len(value) != 1: + raise KeySpecError( +- "key definitions for %s clash"%(value.values(),)) ++ "key definitions for %s clash"%(list(value.values()),)) + else: + r[key] = value[empty] + else: +--- pyrepl/keymaps.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/keymaps.py +@@ -62,9 +62,9 @@ reader_emacs_keymap = tuple( + (r'\M-\n', 'self-insert'), + (r'\<backslash>', 'self-insert')] + \ + [(c, 'self-insert') +- for c in map(chr, range(32, 127)) if c <> '\\'] + \ ++ for c in map(chr, list(range(32, 127))) if c != '\\'] + \ + [(c, 'self-insert') +- for c in map(chr, range(128, 256)) if c.isalpha()] + \ ++ for c in map(chr, list(range(128, 256))) if c.isalpha()] + \ + [(r'\<up>', 'up'), + (r'\<down>', 'down'), + (r'\<left>', 'left'), +@@ -101,9 +101,9 @@ python_emacs_keymap = comp_emacs_keymap + ( + + reader_vi_insert_keymap = tuple( + [(c, 'self-insert') +- for c in map(chr, range(32, 127)) if c <> '\\'] + \ ++ for c in map(chr, list(range(32, 127))) if c != '\\'] + \ + [(c, 'self-insert') +- for c in map(chr, range(128, 256)) if c.isalpha()] + \ ++ for c in map(chr, list(range(128, 256))) if c.isalpha()] + \ + [(r'\C-d', 'delete'), + (r'\<backspace>', 'backspace'), + ('')]) +--- pyrepl/pygame_console.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/pygame_console.py +@@ -72,7 +72,7 @@ class FakeStdin: + # argh! + raise NotImplementedError + def readline(self, n=None): +- from reader import Reader ++ from .reader import Reader + try: + # this isn't quite right: it will clobber any prompt that's + # been printed. Not sure how to get around this... +@@ -130,7 +130,8 @@ class PyGameConsole(Console): + s.fill(c, [0, 600 - bmargin, 800, bmargin]) + s.fill(c, [800 - rmargin, 0, lmargin, 600]) + +- def refresh(self, screen, (cx, cy)): ++ def refresh(self, screen, xxx_todo_changeme): ++ (cx, cy) = xxx_todo_changeme + self.screen = screen + self.pygame_screen.fill(colors.bg, + [0, tmargin + self.cur_top + self.scroll, +@@ -211,12 +212,12 @@ class PyGameConsole(Console): + meta = bool(pyg_event.mod & (KMOD_ALT|KMOD_META)) + + try: +- return self.k[(pyg_event.unicode, meta, ctrl)], pyg_event.unicode ++ return self.k[(pyg_event.str, meta, ctrl)], pyg_event.str + except KeyError: + try: +- return self.k[(pyg_event.key, meta, ctrl)], pyg_event.unicode ++ return self.k[(pyg_event.key, meta, ctrl)], pyg_event.str + except KeyError: +- return "invalid-key", pyg_event.unicode ++ return "invalid-key", pyg_event.str + + def get_event(self, block=1): + """Return an Event instance. Returns None if |block| is false +@@ -239,7 +240,7 @@ class PyGameConsole(Console): + self.cmd_buf += c.encode('ascii', 'replace') + self.k = k + +- if not isinstance(k, types.DictType): ++ if not isinstance(k, dict): + e = Event(k, self.cmd_buf, []) + self.k = self.keymap + self.cmd_buf = '' +@@ -282,7 +283,7 @@ class PyGameConsole(Console): + + def forgetinput(self): + """Forget all pending, but not yet processed input.""" +- while pygame.event.poll().type <> NOEVENT: ++ while pygame.event.poll().type != NOEVENT: + pass + + def getpending(self): +@@ -299,7 +300,7 @@ class PyGameConsole(Console): + + def wait(self): + """Wait for an event.""" +- raise Exception, "erp!" ++ raise Exception("erp!") + + def repaint(self): + # perhaps we should consolidate grobs? +--- pyrepl/pygame_keymap.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/pygame_keymap.py +@@ -85,27 +85,25 @@ def _parse_key1(key, s): + while not ret and s < len(key): + if key[s] == '\\': + c = key[s+1].lower() +- if _escapes.has_key(c): ++ if c in _escapes: + ret = _escapes[c] + s += 2 + elif c == "c": + if key[s + 2] != '-': +- raise KeySpecError, \ +- "\\C must be followed by `-' (char %d of %s)"%( +- s + 2, repr(key)) ++ raise KeySpecError("\\C must be followed by `-' (char %d of %s)"%( ++ s + 2, repr(key))) + if ctrl: +- raise KeySpecError, "doubled \\C- (char %d of %s)"%( +- s + 1, repr(key)) ++ raise KeySpecError("doubled \\C- (char %d of %s)"%( ++ s + 1, repr(key))) + ctrl = 1 + s += 3 + elif c == "m": + if key[s + 2] != '-': +- raise KeySpecError, \ +- "\\M must be followed by `-' (char %d of %s)"%( +- s + 2, repr(key)) ++ raise KeySpecError("\\M must be followed by `-' (char %d of %s)"%( ++ s + 2, repr(key))) + if meta: +- raise KeySpecError, "doubled \\M- (char %d of %s)"%( +- s + 1, repr(key)) ++ raise KeySpecError("doubled \\M- (char %d of %s)"%( ++ s + 1, repr(key))) + meta = 1 + s += 3 + elif c.isdigit(): +@@ -119,28 +117,25 @@ def _parse_key1(key, s): + elif c == '<': + t = key.find('>', s) + if t == -1: +- raise KeySpecError, \ +- "unterminated \\< starting at char %d of %s"%( +- s + 1, repr(key)) ++ raise KeySpecError("unterminated \\< starting at char %d of %s"%( ++ s + 1, repr(key))) + try: + ret = _keynames[key[s+2:t].lower()] + s = t + 1 + except KeyError: +- raise KeySpecError, \ +- "unrecognised keyname `%s' at char %d of %s"%( +- key[s+2:t], s + 2, repr(key)) ++ raise KeySpecError("unrecognised keyname `%s' at char %d of %s"%( ++ key[s+2:t], s + 2, repr(key))) + if ret is None: + return None, s + else: +- raise KeySpecError, \ +- "unknown backslash escape %s at char %d of %s"%( +- `c`, s + 2, repr(key)) ++ raise KeySpecError("unknown backslash escape %s at char %d of %s"%( ++ repr(c), s + 2, repr(key))) + else: + if ctrl: + ret = chr(ord(key[s]) & 0x1f) # curses.ascii.ctrl() +- ret = unicode(ret) ++ ret = str(ret) + else: +- ret = unicode(key[s]) ++ ret = str(key[s]) + s += 1 + return (ret, meta, ctrl), s + +@@ -156,13 +151,12 @@ def parse_keys(key): + + def _compile_keymap(keymap): + r = {} +- for key, value in keymap.items(): ++ for key, value in list(keymap.items()): + r.setdefault(key[0], {})[key[1:]] = value +- for key, value in r.items(): +- if value.has_key(()): +- if len(value) <> 1: +- raise KeySpecError, \ +- "key definitions for %s clash"%(value.values(),) ++ for key, value in list(r.items()): ++ if () in value: ++ if len(value) != 1: ++ raise KeySpecError("key definitions for %s clash"%(list(value.values()),)) + else: + r[key] = value[()] + else: +@@ -173,7 +167,7 @@ def compile_keymap(keymap): + r = {} + for key, value in keymap: + k = parse_keys(key) +- if value is None and r.has_key(k): ++ if value is None and k in r: + del r[k] + if k is not None: + r[k] = value +@@ -182,7 +176,7 @@ def compile_keymap(keymap): + def keyname(key): + longest_match = '' + longest_match_name = '' +- for name, keyseq in keyset.items(): ++ for name, keyseq in list(keyset.items()): + if keyseq and key.startswith(keyseq) and \ + len(keyseq) > len(longest_match): + longest_match = keyseq +@@ -202,7 +196,7 @@ def unparse_key(keyseq): + return '' + name, s = keyname(keyseq) + if name: +- if name <> 'escape' or s == len(keyseq): ++ if name != 'escape' or s == len(keyseq): + return '\\<' + name + '>' + unparse_key(keyseq[s:]) + else: + return '\\M-' + unparse_key(keyseq[1:]) +@@ -211,7 +205,7 @@ def unparse_key(keyseq): + r = keyseq[1:] + if c == '\\': + p = '\\\\' +- elif _unescapes.has_key(c): ++ elif c in _unescapes: + p = _unescapes[c] + elif ord(c) < ord(' '): + p = '\\C-%s'%(chr(ord(c)+96),) +@@ -226,7 +220,7 @@ def _unparse_keyf(keyseq): + return [] + name, s = keyname(keyseq) + if name: +- if name <> 'escape' or s == len(keyseq): ++ if name != 'escape' or s == len(keyseq): + return [name] + _unparse_keyf(keyseq[s:]) + else: + rest = _unparse_keyf(keyseq[1:]) +@@ -236,7 +230,7 @@ def _unparse_keyf(keyseq): + r = keyseq[1:] + if c == '\\': + p = '\\' +- elif _unescapes.has_key(c): ++ elif c in _unescapes: + p = _unescapes[c] + elif ord(c) < ord(' '): + p = 'C-%s'%(chr(ord(c)+96),) +--- pyrepl/python_reader.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/python_reader.py +@@ -20,8 +20,8 @@ + # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + # one impressive collections of imports: +-from __future__ import print_function +-from __future__ import unicode_literals ++ ++ + from pyrepl.completing_reader import CompletingReader + from pyrepl.historical_reader import HistoricalReader + from pyrepl import completing_reader, reader +@@ -31,9 +31,9 @@ import imp, sys, os, re, code, traceback + import atexit, warnings + + try: +- unicode ++ str + except: +- unicode = str ++ str = str + + try: + imp.find_module("twisted") +@@ -179,7 +179,7 @@ class ReaderConsole(code.InteractiveInterpreter): + else: + return + try: +- execfile(initfile, self.locals, self.locals) ++ exec(compile(open(initfile, "rb").read(), initfile, 'exec'), self.locals, self.locals) + except: + etype, value, tb = sys.exc_info() + traceback.print_exception(etype, value, tb.tb_next) +@@ -203,7 +203,7 @@ class ReaderConsole(code.InteractiveInterpreter): + # can't have warnings spewed onto terminal + sv = warnings.showwarning + warnings.showwarning = eat_it +- l = unicode(self.reader.readline(), 'utf-8') ++ l = str(self.reader.readline(), 'utf-8') + finally: + warnings.showwarning = sv + except KeyboardInterrupt: +@@ -301,7 +301,7 @@ class ReaderConsole(code.InteractiveInterpreter): + self.prepare() + try: + while 1: +- if sys.modules.has_key("_tkinter"): ++ if "_tkinter" in sys.modules: + self.really_tkinteract() + # really_tkinteract is not expected to + # return except via an exception, but: +--- pyrepl/reader.py.orig 2019-04-16 13:00:52 UTC ++++ pyrepl/reader.py +@@ -19,32 +19,32 @@ + # CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-from __future__ import unicode_literals ++ + import unicodedata + from pyrepl import commands + from pyrepl import input + try: +- unicode ++ str + except NameError: +- unicode = str +- unichr = chr +- basestring = bytes, str ++ str = str ++ chr = chr ++ str = bytes, str + + + def _make_unctrl_map(): + uc_map = {} +- for c in map(unichr, range(256)): ++ for c in map(chr, list(range(256))): + if unicodedata.category(c)[0] != 'C': + uc_map[c] = c + for i in range(32): +- c = unichr(i) +- uc_map[c] = '^' + unichr(ord('A') + i - 1) ++ c = chr(i) ++ uc_map[c] = '^' + chr(ord('A') + i - 1) + uc_map[b'\t'] = ' ' # display TABs as 4 characters +- uc_map[b'\177'] = unicode('^?') ++ uc_map[b'\177'] = str('^?') + for i in range(256): +- c = unichr(i) ++ c = chr(i) + if c not in uc_map: +- uc_map[c] = unicode('\\%03o') % i ++ uc_map[c] = str('\\%03o') % i + return uc_map + + +@@ -87,17 +87,17 @@ del _make_unctrl_map + + [SYNTAX_WHITESPACE, + SYNTAX_WORD, +- SYNTAX_SYMBOL] = range(3) ++ SYNTAX_SYMBOL] = list(range(3)) + + + def make_default_syntax_table(): + # XXX perhaps should use some unicodedata here? + st = {} +- for c in map(unichr, range(256)): ++ for c in map(chr, list(range(256))): + st[c] = SYNTAX_SYMBOL +- for c in [a for a in map(unichr, range(256)) if a.isalpha()]: ++ for c in [a for a in map(chr, list(range(256))) if a.isalpha()]: + st[c] = SYNTAX_WORD +- st[unicode('\n')] = st[unicode(' ')] = SYNTAX_WHITESPACE ++ st[str('\n')] = st[str(' ')] = SYNTAX_WHITESPACE + return st + + default_keymap = tuple( +@@ -145,9 +145,9 @@ default_keymap = tuple( + #(r'\M-\n', 'insert-nl'), + ('\\\\', 'self-insert')] + + [(c, 'self-insert') +- for c in map(chr, range(32, 127)) if c != '\\'] + ++ for c in map(chr, list(range(32, 127))) if c != '\\'] + + [(c, 'self-insert') +- for c in map(chr, range(128, 256)) if c.isalpha()] + ++ for c in map(chr, list(range(128, 256))) if c.isalpha()] + + [(r'\<up>', 'up'), + (r'\<down>', 'down'), + (r'\<left>', 'left'), +@@ -245,7 +245,7 @@ feeling more loquacious than I am now.""" + self.console = console + self.commands = {} + self.msg = '' +- for v in vars(commands).values(): ++ for v in list(vars(commands).values()): + if (isinstance(v, type) and + issubclass(v, commands.Command) and + v.__name__[0].islower()): +@@ -273,7 +273,7 @@ feeling more loquacious than I am now.""" + screeninfo = [] + w = self.console.width - 1 + p = self.pos +- for ln, line in zip(range(len(lines)), lines): ++ for ln, line in zip(list(range(len(lines))), lines): + ll = len(line) + if 0 <= p <= ll: + if self.msg and not self.msg_at_bottom: +@@ -523,7 +523,7 @@ feeling more loquacious than I am now.""" + + def do_cmd(self, cmd): + #print cmd +- if isinstance(cmd[0], basestring): ++ if isinstance(cmd[0], str): + #XXX: unify to text + cmd = self.commands.get(cmd[0], + commands.invalid_command)(self, *cmd) +@@ -619,11 +619,11 @@ feeling more loquacious than I am now.""" + def get_buffer(self, encoding=None): + if encoding is None: + encoding = self.console.encoding +- return unicode('').join(self.buffer).encode(self.console.encoding) ++ return str('').join(self.buffer).encode(self.console.encoding) + + def get_unicode(self): + """Return the current buffer as a unicode string.""" +- return unicode('').join(self.buffer) ++ return str('').join(self.buffer) + + + def test(): +--- pyrepl/readline.py.orig 2019-04-16 14:11:33 UTC ++++ pyrepl/readline.py +@@ -248,16 +248,16 @@ class _ReadlineWrapper(object): + self.config.completer_delims = dict.fromkeys(string) + + def get_completer_delims(self): +- chars = self.config.completer_delims.keys() ++ chars = list(self.config.completer_delims.keys()) + chars.sort() + return ''.join(chars) + + def _histline(self, line): + line = line.rstrip('\n') + try: +- return unicode(line, ENCODING) ++ return str(line, ENCODING) + except UnicodeDecodeError: # bah, silently fall back... +- return unicode(line, 'utf-8', 'replace') ++ return str(line, 'utf-8', 'replace') + + def get_history_length(self): + return self.saved_history_length +@@ -293,7 +293,7 @@ class _ReadlineWrapper(object): + history = self.get_reader().get_trimmed_history(maxlength) + f = open(os.path.expanduser(filename), 'w') + for entry in history: +- if isinstance(entry, unicode): ++ if isinstance(entry, str): + try: + entry = entry.encode(ENCODING) + except UnicodeEncodeError: # bah, silently fall back... +@@ -340,7 +340,7 @@ class _ReadlineWrapper(object): + def _get_idxs(self): + start = cursor = self.get_reader().pos + buf = self.get_line_buffer() +- for i in xrange(cursor - 1, -1, -1): ++ for i in range(cursor - 1, -1, -1): + if buf[i] in self.get_completer_delims(): + break + start = i +@@ -396,7 +396,7 @@ def _make_stub(_name, _ret): + def stub(*args, **kwds): + import warnings + warnings.warn("readline.%s() not implemented" % _name, stacklevel=2) +- stub.func_name = _name ++ stub.__name__ = _name + globals()[_name] = stub + + for _name, _ret in [ +@@ -438,14 +438,14 @@ def _setup(): + del sys.__raw_input__ + except AttributeError: + pass +- return raw_input(prompt) ++ return input(prompt) + sys.__raw_input__ = _wrapper.raw_input + + else: + # this is not really what readline.c does. Better than nothing I guess +- import __builtin__ +- _old_raw_input = __builtin__.raw_input +- __builtin__.raw_input = _wrapper.raw_input ++ import builtins ++ _old_raw_input = builtins.raw_input ++ builtins.raw_input = _wrapper.raw_input + + _old_raw_input = None + _setup() +--- pyrepl/unix_console.py.orig 2015-12-06 11:35:46 UTC ++++ pyrepl/unix_console.py +@@ -40,9 +40,9 @@ class InvalidTerminal(RuntimeError): + pass + + try: +- unicode ++ str + except NameError: +- unicode = str ++ str = str + + _error = (termios.error, curses.error, InvalidTerminal) + +@@ -221,7 +221,7 @@ class UnixConsole(Console): + + self.__offset = offset + +- for y, oldline, newline, in zip(range(offset, offset + height), ++ for y, oldline, newline, in zip(list(range(offset, offset + height)), + oldscr, + newscr): + if oldline != newline: +@@ -533,7 +533,7 @@ class UnixConsole(Console): + amount = struct.unpack( + "i", ioctl(self.input_fd, FIONREAD, "\0\0\0\0"))[0] + data = os.read(self.input_fd, amount) +- raw = unicode(data, self.encoding, 'replace') ++ raw = str(data, self.encoding, 'replace') + #XXX: something is wrong here + e.data += raw + e.raw += raw +@@ -549,7 +549,7 @@ class UnixConsole(Console): + + amount = 10000 + data = os.read(self.input_fd, amount) +- raw = unicode(data, self.encoding, 'replace') ++ raw = str(data, self.encoding, 'replace') + #XXX: something is wrong here + e.data += raw + e.raw += raw +--- pyrepl/unix_eventqueue.py.orig 2019-04-16 13:00:52 UTC ++++ pyrepl/unix_eventqueue.py +@@ -30,9 +30,9 @@ from .trace import trace + from termios import tcgetattr, VERASE + import os + try: +- unicode ++ str + except NameError: +- unicode = str ++ str = str + + + _keynames = { +@@ -74,7 +74,7 @@ CTRL_ARROW_KEYCODE = { + + def general_keycodes(): + keycodes = {} +- for key, tiname in _keynames.items(): ++ for key, tiname in list(_keynames.items()): + keycode = curses.tigetstr(tiname) + trace('key {key} tiname {tiname} keycode {keycode!r}', **locals()) + if keycode: +@@ -87,7 +87,7 @@ def EventQueue(fd, encoding): + keycodes = general_keycodes() + if os.isatty(fd): + backspace = tcgetattr(fd)[6][VERASE] +- keycodes[backspace] = unicode('backspace') ++ keycodes[backspace] = str('backspace') + k = keymap.compile_keymap(keycodes) + trace('keymap {k!r}', k=k) + return EncodedQueue(k, encoding) +@@ -133,7 +133,7 @@ class EncodedQueue(object): + self.insert(Event('key', k, self.flush_buf())) + self.k = self.ck + +- elif self.buf and self.buf[0] == 033: # 033 == escape ++ elif self.buf and self.buf[0] == 0o33: # 033 == escape + # escape sequence not recognized by our keymap: propagate it + # outside so that i can be recognized as an M-... key (see also + # the docstring in keymap.py, in particular the line \\E. +--- testing/infrastructure.py.orig 2015-12-06 11:35:46 UTC ++++ testing/infrastructure.py +@@ -17,7 +17,7 @@ + # CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-from __future__ import print_function ++ + from pyrepl.reader import Reader + from pyrepl.console import Console, Event + +--- testing/test_readline.py.orig 2015-12-06 11:35:46 UTC ++++ testing/test_readline.py +@@ -5,7 +5,7 @@ import sys + + if sys.version_info < (3, ): + bytes_type = str +- unicode_type = unicode ++ unicode_type = str + else: + bytes_type = bytes + unicode_type = str +--- testing/test_unix_reader.py.orig 2019-04-16 13:00:52 UTC ++++ testing/test_unix_reader.py +@@ -1,11 +1,11 @@ +-from __future__ import unicode_literals ++ + from pyrepl.unix_eventqueue import EncodedQueue, Event + + + def test_simple(): + q = EncodedQueue({}, 'utf-8') + +- a = u'\u1234' ++ a = '\u1234' + b = a.encode('utf-8') + for c in b: + q.push(c)