merge #12890: don't emit <p> tags in text mode when logdir specified.

Patch by Jeff McNeil.
This commit is contained in:
R David Murray 2012-10-27 14:55:25 -04:00
commit c4b8e05092
4 changed files with 37 additions and 11 deletions

View File

@ -292,14 +292,19 @@ class Hook:
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

View File

@ -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 @@ class TestCgitb(unittest.TestCase):
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():

View File

@ -769,6 +769,7 @@ Mark Mc Mahon
Gordon McMillan
Andrew McNamara
Caolan McNamara
Jeff McNeil
Craig McPheeters
Lambert Meertens
Bill van Melle

View File

@ -49,6 +49,9 @@ Core and Builtins
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.