I'd like to wrap a bit of code around every request. It should look like:
save some stuff
process request
do something to session based on saved stuff
save session
If I put this into process_request, I'm too late to save the session.
If I put it around try_publish I'm still too late because
finish_successful_request is called before try_publish exits. It
makes more sense to me to pull finish_successful_request out of
try_publish and stick it in process_request, like so:
*** publish.py.old 2005-09-09 15:37:34.000000000 -0700
--- publish.py 2005-09-09 15:39:52.000000000 -0700
***************
*** 250,259 ****
assert path[:1] == '/'
# split path into components
path = path[1:].split('/')
! output = self.root_directory._q_traverse(path)
! # The callable ran OK, commit any changes to the session
! self.finish_successful_request()
! return output
def filter_output(self, request, output):
"""Hook for post processing the output. Subclasses may wish to
--- 250,256 ----
assert path[:1] == '/'
# split path into components
path = path[1:].split('/')
! return self.root_directory._q_traverse(path)
def filter_output(self, request, output):
"""Hook for post processing the output. Subclasses may wish to
***************
*** 279,284 ****
--- 276,284 ----
except:
# Some other exception, generate error messages to the logs, etc.
output = self.finish_failed_request()
+ else:
+ # The callable ran OK, commit any changes to the session
+ self.finish_successful_request()
output = self.filter_output(request, output)
self.logger.log_request(request, start_time)
if output:
This puts the three "post request" methods in one place and
incidentally lets me wrap try_publish and do "pre-post request" stuff
there.