[Checkins] SVN: z3c.layer.pagelet/trunk/ Sets HTTP status code to 500 on system errors but only in devmode and in tests.
Michael Howitz
mh at gocept.com
Thu Feb 23 19:50:58 UTC 2012
Log message for revision 124465:
Sets HTTP status code to 500 on system errors but only in devmode and in tests.
Changed:
U z3c.layer.pagelet/trunk/CHANGES.txt
U z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/README.txt
U z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/browser/__init__.py
A z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/testing.py
A z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_exception_views.py
U z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_layer.py
-=-
Modified: z3c.layer.pagelet/trunk/CHANGES.txt
===================================================================
--- z3c.layer.pagelet/trunk/CHANGES.txt 2012-02-23 19:49:53 UTC (rev 124464)
+++ z3c.layer.pagelet/trunk/CHANGES.txt 2012-02-23 19:50:58 UTC (rev 124465)
@@ -5,7 +5,8 @@
1.9.1 (unreleased)
------------------
-- Nothing changed yet.
+- Sets HTTP status code to 500 on system errors but only in devmode and in
+ tests.
1.9.0 (2010-10-13)
Modified: z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/README.txt
===================================================================
--- z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/README.txt 2012-02-23 19:49:53 UTC (rev 124464)
+++ z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/README.txt 2012-02-23 19:50:58 UTC (rev 124465)
@@ -145,9 +145,12 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
And check error view registred for
-``zope.interface.common.interfaces.IException``:
+``zope.interface.common.interfaces.IException``, it sets the HTTP status
+code to 500 if called during tests or if development mode is switched on:
>>> manager.open(skinURL + '/@@systemerror.html')
+ Traceback (most recent call last):
+ HTTPError: HTTP Error 500: Internal Server Error
>>> print manager.contents
<!DOCTYPE...
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Modified: z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/browser/__init__.py
===================================================================
--- z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/browser/__init__.py 2012-02-23 19:49:53 UTC (rev 124464)
+++ z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/browser/__init__.py 2012-02-23 19:50:58 UTC (rev 124465)
@@ -15,20 +15,38 @@
$Id: __init__.py 97 2007-03-29 22:58:27Z rineichen $
"""
-import zope.interface
-import zope.component
+from z3c.layer.pagelet import interfaces
import z3c.pagelet.browser
import z3c.template.interfaces
import zope.authentication.interfaces
+import zope.component
+import zope.interface
-from z3c.layer.pagelet import interfaces
+def inDevMode():
+ """Are we are running in debug mode? Can error messages be more telling?"""
+ try:
+ from zope.app.appsetup.appsetup import getConfigContext
+ except ImportError:
+ # We are outside a Zope 3 context, so let's play safe:
+ return False
+ config_context = getConfigContext()
+ if config_context is None:
+ # We are probably inside a test:
+ return True
+ return config_context.hasFeature('devmode')
+
class SystemErrorPagelet(z3c.pagelet.browser.BrowserPagelet):
"""SystemError pagelet."""
zope.interface.implements(interfaces.ISystemErrorPagelet)
+ def update(self):
+ if inDevMode():
+ self.request.response.setStatus(500)
+
+
def isSystemError(self):
return True
Copied: z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/testing.py (from rev 124462, z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_layer.py)
===================================================================
--- z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/testing.py (rev 0)
+++ z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/testing.py 2012-02-23 19:50:58 UTC (rev 124465)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# Copyright (c) 2007-2009, 2012 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 97 2007-03-29 22:58:27Z rineichen $
+"""
+
+import z3c.layer.pagelet.tests
+import zope.app.wsgi.testlayer
+import zope.testing.renormalizing
+
+
+TestLayer = zope.app.wsgi.testlayer.BrowserLayer(z3c.layer.pagelet.tests)
Added: z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_exception_views.py
===================================================================
--- z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_exception_views.py (rev 0)
+++ z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_exception_views.py 2012-02-23 19:50:58 UTC (rev 124465)
@@ -0,0 +1,57 @@
+##############################################################################
+#
+# Copyright (c) 2012 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+import os
+import tempfile
+import unittest
+import z3c.layer.pagelet.testing
+
+
+class SystemErrorTests(unittest.TestCase):
+
+ layer = z3c.layer.pagelet.testing.TestLayer
+
+ def setUp(self):
+ fd, self.zcml_file = tempfile.mkstemp('.zcml')
+ zcml = os.fdopen(fd, 'w')
+ zcml.write('''<configure />''')
+ zcml.close()
+
+ def tearDown(self):
+ from zope.app.appsetup import appsetup
+ os.unlink(self.zcml_file)
+ appsetup.reset()
+
+ def callVUT(self):
+ from z3c.layer.pagelet.browser import SystemErrorPagelet
+ from zope.publisher.browser import TestRequest
+ view = SystemErrorPagelet(None, TestRequest())
+ view.update()
+ return view
+
+ def test_does_not_set_HTTP_500_if_devmode_is_not_set(self):
+ from zope.app.appsetup import appsetup
+ appsetup.config(self.zcml_file, ())
+ view = self.callVUT()
+ self.assertEqual(599, view.request.response.getStatus())
+
+ def test_sets_HTTP_500_if_config_context_is_empty(self):
+ view = self.callVUT()
+ self.assertEqual(500, view.request.response.getStatus())
+
+ def test_sets_HTTP_500_if_devmode_is_set(self):
+ from zope.app.appsetup import appsetup
+ appsetup.config(self.zcml_file, ('devmode',))
+ view = self.callVUT()
+ self.assertEqual(500, view.request.response.getStatus())
+
Property changes on: z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_exception_views.py
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Modified: z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_layer.py
===================================================================
--- z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_layer.py 2012-02-23 19:49:53 UTC (rev 124464)
+++ z3c.layer.pagelet/trunk/src/z3c/layer/pagelet/tests/test_layer.py 2012-02-23 19:50:58 UTC (rev 124465)
@@ -18,14 +18,10 @@
import doctest
import re
import unittest
-import z3c.layer.pagelet.tests
-import zope.app.wsgi.testlayer
+import z3c.layer.pagelet.testing
import zope.testing.renormalizing
-TestLayer = zope.app.wsgi.testlayer.BrowserLayer(z3c.layer.pagelet.tests)
-
-
checker = zope.testing.renormalizing.RENormalizing([
(re.compile(r'httperror_seek_wrapper:', re.M), 'HTTPError:'),
])
@@ -33,9 +29,10 @@
def create_suite(*args, **kw):
kw['optionflags'] = doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
- kw['globs'] = dict(getRootFolder=TestLayer.getRootFolder)
+ kw['globs'] = dict(
+ getRootFolder=z3c.layer.pagelet.testing.TestLayer.getRootFolder)
suite = doctest.DocFileSuite(*args, **kw)
- suite.layer = TestLayer
+ suite.layer = z3c.layer.pagelet.testing.TestLayer
return suite
More information about the checkins
mailing list