[Checkins] SVN: zope.testbrowser/trunk/ Tweak WSGI handleErrors implementation
Brian Sutherland
jinty at web.de
Fri Sep 9 02:17:35 EST 2011
Log message for revision 122757:
Tweak WSGI handleErrors implementation
- When ``Browser.handleErrors`` is False, also add ``x-wsgiorg.throw_errors``
to the environment. http://wsgi.org/wsgi/Specifications/throw_errors
- Prevent WebTest from always sending ``paste.throw_errors=True`` in the
environment by setting it to ``None`` when ``Browser.handleErrors`` is
``True``. This makes it easier to test error pages.
Changed:
U zope.testbrowser/trunk/CHANGES.txt
U zope.testbrowser/trunk/src/zope/testbrowser/tests/test_wsgi.py
U zope.testbrowser/trunk/src/zope/testbrowser/wsgi.py
-=-
Modified: zope.testbrowser/trunk/CHANGES.txt
===================================================================
--- zope.testbrowser/trunk/CHANGES.txt 2011-09-09 04:56:16 UTC (rev 122756)
+++ zope.testbrowser/trunk/CHANGES.txt 2011-09-09 07:17:34 UTC (rev 122757)
@@ -5,8 +5,13 @@
4.0.3 (unreleased)
------------------
-- None yet.
+- When ``Browser.handleErrors`` is False, also add ``x-wsgiorg.throw_errors``
+ to the environment. http://wsgi.org/wsgi/Specifications/throw_errors
+- Prevent WebTest from always sending ``paste.throw_errors=True`` in the
+ environment by setting it to ``None`` when ``Browser.handleErrors`` is
+ ``True``. This makes it easier to test error pages.
+
4.0.2 (2011-05-25)
------------------
Modified: zope.testbrowser/trunk/src/zope/testbrowser/tests/test_wsgi.py
===================================================================
--- zope.testbrowser/trunk/src/zope/testbrowser/tests/test_wsgi.py 2011-09-09 04:56:16 UTC (rev 122756)
+++ zope.testbrowser/trunk/src/zope/testbrowser/tests/test_wsgi.py 2011-09-09 07:17:34 UTC (rev 122757)
@@ -77,6 +77,23 @@
browser.open('http://bar.example.net')
self.assertTrue(browser.contents.startswith('Hello world!\n'))
+ def test_handle_errors(self):
+ # http://wsgi.org/wsgi/Specifications/throw_errors
+ app = WSGITestApplication()
+ browser = zope.testbrowser.wsgi.Browser(wsgi_app=app)
+ browser.open('http://localhost/echo_one.html?var=x-wsgiorg.throw_errors')
+ self.assertEquals(browser.contents, 'None')
+ browser.open('http://localhost/echo_one.html?var=paste.throw_errors')
+ self.assertEquals(browser.contents, 'None')
+ browser.open('http://localhost/echo_one.html?var=wsgi.handleErrors')
+ self.assertEquals(browser.contents, 'None')
+ browser.handleErrors = False
+ browser.open('http://localhost/echo_one.html?var=x-wsgiorg.throw_errors')
+ self.assertEquals(browser.contents, 'True')
+ browser.open('http://localhost/echo_one.html?var=paste.throw_errors')
+ self.assertEquals(browser.contents, 'True')
+ browser.open('http://localhost/echo_one.html?var=wsgi.handleErrors')
+ self.assertEquals(browser.contents, 'False')
class TestWSGILayer(unittest.TestCase):
Modified: zope.testbrowser/trunk/src/zope/testbrowser/wsgi.py
===================================================================
--- zope.testbrowser/trunk/src/zope/testbrowser/wsgi.py 2011-09-09 04:56:16 UTC (rev 122756)
+++ zope.testbrowser/trunk/src/zope/testbrowser/wsgi.py 2011-09-09 07:17:34 UTC (rev 122757)
@@ -75,11 +75,16 @@
# Translate string to boolean.
handle_errors = {'False': False}.get(handle_errors_header, True)
- extra_environ = {}
+
+ # WebTest always sets 'paste.throw_errors' to True. Setting it to None
+ # here overrides that, but is UGLY. sigh.
+ extra_environ = {'paste.throw_errors': None}
+
if not handle_errors:
# There doesn't seem to be a "Right Way" to do this
extra_environ['wsgi.handleErrors'] = False # zope.app.wsgi does this
extra_environ['paste.throw_errors'] = True # the paste way of doing this
+ extra_environ['x-wsgiorg.throw_errors'] = True # http://wsgi.org/wsgi/Specifications/throw_errors
scheme_key = 'X-Zope-Scheme'
extra_environ['wsgi.url_scheme'] = headers.get(scheme_key, 'http')
More information about the checkins
mailing list