summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnubhav Joshi <anubhav9042@gmail.com>2014-06-22 09:02:14 +0530
committerTim Graham <timograham@gmail.com>2014-06-23 15:27:25 -0400
commit7f76251fb7ea8593a47ab55ac22d6cb500b39e2f (patch)
tree7f2efa9a29f5742ba4cd83d0e9a0c8da73cb3820
parentbcd2e6c697ee29ab1c1240a6b30281d53329b333 (diff)
Refactored common code in handlers/base.py and urlresolvers.py
-rw-r--r--django/core/handlers/base.py37
-rw-r--r--django/core/urlresolvers.py14
-rw-r--r--tests/urlpatterns_reverse/tests.py12
3 files changed, 21 insertions, 42 deletions
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index 26788fd58a..2d1d61ce18 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -70,6 +70,16 @@ class BaseHandler(object):
view = transaction.atomic(using=db.alias)(view)
return view
+ def get_exception_response(self, request, resolver, status_code):
+ try:
+ callback, param_dict = resolver.resolve_error_handler(status_code)
+ response = callback(request, **param_dict)
+ except:
+ signals.got_request_exception.send(sender=self.__class__, request=request)
+ response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
+
+ return response
+
def get_response(self, request):
"Returns an HttpResponse object for the given HttpRequest"
@@ -151,12 +161,7 @@ class BaseHandler(object):
if settings.DEBUG:
response = debug.technical_404_response(request, e)
else:
- try:
- callback, param_dict = resolver.resolve404()
- response = callback(request, **param_dict)
- except:
- signals.got_request_exception.send(sender=self.__class__, request=request)
- response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
+ response = self.get_exception_response(request, resolver, 404)
except PermissionDenied:
logger.warning(
@@ -165,14 +170,7 @@ class BaseHandler(object):
'status_code': 403,
'request': request
})
- try:
- callback, param_dict = resolver.resolve403()
- response = callback(request, **param_dict)
- except:
- signals.got_request_exception.send(
- sender=self.__class__, request=request)
- response = self.handle_uncaught_exception(request,
- resolver, sys.exc_info())
+ response = self.get_exception_response(request, resolver, 403)
except SuspiciousOperation as e:
# The request logger receives events for any problematic request
@@ -186,14 +184,7 @@ class BaseHandler(object):
'request': request
})
- try:
- callback, param_dict = resolver.resolve400()
- response = callback(request, **param_dict)
- except:
- signals.got_request_exception.send(
- sender=self.__class__, request=request)
- response = self.handle_uncaught_exception(request,
- resolver, sys.exc_info())
+ response = self.get_exception_response(request, resolver, 400)
except SystemExit:
# Allow sys.exit() to actually exit. See tickets #1023 and #4701
@@ -251,7 +242,7 @@ class BaseHandler(object):
if resolver.urlconf_module is None:
six.reraise(*exc_info)
# Return an HttpResponse that displays a friendly error message.
- callback, param_dict = resolver.resolve500()
+ callback, param_dict = resolver.resolve_error_handler(500)
return callback(request, **param_dict)
def apply_response_fixes(self, request, response):
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index dd98b7bb03..e8564ecc76 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -393,7 +393,7 @@ class RegexURLResolver(LocaleRegexProvider):
raise ImproperlyConfigured(msg.format(name=self.urlconf_name))
return patterns
- def _resolve_special(self, view_type):
+ def resolve_error_handler(self, view_type):
callback = getattr(self.urlconf_module, 'handler%s' % view_type, None)
if not callback:
# No handler specified in file; use default
@@ -402,18 +402,6 @@ class RegexURLResolver(LocaleRegexProvider):
callback = getattr(urls, 'handler%s' % view_type)
return get_callable(callback), {}
- def resolve400(self):
- return self._resolve_special('400')
-
- def resolve403(self):
- return self._resolve_special('403')
-
- def resolve404(self):
- return self._resolve_special('404')
-
- def resolve500(self):
- return self._resolve_special('500')
-
def reverse(self, lookup_view, *args, **kwargs):
return self._reverse_with_prefix(lookup_view, '', *args, **kwargs)
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index d2840a0037..6964065f30 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -614,15 +614,15 @@ class ErrorHandlerResolutionTests(TestCase):
def test_named_handlers(self):
handler = (empty_view, {})
- self.assertEqual(self.resolver.resolve400(), handler)
- self.assertEqual(self.resolver.resolve404(), handler)
- self.assertEqual(self.resolver.resolve500(), handler)
+ self.assertEqual(self.resolver.resolve_error_handler(400), handler)
+ self.assertEqual(self.resolver.resolve_error_handler(404), handler)
+ self.assertEqual(self.resolver.resolve_error_handler(500), handler)
def test_callable_handers(self):
handler = (empty_view, {})
- self.assertEqual(self.callable_resolver.resolve400(), handler)
- self.assertEqual(self.callable_resolver.resolve404(), handler)
- self.assertEqual(self.callable_resolver.resolve500(), handler)
+ self.assertEqual(self.callable_resolver.resolve_error_handler(400), handler)
+ self.assertEqual(self.callable_resolver.resolve_error_handler(404), handler)
+ self.assertEqual(self.callable_resolver.resolve_error_handler(500), handler)
@override_settings(ROOT_URLCONF='urlpatterns_reverse.urls_without_full_import')