summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-04-25 19:07:06 +0000
committerChris McDonough <chrism@agendaless.com>2010-04-25 19:07:06 +0000
commitbc2f1202caedbdb3e0f12dcac05cbdc3113d868c (patch)
tree1d76861de44492b42da52a93d66860dfb18709c7
parent30e64f38f3a01d71f8a728df9d56f31d950ebd20 (diff)
downloadpyramid-bc2f1202caedbdb3e0f12dcac05cbdc3113d868c.tar.gz
pyramid-bc2f1202caedbdb3e0f12dcac05cbdc3113d868c.tar.bz2
pyramid-bc2f1202caedbdb3e0f12dcac05cbdc3113d868c.zip
Allow default exception views to handle the case where they've
been registered explicitly via set_XXX_view instead of as exception views.
-rw-r--r--repoze/bfg/tests/test_view.py56
-rw-r--r--repoze/bfg/view.py5
2 files changed, 33 insertions, 28 deletions
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
index 94366ecbe..eb574cf11 100644
--- a/repoze/bfg/tests/test_view.py
+++ b/repoze/bfg/tests/test_view.py
@@ -408,57 +408,57 @@ class TestBFGViewDecorator(unittest.TestCase):
self.assertEqual(settings[0]['renderer'],
'repoze.bfg.tests:fixtures/minimal.pt')
-class TestDefaultForbiddenView(BaseTest, unittest.TestCase):
- def _callFUT(self, context, request):
- from repoze.bfg.view import default_forbidden_view
- return default_forbidden_view(context, request)
-
+class TestDefaultView(BaseTest):
def test_no_registry_on_request(self):
request = None
context = Exception()
response = self._callFUT(context, request)
- self.assertEqual(response.status, '401 Unauthorized')
+ self.assertEqual(response.status, self.status)
self.failUnless('<code></code>' in response.body)
def test_nomessage(self):
request = self._makeRequest()
context = Exception()
response = self._callFUT(context, request)
- self.assertEqual(response.status, '401 Unauthorized')
+ self.assertEqual(response.status, self.status)
self.failUnless('<code></code>' in response.body)
def test_withmessage(self):
request = self._makeRequest()
context = Exception('abc&123')
response = self._callFUT(context, request)
- self.assertEqual(response.status, '401 Unauthorized')
+ self.assertEqual(response.status, self.status)
self.failUnless('<code>abc&amp;123</code>' in response.body)
-class TestDefaultNotFoundView(BaseTest, unittest.TestCase):
- def _callFUT(self, context, request):
- from repoze.bfg.view import default_notfound_view
- return default_notfound_view(context, request)
-
- def test_no_registry_on_request(self):
- request = None
- context = Exception()
+ def test_context_not_exception(self):
+ request = self._makeRequest()
+ request.exception = Exception('woo')
+ context = None
response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
- self.failUnless('<code></code>' in response.body)
-
- def test_nomessage(self):
+ self.assertEqual(response.status, self.status)
+ self.failUnless('<code>woo</code>' in response.body)
+
+ def test_msg_exception_raised(self):
request = self._makeRequest()
- context = Exception()
+ context = None
response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
+ self.assertEqual(response.status, self.status)
self.failUnless('<code></code>' in response.body)
- def test_withmessage(self):
- request = self._makeRequest()
- context = Exception('abc&123')
- response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
- self.failUnless('<code>abc&amp;123</code>' in response.body)
+class TestDefaultForbiddenView(TestDefaultView, unittest.TestCase):
+ status = '401 Unauthorized'
+
+ def _callFUT(self, context, request):
+ from repoze.bfg.view import default_forbidden_view
+ return default_forbidden_view(context, request)
+
+
+class TestDefaultNotFoundView(TestDefaultView, unittest.TestCase):
+ status = '404 Not Found'
+
+ def _callFUT(self, context, request):
+ from repoze.bfg.view import default_notfound_view
+ return default_notfound_view(context, request)
class AppendSlashNotFoundView(BaseTest, unittest.TestCase):
def _callFUT(self, context, request):
diff --git a/repoze/bfg/view.py b/repoze/bfg/view.py
index d794f74d3..1ab966be2 100644
--- a/repoze/bfg/view.py
+++ b/repoze/bfg/view.py
@@ -511,6 +511,11 @@ class bfg_view(object):
return wrapped
def default_view(context, request, status):
+ if not isinstance(context, Exception):
+ # backwards compat for a default_view registered via
+ # config.set_notfound_view or config.set_forbidden_view
+ # instead of as a proper exception view
+ context = getattr(request, 'exception', None)
try:
msg = cgi.escape('%s' % context.args[0])
except Exception: