From: Lysandros Nikolaou Date: Tue, 7 May 2024 14:31:56 +0000 (+0200) Subject: gh-118682: Revert forcing str commands, allow class commands in pyrepl (#118709) X-Git-Tag: v3.13.0b1~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e5413ec7831608f6cb4f39d805785cb1d7b67702;p=thirdparty%2FPython%2Fcpython.git gh-118682: Revert forcing str commands, allow class commands in pyrepl (#118709) --- diff --git a/Lib/_pyrepl/reader.py b/Lib/_pyrepl/reader.py index e36f65c176e8..d84c164a0530 100644 --- a/Lib/_pyrepl/reader.py +++ b/Lib/_pyrepl/reader.py @@ -568,12 +568,16 @@ class Reader: """`cmd` is a tuple of "event_name" and "event", which in the current implementation is always just the "buffer" which happens to be a list of single-character strings.""" - assert isinstance(cmd[0], str) trace("received command {cmd}", cmd=cmd) - command_type = self.commands.get(cmd[0], commands.invalid_command) - command = command_type(self, *cmd) # type: ignore[arg-type] + if isinstance(cmd[0], str): + command_type = self.commands.get(cmd[0], commands.invalid_command) + elif isinstance(cmd[0], type): + command_type = cmd[0] + else: + return # nothing to do + command = command_type(self, *cmd) # type: ignore[arg-type] command.do() self.after_command(command) diff --git a/Lib/test/test_pyrepl.py b/Lib/test/test_pyrepl.py index b7ae91b91952..bb9e36bc69ba 100644 --- a/Lib/test/test_pyrepl.py +++ b/Lib/test/test_pyrepl.py @@ -976,6 +976,15 @@ class TestReader(TestCase): reader.setpos_from_xy(0, 1) self.assertEqual(reader.pos, 9) + def test_up_arrow_after_ctrl_r(self): + events = iter([ + Event(evt='key', data='\x12', raw=bytearray(b'\x12')), + Event(evt='key', data='up', raw=bytearray(b'\x1bOA')), + ]) + + reader, _ = handle_all_events(events) + self.assert_screen_equals(reader, "") + if __name__ == "__main__": unittest.main()