[Checkins] SVN: zope.publisher/branches/3.4/src/zope/publisher/ Better fix for LP #98440 (BrowserRequest loses its default skin on retry)

Christophe Combelles ccomb at free.fr
Thu Aug 28 16:58:26 EDT 2008


Log message for revision 90561:
  Better fix for LP #98440 (BrowserRequest loses its default skin on retry)
  

Changed:
  U   zope.publisher/branches/3.4/src/zope/publisher/http.py
  U   zope.publisher/branches/3.4/src/zope/publisher/tests/test_baserequest.py

-=-
Modified: zope.publisher/branches/3.4/src/zope/publisher/http.py
===================================================================
--- zope.publisher/branches/3.4/src/zope/publisher/http.py	2008-08-28 20:24:41 UTC (rev 90560)
+++ zope.publisher/branches/3.4/src/zope/publisher/http.py	2008-08-28 20:58:25 UTC (rev 90561)
@@ -28,6 +28,7 @@
 from zope import component, interface, event
 from zope.deprecation import deprecation
 
+import zope.publisher
 from zope.publisher import contenttype
 from zope.publisher.interfaces.http import IHTTPCredentials
 from zope.publisher.interfaces.http import IHTTPRequest
@@ -37,6 +38,7 @@
 from zope.publisher.interfaces.http import IResult
 
 from zope.publisher.interfaces import Redirect
+from zope.publisher.interfaces.browser import IBrowserRequest
 from zope.publisher.interfaces.http import IHTTPResponse
 from zope.publisher.interfaces.http import IHTTPApplicationResponse
 from zope.publisher.interfaces.logginginfo import ILoggingInfo
@@ -446,8 +448,10 @@
             environ=self._orig_env,
             response=self.response.retry(),
             )
-        # restore the interfaces
-        interface.alsoProvides(request, interface.providedBy(self))
+        # restore the default skin
+        if IBrowserRequest.providedBy(self):
+            # only browser requests have skins
+            zope.publisher.browser.setDefaultSkin(request)
 
         request.setPublication(self.publication)
         request._retry_count = self._retry_count

Modified: zope.publisher/branches/3.4/src/zope/publisher/tests/test_baserequest.py
===================================================================
--- zope.publisher/branches/3.4/src/zope/publisher/tests/test_baserequest.py	2008-08-28 20:24:41 UTC (rev 90560)
+++ zope.publisher/branches/3.4/src/zope/publisher/tests/test_baserequest.py	2008-08-28 20:58:25 UTC (rev 90561)
@@ -28,6 +28,7 @@
 
 from StringIO import StringIO
 from zope.interface import Interface, providedBy, alsoProvides
+from zope.component import provideAdapter
 
 class TestBaseRequest(BaseTestIPublicationRequest,
                       BaseTestIApplicationRequest,
@@ -92,29 +93,28 @@
 
     def test_retry_keeps_everything(self):
         """lowlevel test for retry (see #98440)"""
+        from zope.publisher.browser import TestRequest, setDefaultSkin
+        from zope.publisher.interfaces.browser import IDefaultSkin, IBrowserRequest
         # create a retryable request
-        from zope.publisher.browser import TestRequest
         request = TestRequest()
         self.assertTrue(request.supportsRetry())
-        # add an interface (this can be a layer)
-        class ISomeInterface(Interface):
+        # create a skin and register it as the default skin
+        class ISomeSkin(Interface):
             pass
-        alsoProvides(request, ISomeInterface)
+        provideAdapter(ISomeSkin, (IBrowserRequest,), IDefaultSkin)
+        # set the default skin for the request
+        setDefaultSkin(request)
+
         # create a retried request
         retried = request.retry()
 
         # the requests are not the same
         self.assertTrue(request is not retried)
-        # the requests have the same attribute list
-        self.assertEqual(dir(request), dir(retried))
-        # the requests have the same interfaces
-        request_interfaces = sorted(list(providedBy(request)))
-        retried_interfaces = sorted(list(providedBy(retried)))
-        self.assertTrue(ISomeInterface.providedBy(retried))
+        # the requests both provide the default skin
+        self.assertTrue(ISomeSkin.providedBy(request))
+        self.assertTrue(ISomeSkin.providedBy(retried))
 
-        self.assertEqual(request_interfaces, retried_interfaces)
 
-
 def test_suite():
     return makeSuite(TestBaseRequest)
 



More information about the Checkins mailing list