summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert JW Regeer <bertjw@regeer.org>2015-08-03 15:35:00 -0600
committerBert JW Regeer <bertjw@regeer.org>2015-08-03 15:35:00 -0600
commit88fcdc4e6a48f2646488565fbafd050f8e298ffa (patch)
tree3290a8903848bb9b370c2f0d8ef4762d9a99feb8
parent2ad426fdb01b445a52aebcbc879dced9ef7ba6bc (diff)
downloadpyramid-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.py11
-rw-r--r--pyramid/tests/test_httpexceptions.py4
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):