Author: russellm
Date: 2010-03-26 10:08:24 -0500 (Fri, 26 Mar 2010)
New Revision: 12854

Modified:
   django/trunk/django/core/handlers/base.py
   django/trunk/tests/regressiontests/urlpatterns_reverse/middleware.py
   django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py
Log:
Fixed #12594 -- Ensured that a meaningful exception is raised when the 
urlconf_module is None. Thanks to buriy for the report and patch.

Modified: django/trunk/django/core/handlers/base.py
===================================================================
--- django/trunk/django/core/handlers/base.py   2010-03-25 20:01:40 UTC (rev 
12853)
+++ django/trunk/django/core/handlers/base.py   2010-03-26 15:08:24 UTC (rev 
12854)
@@ -173,6 +173,9 @@
             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)

Modified: django/trunk/tests/regressiontests/urlpatterns_reverse/middleware.py
===================================================================
--- django/trunk/tests/regressiontests/urlpatterns_reverse/middleware.py        
2010-03-25 20:01:40 UTC (rev 12853)
+++ django/trunk/tests/regressiontests/urlpatterns_reverse/middleware.py        
2010-03-26 15:08:24 UTC (rev 12854)
@@ -5,3 +5,7 @@
 class ChangeURLconfMiddleware(object):
     def process_request(self, request):
         request.urlconf = urlconf_inner.__name__
+
+class NullChangeURLconfMiddleware(object):
+    def process_request(self, request):
+        request.urlconf = None

Modified: django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py
===================================================================
--- django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py     
2010-03-25 20:01:40 UTC (rev 12853)
+++ django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py     
2010-03-26 15:08:24 UTC (rev 12854)
@@ -17,6 +17,7 @@
 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,16 +283,22 @@
         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"""
-    
+
     def setUp(self):
         from django.core.urlresolvers import RegexURLResolver
         urlconf = 'regressiontests.urlpatterns_reverse.urls_error_handlers'
         urlconf_callables = 
'regressiontests.urlpatterns_reverse.urls_error_handlers_callables'
         self.resolver = RegexURLResolver(r'^$', urlconf)
         self.callable_resolver = RegexURLResolver(r'^$', urlconf_callables)
-    
+
     def test_named_handlers(self):
         from views import empty_view
         handler = (empty_view, {})
@@ -303,3 +310,10 @@
         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/')

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to