Commit 3c2fbcb6 authored by Bryton Lacquement's avatar Bryton Lacquement 🚪

wip

parent 7f920b14
...@@ -307,6 +307,10 @@ def transaction_pubevents(request, response, err_hook, tm=transaction.manager): ...@@ -307,6 +307,10 @@ def transaction_pubevents(request, response, err_hook, tm=transaction.manager):
del exc, exc_info del exc, exc_info
finally: finally:
endInteraction() endInteraction()
if transaction.manager._txn is not None:
# Only abort a transaction, if one exists. Otherwise the
# abort creates a new transaction just to abort it.
transaction.abort()
def publish(request, module_info): def publish(request, module_info):
...@@ -347,22 +351,6 @@ def publish(request, module_info): ...@@ -347,22 +351,6 @@ def publish(request, module_info):
return response return response
@contextmanager
def load_app(module_info):
app_wrapper, realm, debug_mode = module_info
# Loads the 'OFS.Application' from ZODB.
app = app_wrapper()
try:
yield (app, realm, debug_mode)
finally:
if transaction.manager._txn is not None:
# Only abort a transaction, if one exists. Otherwise the
# abort creates a new transaction just to abort it.
transaction.abort()
app._p_jar.close()
def publish_module(environ, start_response, def publish_module(environ, start_response,
_publish=publish, # only for testing _publish=publish, # only for testing
_response=None, _response=None,
...@@ -400,24 +388,29 @@ def publish_module(environ, start_response, ...@@ -400,24 +388,29 @@ def publish_module(environ, start_response,
environ, environ,
new_response)) new_response))
for i in range(getattr(new_request, 'retry_max_count', 3) + 1): app_wrapper, realm, debug_mode = module_info
request = new_request app = app_wrapper()
response = new_response module_info = app, realm, debug_mode
setRequest(request) try:
try: for i in range(getattr(new_request, 'retry_max_count', 3) + 1):
with load_app(module_info) as new_mod_info: request = new_request
response = new_response
setRequest(request)
try:
with transaction_pubevents(request, response, err_hook): with transaction_pubevents(request, response, err_hook):
response = _publish(request, new_mod_info) response = _publish(request, module_info)
break break
except TransientError: except TransientError:
if request.supports_retry(): if request.supports_retry():
new_request = request.retry() new_request = request.retry()
new_response = new_request.response new_response = new_request.response
else: else:
raise raise
finally: finally:
request.close() request.close()
clearRequest() clearRequest()
finally:
app._p_jar.close()
# Start the WSGI server response # Start the WSGI server response
status, headers = response.finalize() status, headers = response.finalize()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment