[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