From cd42e1cc98d6cbc69b460cd114c0c3e9586eb460 Mon Sep 17 00:00:00 2001 From: Pavel Nekrasov Date: Thu, 5 Nov 2026 21:53:10 +0300 Subject: [PATCH 1/3] Fix single-element tuple in idlelib redirector __repr__ Drop the stray comma in two __repr__ f-strings so repr() does not format a one-element tuple. --- Lib/idlelib/idle_test/test_redirector.py | 7 +++++-- Lib/idlelib/redirector.py | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/idlelib/idle_test/test_redirector.py b/Lib/idlelib/idle_test/test_redirector.py index bd486d7da66010..2e88656e81de1c 100644 --- a/Lib/idlelib/idle_test/test_redirector.py +++ b/Lib/idlelib/idle_test/test_redirector.py @@ -64,8 +64,11 @@ def tearDown(self): self.redir.close() def test_repr(self): # partly for 100% coverage - self.assertIn('Redirector', repr(self.redir)) - self.assertIn('Original', repr(self.orig_insert)) + self.assertRegex(repr(self.redir), + r"^WidgetRedirector\(Text<.+>\)$") + self.assertRegex( + repr(self.orig_insert), + r"^OriginalCommand\(WidgetRedirector\(Text<.+>\), 'insert'\)$") def test_register(self): self.assertEqual(self.text.get('1.0', 'end'), '\n') diff --git a/Lib/idlelib/redirector.py b/Lib/idlelib/redirector.py index 8e2ba68d3815bf..821a45ee7982a4 100644 --- a/Lib/idlelib/redirector.py +++ b/Lib/idlelib/redirector.py @@ -48,7 +48,7 @@ def __init__(self, widget): def __repr__(self): w = self.widget - return f"{self.__class__.__name__,}({w.__class__.__name__}<{w._w}>)" + return f"{self.__class__.__name__}({w.__class__.__name__}<{w._w}>)" def close(self): "Unregister operations and revert redirection created by .__init__." @@ -143,7 +143,7 @@ def __init__(self, redir, operation): self.orig_and_operation = (redir.orig, operation) def __repr__(self): - return f"{self.__class__.__name__,}({self.redir!r}, {self.operation!r})" + return f"{self.__class__.__name__}({self.redir!r}, {self.operation!r})" def __call__(self, *args): return self.tk_call(self.orig_and_operation + args) From d41a91767c8adb61301cc3e6a6318d9c28eed0b4 Mon Sep 17 00:00:00 2001 From: Pavel Nekrasov Date: Fri, 6 Nov 2026 17:12:41 +0300 Subject: [PATCH 2/3] Add NEWS entry --- .../next/IDLE/2026-11-06-17-12-40.gh-issue-161477.smXIKC.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2026-11-06-17-12-40.gh-issue-161477.smXIKC.rst diff --git a/Misc/NEWS.d/next/IDLE/2026-11-06-17-12-40.gh-issue-161477.smXIKC.rst b/Misc/NEWS.d/next/IDLE/2026-11-06-17-12-40.gh-issue-161477.smXIKC.rst new file mode 100644 index 00000000000000..ca955e608bc893 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2026-11-06-17-12-40.gh-issue-161477.smXIKC.rst @@ -0,0 +1,3 @@ +Fix ``repr()`` of ``idlelib.redirector.WidgetRedirector`` and +``idlelib.redirector.OriginalCommand``, which displayed a spurious +one-element tuple. From 0b6f37238afb491276088585aa3c1cbfff00c190 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 6 Nov 2026 17:20:15 -0500 Subject: [PATCH 3/3] Apply suggestion --- Lib/idlelib/idle_test/test_redirector.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Lib/idlelib/idle_test/test_redirector.py b/Lib/idlelib/idle_test/test_redirector.py index 2e88656e81de1c..58e7775071c19c 100644 --- a/Lib/idlelib/idle_test/test_redirector.py +++ b/Lib/idlelib/idle_test/test_redirector.py @@ -64,11 +64,10 @@ def tearDown(self): self.redir.close() def test_repr(self): # partly for 100% coverage - self.assertRegex(repr(self.redir), - r"^WidgetRedirector\(Text<.+>\)$") - self.assertRegex( - repr(self.orig_insert), - r"^OriginalCommand\(WidgetRedirector\(Text<.+>\), 'insert'\)$") + self.assertEqual(repr(self.redir), + f"WidgetRedirector(Text<{self.text._w}>)") + self.assertEqual(repr(self.orig_insert), + f"OriginalCommand({self.redir!r}, 'insert')") def test_register(self): self.assertEqual(self.text.get('1.0', 'end'), '\n')