From 59383f1e3a8ab5a6477dbd5bb1d7c32366a9d8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ehrlich?= Date: Mon, 30 Mar 2015 20:26:41 +0200 Subject: [PATCH] Ref #23643 -- Added plain text report of exception chain. --- django/views/debug.py | 13 +++++++++---- tests/view_tests/tests/py3_test_debug.py | 7 +++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/django/views/debug.py b/django/views/debug.py index 78ce764cf0..cd662ce23f 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -889,10 +889,15 @@ In template {{ template_info.name }}, error at line {{ template_info.line }} {% else %} {{ source_line.0 }} : {{ source_line.1 }} {% endifequal %}{% endfor %}{% endif %} -Traceback: -{% for frame in frames %}File "{{ frame.filename|escape }}" in {{ frame.function|escape }} -{% if frame.context_line %} {{ frame.lineno }}. {{ frame.context_line|escape }}{% endif %} -{% endfor %} +Traceback:{% for frame in frames %} +{% ifchanged frame.exc_cause %}{% if frame.exc_cause %}{% if frame.exc_cause_explicit %} +The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception: +{% else %} +During handling of the above exception ({{ frame.exc_cause }}), another exception occurred: +{% endif %}{% endif %}{% endifchanged %} +File "{{ frame.filename|escape }}" in {{ frame.function|escape }} +{% if frame.context_line %} {{ frame.lineno }}. {{ frame.context_line|escape }}{% endif %}{% endfor %} + Exception Type: {{ exception_type|escape }}{% if request %} at {{ request.path_info|escape }}{% endif %} Exception Value: {{ exception_value|force_escape }} diff --git a/tests/view_tests/tests/py3_test_debug.py b/tests/view_tests/tests/py3_test_debug.py index 38d840f07a..30201bae53 100644 --- a/tests/view_tests/tests/py3_test_debug.py +++ b/tests/view_tests/tests/py3_test_debug.py @@ -32,10 +32,13 @@ class Py3ExceptionReporterTests(TestCase): explicit_exc = 'The above exception ({0}) was the direct cause of the following exception:' implicit_exc = 'During handling of the above exception ({0}), another exception occurred:' + reporter = ExceptionReporter(request, exc_type, exc_value, tb) html = reporter.get_traceback_html() - self.assertIn(explicit_exc.format("Top level"), html) - self.assertIn(implicit_exc.format("Second exception"), html) + # Both messages are twice on page -- one rendered as html, + # one as plain text (for pastebin) + self.assertEqual(2, html.count(explicit_exc.format("Top level"))) + self.assertEqual(2, html.count(implicit_exc.format("Second exception"))) text = reporter.get_traceback_text() self.assertIn(explicit_exc.format("Top level"), text)