git: 080746748698 - main - devel/py-pyrepl: Update to 0.11.5
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 29 Sep 2026 19:29:44 UTC
The branch main has been updated by sunpoet:
URL: https://cgit.FreeBSD.org/ports/commit/?id=0807467486982ad89f4bf642f5bc9d8226ec40c1
commit 0807467486982ad89f4bf642f5bc9d8226ec40c1
Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2026-09-29 18:59:29 +0000
Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2026-09-29 19:24:45 +0000
devel/py-pyrepl: Update to 0.11.5
- Update WWW
Changes: https://github.com/bretello/pyrepl/releases
---
devel/py-pyrepl/Makefile | 7 +-
devel/py-pyrepl/distinfo | 6 +-
devel/py-pyrepl/files/patch-2to3 | 703 ---------------------------------------
3 files changed, 6 insertions(+), 710 deletions(-)
diff --git a/devel/py-pyrepl/Makefile b/devel/py-pyrepl/Makefile
index 6485f611dff0..4df33400a2df 100644
--- a/devel/py-pyrepl/Makefile
+++ b/devel/py-pyrepl/Makefile
@@ -1,18 +1,17 @@
PORTNAME= pyrepl
-PORTVERSION= 0.9.0
-PORTREVISION= 1
+PORTVERSION= 0.11.5
CATEGORIES= devel python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
MAINTAINER= sunpoet@FreeBSD.org
COMMENT= Replacement for readline and interactive environment for Python
-WWW= https://bitbucket.org/pypy/pyrepl
+WWW= https://github.com/bretello/pyrepl
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
-BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools@${PY_FLAVOR} \
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools-scm>=8:devel/py-setuptools-scm@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
USES= python
diff --git a/devel/py-pyrepl/distinfo b/devel/py-pyrepl/distinfo
index 5bebe9a87bdf..9eae21223cb9 100644
--- a/devel/py-pyrepl/distinfo
+++ b/devel/py-pyrepl/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1555592233
-SHA256 (pyrepl-0.9.0.tar.gz) = 292570f34b5502e871bbb966d639474f2b57fbfcd3373c2d6a2f3d56e681a775
-SIZE (pyrepl-0.9.0.tar.gz) = 48744
+TIMESTAMP = 1790435796
+SHA256 (pyrepl-0.11.5.tar.gz) = ca5ac139835636005bed2bb0b6e2168de31a093e03a5b95edccbdbb7ca69b6fc
+SIZE (pyrepl-0.11.5.tar.gz) = 51871
diff --git a/devel/py-pyrepl/files/patch-2to3 b/devel/py-pyrepl/files/patch-2to3
deleted file mode 100644
index afdeccca2b3b..000000000000
--- a/devel/py-pyrepl/files/patch-2to3
+++ /dev/null
@@ -1,703 +0,0 @@
---- 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)