[Checkins] SVN: zope.publisher/trunk/src/zope/publisher/ Fixed ##98413: HTTPResponse.handleException should set the content type

Dmitry Vasiliev dima at hlabs.spb.ru
Wed May 16 06:14:10 EDT 2007


Log message for revision 75799:
  Fixed ##98413: HTTPResponse.handleException should set the content type

Changed:
  U   zope.publisher/trunk/src/zope/publisher/http.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_browserresponse.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_http.py

-=-
Modified: zope.publisher/trunk/src/zope/publisher/http.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/http.py	2007-05-16 10:09:46 UTC (rev 75798)
+++ zope.publisher/trunk/src/zope/publisher/http.py	2007-05-16 10:14:09 UTC (rev 75799)
@@ -53,6 +53,8 @@
 # Default Encoding
 ENCODING = 'UTF-8'
 
+eventlog = logging.getLogger('eventlog')
+
 class CookieMapper(RequestDataMapper):
     _mapname = '_cookies'
 
@@ -77,9 +79,9 @@
 
 class HTTPVirtualHostChangedEvent(object):
     interface.implements(IHTTPVirtualHostChangedEvent)
-    
+
     request = None
-    
+
     def __init__(self, request):
         self.request = request
 
@@ -395,8 +397,7 @@
         try:
             c = SimpleCookie(text)
         except CookieError, e:
-            log = logging.getLogger('eventlog')
-            log.warn(e)
+            eventlog.warn(e)
             return result
 
         for k,v in c.items():
@@ -832,14 +833,13 @@
         self.setStatus(tname)
 
         body = self._html(title, "A server error occurred." )
+        self.setHeader("Content-Type", "text/html")
         self.setResult(body)
 
-
     def internalError(self):
         'See IPublisherResponse'
         self.setStatus(500, u"The engines can't take any more, Jim!")
 
-
     def _html(self, title, content):
         t = escape(title)
         return (
@@ -850,14 +850,12 @@
             (t, t, content)
             )
 
-
     def retry(self):
         """
         Returns a response object to be used in a retry attempt
         """
         return self.__class__()
 
-
     def redirect(self, location, status=None):
         """Causes a redirection without raising an error"""
         if status is None:
@@ -877,8 +875,7 @@
         try:
             c = SimpleCookie()
         except CookieError, e:
-            log = logging.getLogger('eventlog')
-            log.warn(e)
+            eventlog.warn(e)
             return []
         for name, attrs in self._cookies.items():
             name = str(name)

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_browserresponse.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_browserresponse.py	2007-05-16 10:09:46 UTC (rev 75798)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_browserresponse.py	2007-05-16 10:14:09 UTC (rev 75799)
@@ -16,10 +16,16 @@
 $Id$
 """
 
+import sys
 from unittest import TestCase, TestSuite, main, makeSuite
 from zope.publisher.browser import BrowserResponse
 from zope.interface.verify import verifyObject
 
+from zope.publisher.interfaces.http import IHTTPResponse
+from zope.publisher.interfaces.http import IHTTPApplicationResponse
+from zope.publisher.interfaces import IResponse
+
+
 # TODO: Waaa need more tests
 
 class TestBrowserResponse(TestCase):
@@ -125,21 +131,36 @@
             int(response.getHeader('content-length')),
             len(html_page) + len(inserted_text))
 
-
     def test_interface(self):
-        from zope.publisher.interfaces.http import IHTTPResponse
-        from zope.publisher.interfaces.http import IHTTPApplicationResponse
-        from zope.publisher.interfaces import IResponse
         rp = BrowserResponse()
         verifyObject(IHTTPResponse, rp)
         verifyObject(IHTTPApplicationResponse, rp)
         verifyObject(IResponse, rp)
 
+    def test_handleException(self):
+        response = BrowserResponse()
+        try:
+            raise ValueError(1)
+        except:
+            exc_info = sys.exc_info()
 
+        response.handleException(exc_info)
+        self.assertEquals(response.getHeader("content-type"),
+            "text/html;charset=utf-8")
+        self.assertEquals(response.getStatus(), 500)
+        self.assertEquals(response.consumeBody(),
+            "<html><head><title>ValueError</title></head>\n"
+            "<body><h2>ValueError</h2>\n"
+            "A server error occurred.\n"
+            "</body></html>\n"
+            )
+
+
 def test_suite():
     return TestSuite((
         makeSuite(TestBrowserResponse),
         ))
 
+
 if __name__=='__main__':
     main(defaultTest='test_suite')

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_http.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_http.py	2007-05-16 10:09:46 UTC (rev 75798)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_http.py	2007-05-16 10:14:09 UTC (rev 75799)
@@ -16,6 +16,8 @@
 
 $Id$
 """
+
+import sys
 import unittest
 from zope.testing import doctest
 import zope.testing.cleanup
@@ -650,9 +652,29 @@
         self.failUnless('foo=bar;' in c)
         self.failIf('secure' in c)
 
+    def test_handleException(self):
+        response = HTTPResponse()
+        try:
+            raise ValueError(1)
+        except:
+            exc_info = sys.exc_info()
+
+        response.handleException(exc_info)
+        self.assertEquals(response.getHeader("content-type"),
+            "text/html;charset=utf-8")
+        self.assertEquals(response.getStatus(), 500)
+        self.assertEquals(response.consumeBody(),
+            "<html><head><title>ValueError</title></head>\n"
+            "<body><h2>ValueError</h2>\n"
+            "A server error occurred.\n"
+            "</body></html>\n"
+            )
+
+
 def cleanUp(test):
     zope.testing.cleanup.cleanUp()
 
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(ConcreteHTTPTests))



More information about the Checkins mailing list