]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-26543: Fix IMAP4.noop when debug mode is enabled (GH-15206)
authorSanyam Khurana <8039608+CuriousLearner@users.noreply.github.com>
Tue, 2 Jun 2020 01:17:45 +0000 (06:47 +0530)
committerGitHub <noreply@github.com>
Tue, 2 Jun 2020 01:17:45 +0000 (03:17 +0200)
Lib/imaplib.py
Lib/test/test_imaplib.py
Misc/NEWS.d/next/Library/2019-08-11-16-28-03.bpo-26543.X-TJZO.rst [new file with mode: 0644]

index d9720f20c390256322cc207bf89fb4981dd0b218..73184396d894a384b435e44204c4b8ff0163f4f6 100644 (file)
@@ -1251,13 +1251,12 @@ class IMAP4:
             sys.stderr.write('  %s.%02d %s\n' % (tm, (secs*100)%100, s))
             sys.stderr.flush()
 
-        def _dump_ur(self, dict):
-            # Dump untagged responses (in `dict').
-            l = dict.items()
-            if not l: return
-            t = '\n\t\t'
-            l = map(lambda x:'%s: "%s"' % (x[0], x[1][0] and '" "'.join(x[1]) or ''), l)
-            self._mesg('untagged responses dump:%s%s' % (t, t.join(l)))
+        def _dump_ur(self, untagged_resp_dict):
+            if not untagged_resp_dict:
+                return
+            items = (f'{key}: {value!r}'
+                    for key, value in untagged_resp_dict.items())
+            self._mesg('untagged responses dump:' + '\n\t\t'.join(items))
 
         def _log(self, line):
             # Keep log of last `_cmd_log_len' interactions for debugging.
index 0fcc1fb99a289ad90ba9cef1bfaad4d0c5c7540a..f93efba7949526425e39e31b306f3ecc6eb14ff6 100644 (file)
@@ -933,6 +933,20 @@ class ThreadedNetworkedTests(unittest.TestCase):
                 self.assertIsNone(server.logged)
             self.assertIsNone(server.logged)
 
+    @threading_helper.reap_threads
+    @cpython_only
+    def test_dump_ur(self):
+        # See: http://bugs.python.org/issue26543
+        untagged_resp_dict = {'READ-WRITE': [b'']}
+
+        with self.reaped_server(SimpleIMAPHandler) as server:
+            with self.imap_class(*server.server_address) as imap:
+                with mock.patch.object(imap, '_mesg') as mock_mesg:
+                    imap._dump_ur(untagged_resp_dict)
+                    mock_mesg.assert_called_with(
+                        "untagged responses dump:READ-WRITE: [b'']"
+                    )
+
 
 @unittest.skipUnless(ssl, "SSL not available")
 class ThreadedNetworkedTestsSSL(ThreadedNetworkedTests):
diff --git a/Misc/NEWS.d/next/Library/2019-08-11-16-28-03.bpo-26543.X-TJZO.rst b/Misc/NEWS.d/next/Library/2019-08-11-16-28-03.bpo-26543.X-TJZO.rst
new file mode 100644 (file)
index 0000000..8715b8d
--- /dev/null
@@ -0,0 +1 @@
+Fix :meth:`IMAP4.noop()` when debug mode is enabled (ex: ``imaplib.Debug = 3``).