Commit 794690c2 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #13090 -- Corrected handling of errors in middleware when DEBUG=False....

Fixed #13090 -- Corrected handling of errors in middleware when DEBUG=False. Thanks to EroSennin for the report, and Ivan Sagalaev for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@12773 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 4120a181
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -70,10 +70,10 @@ class BaseHandler(object):

        try:
            try:
                # Reset the urlconf for this thread.
                urlresolvers.set_urlconf(None)
                # Obtain a default resolver. It's needed early for handling 404's.
                resolver = urlresolvers.RegexURLResolver(r'^/', None)
                # Setup default url resolver for this thread.
                urlconf = settings.ROOT_URLCONF
                urlresolvers.set_urlconf(urlconf)
                resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)

                # Apply request middleware
                for middleware_method in self._request_middleware:
@@ -81,11 +81,10 @@ class BaseHandler(object):
                    if response:
                        return response

                # Get urlconf from request object, if available.  Otherwise use default.
                urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF)
                # Set the urlconf for this thread to the one specified above.
                if hasattr(request, "urlconf"):
                    # Reset url resolver with a custom urlconf.
                    urlconf = request.urlconf
                    urlresolvers.set_urlconf(urlconf)
                # Reset the resolver with a possibly new urlconf
                    resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)

                callback, callback_args, callback_kwargs = resolver.resolve(
+10 −5
Original line number Diff line number Diff line
@@ -3,9 +3,12 @@ import sys
from django.test import TestCase
from django.core.signals import got_request_exception

class RequestMiddleware(object):
class TestException(Exception):
    pass

class TestMiddleware(object):
    def process_request(self, request):
        raise Exception('Exception')
        raise TestException('Test Exception')

class MiddlewareExceptionTest(TestCase):
    def setUp(self):
@@ -21,15 +24,17 @@ class MiddlewareExceptionTest(TestCase):
        self.exceptions.append(sys.exc_info())

    def test_process_request(self):
        self.client.handler._request_middleware.insert(0, RequestMiddleware().process_request)
        self.client.handler._request_middleware.insert(0, TestMiddleware().process_request)
        try:
            response = self.client.get('/')
        except:
        except TestException, e:
            # Test client indefinitely re-raises any exceptions being raised
            # during request handling. Hence actual testing that exception was
            # properly handled is done by relying on got_request_exception
            # signal being sent.
            pass
        except Exception, e:
            self.fail("Unexpected exception: %s" % e)
        self.assertEquals(len(self.exceptions), 1)
        exception, value, tb = self.exceptions[0]
        self.assertEquals(value.args, ('Exception', ))
        self.assertEquals(value.args, ('Test Exception', ))