[1.6.x] Fixed #21443 -- Cannot show debug info on PY3's importlib
Thanks productions@zaziork.co.uk for the review.
Backport of 18185724e6
from master.
This commit is contained in:
parent
ea0d97c470
commit
d55df0b810
|
@ -376,7 +376,10 @@ class ExceptionReporter(object):
|
|||
"""
|
||||
source = None
|
||||
if loader is not None and hasattr(loader, "get_source"):
|
||||
try:
|
||||
source = loader.get_source(module_name)
|
||||
except ImportError:
|
||||
pass
|
||||
if source is not None:
|
||||
source = source.splitlines()
|
||||
if source is None:
|
||||
|
|
|
@ -17,6 +17,7 @@ from django.test import TestCase, RequestFactory
|
|||
from django.test.utils import (override_settings, setup_test_template_loader,
|
||||
restore_template_loaders)
|
||||
from django.utils.encoding import force_text, force_bytes
|
||||
from django.utils import importlib, six
|
||||
from django.views.debug import ExceptionReporter
|
||||
|
||||
from .. import BrokenException, except_args
|
||||
|
@ -223,6 +224,21 @@ class ExceptionReporterTests(TestCase):
|
|||
self.assertIn('<h2>Request information</h2>', 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):
|
||||
rf = RequestFactory()
|
||||
|
|
Loading…
Reference in New Issue