Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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

Thanks productions@zaziork.co.uk for the review.
  • Loading branch information...
commit 18185724e614fb3449612ce3df811af32fbc0582 1 parent 47afe07
@Bouke Bouke authored claudep committed
Showing with 20 additions and 1 deletion.
  1. +4 −1 django/views/debug.py
  2. +16 −0 tests/view_tests/tests/test_debug.py
View
5 django/views/debug.py
@@ -388,7 +388,10 @@ def _get_lines_from_file(self, filename, lineno, context_lines, loader=None, mod
"""
source = None
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:
source = source.splitlines()
if source is None:
View
16 tests/view_tests/tests/test_debug.py
@@ -19,6 +19,7 @@
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
@@ -239,6 +240,21 @@ def test_message_only(self):
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()
Please sign in to comment.
Something went wrong with that request. Please try again.