Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
d6ced29f
Commit
d6ced29f
authored
Sep 19, 2006
by
Alec Mitchell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Port ZPublisher fix from 2.9 branch r70237:70238
parent
622a423d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
65 additions
and
0 deletions
+65
-0
doc/CHANGES.txt
doc/CHANGES.txt
+3
-0
lib/python/ZPublisher/Publish.py
lib/python/ZPublisher/Publish.py
+2
-0
lib/python/ZPublisher/tests/testPublish.py
lib/python/ZPublisher/tests/testPublish.py
+60
-0
No files found.
doc/CHANGES.txt
View file @
d6ced29f
...
...
@@ -8,6 +8,9 @@ Zope Changes
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
...
...
lib/python/ZPublisher/Publish.py
View file @
d6ced29f
...
...
@@ -158,6 +158,8 @@ def publish(request, module_name, after_list, debug=0,
# 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
:
...
...
lib/python/ZPublisher/tests/testPublish.py
View file @
d6ced29f
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 @@ class Request:
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 @@ def testPublisher():
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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment