diff options
| author | Bert JW Regeer <bertjw@regeer.org> | 2015-08-03 15:35:00 -0600 |
|---|---|---|
| committer | Bert JW Regeer <bertjw@regeer.org> | 2015-08-03 15:35:00 -0600 |
| commit | 88fcdc4e6a48f2646488565fbafd050f8e298ffa (patch) | |
| tree | 3290a8903848bb9b370c2f0d8ef4762d9a99feb8 | |
| parent | 2ad426fdb01b445a52aebcbc879dced9ef7ba6bc (diff) | |
| download | pyramid-88fcdc4e6a48f2646488565fbafd050f8e298ffa.tar.gz pyramid-88fcdc4e6a48f2646488565fbafd050f8e298ffa.tar.bz2 pyramid-88fcdc4e6a48f2646488565fbafd050f8e298ffa.zip | |
Fix Pyramid against WebOb >=1.5.0
Due to changes in WebOb we may no longer create a Response() object with
an invalid status (i.e. 'None None'). For the top-level HTTPException if
it is not correctly overriden in child classes then we now use '520
Unknown Error'.
While not an official RFC error, this has been used by Microsoft's Azure
as well as CloudFlare to signify an error that doesn't have a more
appropriate error message.
| -rw-r--r-- | pyramid/httpexceptions.py | 11 | ||||
| -rw-r--r-- | pyramid/tests/test_httpexceptions.py | 4 |
2 files changed, 11 insertions, 4 deletions
diff --git a/pyramid/httpexceptions.py b/pyramid/httpexceptions.py index 93d06e0d6..8bf9a0a72 100644 --- a/pyramid/httpexceptions.py +++ b/pyramid/httpexceptions.py @@ -160,6 +160,13 @@ class HTTPException(Response, Exception): # title = 'OK' # explanation = 'why this happens' # body_template_obj = Template('response template') + # + # This class itself uses the error code "520" with the error message/title + # of "Unknown Error". This is not an RFC standard, however it is + # implemented in practice. Sub-classes should be overriding the default + # values and 520 should not be seen in the wild from Pyramid applications. + # Due to changes in WebOb, a code of "None" is not valid, and WebOb due to + # more strict error checking rejects it now. # differences from webob.exc.WSGIHTTPException: # @@ -178,8 +185,8 @@ class HTTPException(Response, Exception): # # - documentation improvements (Pyramid-specific docstrings where necessary) # - code = None - title = None + code = 520 + title = 'Unknown Error' explanation = '' body_template_obj = Template('''\ ${explanation}${br}${br} diff --git a/pyramid/tests/test_httpexceptions.py b/pyramid/tests/test_httpexceptions.py index c700dc80e..b94ef30e4 100644 --- a/pyramid/tests/test_httpexceptions.py +++ b/pyramid/tests/test_httpexceptions.py @@ -120,7 +120,7 @@ class TestHTTPException(unittest.TestCase): def test_ctor_calls_Response_ctor(self): exc = self._makeOne('message') - self.assertEqual(exc.status, 'None None') + self.assertEqual(exc.status, '520 Unknown Error') def test_ctor_extends_headers(self): exc = self._makeOne(headers=[('X-Foo', 'foo')]) @@ -329,7 +329,7 @@ class Test_HTTPMove(unittest.TestCase): start_response = DummyStartResponse() app_iter = exc(environ, start_response) self.assertEqual(app_iter[0], - (b'None None\n\nThe resource has been moved to foo; ' + (b'520 Unknown Error\n\nThe resource has been moved to foo; ' b'you should be redirected automatically.\n\n')) class TestHTTPForbidden(unittest.TestCase): |
