[Python-checkins] cpython (merge 3.2 -> 3.3): merge #12890: don't emit <p> tags in text mode when logdir specified.

r.david.murray python-checkins at python.org
Sat Oct 27 20:57:41 CEST 2012


http://hg.python.org/cpython/rev/45764e4bb504
changeset:   79973:45764e4bb504
branch:      3.3
parent:      79969:7e936687fe87
parent:      79972:abbfb89055d3
user:        R David Murray <rdmurray at bitdance.com>
date:        Sat Oct 27 14:55:25 2012 -0400
summary:
  merge #12890: don't emit <p> tags in text mode when logdir specified.

Patch by Jeff McNeil.

files:
  Lib/cgitb.py           |  11 +++++++--
  Lib/test/test_cgitb.py |  33 ++++++++++++++++++++++-------
  Misc/ACKS              |   1 +
  Misc/NEWS              |   3 ++
  4 files changed, 37 insertions(+), 11 deletions(-)


diff --git a/Lib/cgitb.py b/Lib/cgitb.py
--- a/Lib/cgitb.py
+++ b/Lib/cgitb.py
@@ -292,14 +292,19 @@
         if self.logdir is not None:
             suffix = ['.txt', '.html'][self.format=="html"]
             (fd, path) = tempfile.mkstemp(suffix=suffix, dir=self.logdir)
+
             try:
                 file = os.fdopen(fd, 'w')
                 file.write(doc)
                 file.close()
-                msg = '<p> %s contains the description of this error.' % path
+                msg = '%s contains the description of this error.' % path
             except:
-                msg = '<p> Tried to save traceback to %s, but failed.' % path
-            self.file.write(msg + '\n')
+                msg = 'Tried to save traceback to %s, but failed.' % path
+
+            if self.format == 'html':
+                self.file.write('<p>%s</p>\n' % msg)
+            else:
+                self.file.write(msg + '\n')
         try:
             self.file.flush()
         except: pass
diff --git a/Lib/test/test_cgitb.py b/Lib/test/test_cgitb.py
--- a/Lib/test/test_cgitb.py
+++ b/Lib/test/test_cgitb.py
@@ -1,7 +1,9 @@
 from test.support import run_unittest
+from test.script_helper import assert_python_failure, temp_dir
 import unittest
 import sys
 import subprocess
+import tempfile
 import cgitb
 
 class TestCgitb(unittest.TestCase):
@@ -36,16 +38,31 @@
             self.assertIn("ValueError", text)
             self.assertIn("Hello World", text)
 
-    def test_hook(self):
-        proc = subprocess.Popen([sys.executable, '-c',
-                                 ('import cgitb;'
-                                  'cgitb.enable();'
-                                  'raise ValueError("Hello World")')],
-                                stdout=subprocess.PIPE)
-        out = proc.stdout.read().decode(sys.getfilesystemencoding())
-        self.addCleanup(proc.stdout.close)
+    def test_syshook_no_logdir_default_format(self):
+        with temp_dir() as tracedir:
+            rc, out, err = assert_python_failure(
+                  '-c',
+                  ('import cgitb; cgitb.enable(logdir="%s"); '
+                   'raise ValueError("Hello World")') % tracedir)
+        out = out.decode(sys.getfilesystemencoding())
         self.assertIn("ValueError", out)
         self.assertIn("Hello World", out)
+        # By default we emit HTML markup.
+        self.assertIn('<p>', out)
+        self.assertIn('</p>', out)
+
+    def test_syshook_no_logdir_text_format(self):
+        # Issue 12890: we were emitting the <p> tag in text mode.
+        with temp_dir() as tracedir:
+            rc, out, err = assert_python_failure(
+                  '-c',
+                  ('import cgitb; cgitb.enable(format="text", logdir="%s"); '
+                   'raise ValueError("Hello World")') % tracedir)
+        out = out.decode(sys.getfilesystemencoding())
+        self.assertIn("ValueError", out)
+        self.assertIn("Hello World", out)
+        self.assertNotIn('<p>', out)
+        self.assertNotIn('</p>', out)
 
 
 def test_main():
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -769,6 +769,7 @@
 Gordon McMillan
 Andrew McNamara
 Caolan McNamara
+Jeff McNeil
 Craig McPheeters
 Lambert Meertens
 Bill van Melle
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -49,6 +49,9 @@
 Library
 -------
 
+- Issue #12890: cgitb no longer prints spurious <p> tags in text
+  mode when the logdir option is specified.
+
 - Issue #16307: Fix multiprocessing.Pool.map_async not calling its callbacks.
   Patch by Janne Karila.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list