Fixed #21443 -- Cannot show debug info on PY3's importlib

Thanks productions@zaziork.co.uk for the review.
This commit is contained in:
Bouke Haarsma 2013-11-20 18:50:36 +01:00 committed by Claude Paroz
parent 47afe07324
commit 18185724e6
2 changed files with 20 additions and 1 deletions

View File

@ -388,7 +388,10 @@ class ExceptionReporter(object):
""" """
source = None source = None
if loader is not None and hasattr(loader, "get_source"): if loader is not None and hasattr(loader, "get_source"):
source = loader.get_source(module_name) try:
source = loader.get_source(module_name)
except ImportError:
pass
if source is not None: if source is not None:
source = source.splitlines() source = source.splitlines()
if source is None: if source is None:

View File

@ -19,6 +19,7 @@ from django.test import TestCase, RequestFactory
from django.test.utils import (override_settings, setup_test_template_loader, from django.test.utils import (override_settings, setup_test_template_loader,
restore_template_loaders) restore_template_loaders)
from django.utils.encoding import force_text, force_bytes from django.utils.encoding import force_text, force_bytes
from django.utils import importlib, six
from django.views.debug import ExceptionReporter from django.views.debug import ExceptionReporter
from .. import BrokenException, except_args from .. import BrokenException, except_args
@ -239,6 +240,21 @@ class ExceptionReporterTests(TestCase):
self.assertIn('<h2>Request information</h2>', html) self.assertIn('<h2>Request information</h2>', html)
self.assertIn('<p>Request data not supplied</p>', html) self.assertIn('<p>Request data not supplied</p>', html)
@skipIf(six.PY2, 'Bug manifests on PY3 only')
def test_unfrozen_importlib(self):
"""
importlib is not a frozen app, but its loader thinks it's frozen which
results in an ImportError on Python 3. Refs #21443.
"""
try:
request = self.rf.get('/test_view/')
importlib.import_module('abc.def.invalid.name')
except Exception:
exc_type, exc_value, tb = sys.exc_info()
reporter = ExceptionReporter(request, exc_type, exc_value, tb)
html = reporter.get_traceback_html()
self.assertIn('<h1>ImportError at /test_view/</h1>', html)
class PlainTextReportTests(TestCase): class PlainTextReportTests(TestCase):
rf = RequestFactory() rf = RequestFactory()