Fixed #21443 -- Cannot show debug info on PY3's importlib
Thanks productions@zaziork.co.uk for the review.
This commit is contained in:
parent
47afe07324
commit
18185724e6
|
@ -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:
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue