[Zope-Checkins] SVN: Zope/branches/2.10/ Port ZPublisher fix from
2.9 branch r70237:70238
Alec Mitchell
apm13 at columbia.edu
Tue Sep 19 14:29:27 EDT 2006
Log message for revision 70239:
Port ZPublisher fix from 2.9 branch r70237:70238
Changed:
U Zope/branches/2.10/doc/CHANGES.txt
U Zope/branches/2.10/lib/python/ZPublisher/Publish.py
U Zope/branches/2.10/lib/python/ZPublisher/tests/testPublish.py
-=-
Modified: Zope/branches/2.10/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.10/doc/CHANGES.txt 2006-09-19 18:15:43 UTC (rev 70238)
+++ Zope/branches/2.10/doc/CHANGES.txt 2006-09-19 18:29:25 UTC (rev 70239)
@@ -8,6 +8,9 @@
Bugs fixed
+ - Call setDefaultSkin on new requests created as the result of
+ ConflictError retries.
+
Zope 2.10.0 beta 2 (2006/09/17)
Bugs fixed
Modified: Zope/branches/2.10/lib/python/ZPublisher/Publish.py
===================================================================
--- Zope/branches/2.10/lib/python/ZPublisher/Publish.py 2006-09-19 18:15:43 UTC (rev 70238)
+++ Zope/branches/2.10/lib/python/ZPublisher/Publish.py 2006-09-19 18:29:25 UTC (rev 70239)
@@ -158,6 +158,8 @@
# Only reachable if Retry is raised and request supports retry.
newrequest=request.retry()
request.close() # Free resources held by the request.
+ # Set the default layer/skin on the newly generated request
+ setDefaultSkin(newrequest)
try:
return publish(newrequest, module_name, after_list, debug)
finally:
Modified: Zope/branches/2.10/lib/python/ZPublisher/tests/testPublish.py
===================================================================
--- Zope/branches/2.10/lib/python/ZPublisher/tests/testPublish.py 2006-09-19 18:15:43 UTC (rev 70238)
+++ Zope/branches/2.10/lib/python/ZPublisher/tests/testPublish.py 2006-09-19 18:29:25 UTC (rev 70239)
@@ -1,3 +1,5 @@
+from zope.app.publication.browser import setDefaultSkin
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
from ZPublisher import Retry
from ZODB.POSException import ConflictError
@@ -118,6 +120,14 @@
r.retry_count = self.retry_count
return r
+class RequestWithSkinCheck(Request):
+ def traverse(self, path, validated_hook):
+ if IDefaultBrowserLayer.providedBy(self):
+ return Object()
+ else:
+ tracer.exceptions['__call__'] = [ValueError]
+ return Object()
+
module_name = __name__
after_list = [None]
@@ -263,6 +273,56 @@
raising ConflictError from zpublisher_exception_hook
abort
+ The request generator applies the default skin layer to the request.
+ We have a specially crafted request that tests this. If the
+ request does not have the required interface it raises an
+ ValueError. Let's see that this works as expected
+
+ >>> tracer.reset()
+ >>> request = RequestWithSkinCheck()
+ >>> setDefaultSkin(request)
+ >>> response = publish(request, module_name, after_list)
+ >>> tracer.showTracedPath()
+ begin
+ __call__
+ commit
+
+ Retries generate new request objects, the publisher needs to
+ ensure that the skin layer is applied to those as well. If the
+ skin layer is not applied to subsequent requests, an ValueError
+ would be raised here.
+
+ >>> tracer.reset()
+ >>> tracer.exceptions['commit'] = [ConflictError, ConflictError,
+ ... ConflictError, ConflictError]
+ >>> request = RequestWithSkinCheck()
+ >>> setDefaultSkin(request)
+ >>> response = publish(request, module_name, after_list)
+ Traceback (most recent call last):
+ ...
+ ConflictError: database conflict error
+ >>> tracer.showTracedPath()
+ begin
+ __call__
+ commit
+ raising ConflictError from commit
+ abort
+ begin
+ __call__
+ commit
+ raising ConflictError from commit
+ abort
+ begin
+ __call__
+ commit
+ raising ConflictError from commit
+ abort
+ begin
+ __call__
+ commit
+ raising ConflictError from commit
+ abort
+
"""
pass
More information about the Zope-Checkins
mailing list