git: 79ee504ae882 - main - devel/py-pyrepl: Fix build with setuptools 58.0.0+

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
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)