Commit 667ced2a authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #12594 -- Ensured that a meaningful exception is raised when the...

Fixed #12594 -- Ensured that a meaningful exception is raised when the urlconf_module is None. Thanks to buriy for the report and patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12854 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 9b50ec81
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -173,6 +173,9 @@ class BaseHandler(object):
            request_repr = "Request repr() unavailable"
        message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
        mail_admins(subject, message, fail_silently=True)
        # If Http500 handler is not installed, re-raise last exception
        if resolver.urlconf_module is None:
            raise exc_info[1], None, exc_info[2]
        # Return an HttpResponse that displays a friendly error message.
        callback, param_dict = resolver.resolve500()
        return callback(request, **param_dict)
+4 −0
Original line number Diff line number Diff line
@@ -5,3 +5,7 @@ import urlconf_inner
class ChangeURLconfMiddleware(object):
    def process_request(self, request):
        request.urlconf = urlconf_inner.__name__

class NullChangeURLconfMiddleware(object):
    def process_request(self, request):
        request.urlconf = None
+16 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ ImproperlyConfigured: The included urlconf regressiontests.urlpatterns_reverse.n
import unittest

from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse, resolve, NoReverseMatch, Resolver404
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django.shortcuts import redirect
@@ -282,6 +283,12 @@ class RequestURLconfTests(TestCase):
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content, 'outer:,inner:/second_test/')

    def test_urlconf_overridden_with_null(self):
        settings.MIDDLEWARE_CLASSES += (
            '%s.NullChangeURLconfMiddleware' % middleware.__name__,
        )
        self.assertRaises(ImproperlyConfigured, self.client.get, '/test/me/')

class ErrorHandlerResolutionTests(TestCase):
    """Tests for handler404 and handler500"""

@@ -303,3 +310,10 @@ class ErrorHandlerResolutionTests(TestCase):
        handler = (empty_view, {})
        self.assertEqual(self.callable_resolver.resolve404(), handler)
        self.assertEqual(self.callable_resolver.resolve500(), handler)

class NoRootUrlConfTests(TestCase):
    """Tests for handler404 and handler500 if urlconf is None"""
    urls = None

    def test_no_handler_exception(self):
        self.assertRaises(ImproperlyConfigured, self.client.get, '/test/me/')