[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