Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
139
Merge Requests
139
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
nexedi
erp5
Commits
4371d5c8
Commit
4371d5c8
authored
Mar 04, 2019
by
Bryton Lacquement
🚪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Localizer: update the 'Global Request' monkey-patch to support WSGIPublisher
parent
59212692
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
34 deletions
+33
-34
product/Localizer/patches.py
product/Localizer/patches.py
+33
-34
No files found.
product/Localizer/patches.py
View file @
4371d5c8
...
...
@@ -28,7 +28,7 @@ from .itools.i18n import AcceptLanguageType
# Import from Zope
import
Globals
from
ZPublisher
import
Publish
from
ZPublisher
import
Publish
,
WSGIPublisher
from
ZPublisher.HTTPRequest
import
HTTPRequest
...
...
@@ -65,45 +65,44 @@ def get_request():
"""Get a request object"""
return
_requests
.
get
(
get_ident
(),
None
)
def
new_publish
(
request
,
module_name
,
after_list
,
debug
=
0
,
zope_publish
=
Publish
.
publish
):
# Get the process id
ident
=
get_ident
()
# Add the request object to the global dictionnary
_requests_lock
.
acquire
()
try
:
_requests
[
ident
]
=
request
finally
:
_requests_lock
.
release
()
# Call the old publish
try
:
# Publish
x
=
zope_publish
(
request
,
module_name
,
after_list
,
debug
)
finally
:
# Remove the request object.
# When conflicts occur the "publish" method is called again,
# recursively. In this situation the "_requests dictionary would
# be cleaned in the innermost call, hence outer calls find the
# request does not exist anymore. For this reason we check first
# wether the request is there or not.
if
ident
in
_requests
:
_requests_lock
.
acquire
()
try
:
del
_requests
[
ident
]
finally
:
_requests_lock
.
release
()
return
x
def
get_new_publish
(
zope_publish
):
def
publish
(
request
,
*
args
,
**
kwargs
):
# Get the process id
ident
=
get_ident
()
# Add the request object to the global dictionnary
with
_requests_lock
:
_requests
[
ident
]
=
request
# Call the old publish
try
:
# Publish
return
zope_publish
(
request
,
*
args
,
**
kwargs
)
finally
:
# Remove the request object.
# When conflicts occur the "publish" method is called again,
# recursively. In this situation the "_requests dictionary would
# be cleaned in the innermost call, hence outer calls find the
# request does not exist anymore. For this reason we check first
# wether the request is there or not.
if
ident
in
_requests
:
with
_requests_lock
:
del
_requests
[
ident
]
return
publish
if
patch
is
False
:
logger
.
info
(
'Install "Globals.get_request".'
)
# Apply the patch
Publish
.
publish
=
new_publish
Publish
.
publish
=
get_new_publish
(
Publish
.
publish
)
WSGIPublisher
.
publish
=
get_new_publish
(
WSGIPublisher
.
publish
)
# Update WSGIPublisher.publish_module.__defaults__, otherwise it will use
# the unpatched WSGIPublisher.publish.
WSGIPublisher
.
publish_module
.
__defaults__
=
(
WSGIPublisher
.
publish
,
)
+
WSGIPublisher
.
publish_module
.
__defaults__
[
1
:]
# First import (it's not a refresh operation).
# We need to apply the patches.
...
...
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