Commit d55df0b8 authored by Bouke Haarsma's avatar Bouke Haarsma Committed by Claude Paroz
Browse files

[1.6.x] Fixed #21443 -- Cannot show debug info on PY3's importlib

Thanks productions@zaziork.co.uk for the review.
Backport of 18185724 from master.
parent ea0d97c4
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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:
+16 −0
Original line number Diff line number Diff line
@@ -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()