diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-04-25 19:07:06 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-04-25 19:07:06 +0000 |
| commit | bc2f1202caedbdb3e0f12dcac05cbdc3113d868c (patch) | |
| tree | 1d76861de44492b42da52a93d66860dfb18709c7 | |
| parent | 30e64f38f3a01d71f8a728df9d56f31d950ebd20 (diff) | |
| download | pyramid-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.py | 56 | ||||
| -rw-r--r-- | repoze/bfg/view.py | 5 |
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&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&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: |
