durusmail: quixote-users: Re: publisher difficult to modify for sessions
publisher difficult to modify for sessions
2005-09-09
Re: publisher difficult to modify for sessions
2005-09-09
2005-09-12
Re: publisher difficult to modify for sessions
Evan Laforge
2005-09-12
> Couldn't you do this by overriding _q_traverse on your root
> Directory instance?  Something like:

That's a reasonable place, but it has the same problem: I don't have
access to the output in the case of exceptions because it hasn't been
generated yet.  And in fact, I can't get the publisher to do
finish_*_request from _q_traverse().

Here's what I wound up doing looks like:

  def try_publish(self, request):
    self.start_request()
    path = request.get_environ('PATH_INFO', '')
    assert path[:1] == '/'
    # split path into components
    path = path[1:].split('/')

    try:
      output = None
      # code A, save stuff
      output = self.root_directory._q_traverse(path)
    finally:
      if output is None:
        exc_info = sys.exc_info()
        exc = exc_info[1]
        if isinstance(exc, quixote.error.PublishError):
          output = self.finish_interrupted_request(exc)
        else:
          output = self.finish_failed_request()
      output = self.filter_output(req, output)
      # code B, uses output and saved stuff
    # The callable ran OK, commit any changes to the session
    self.finish_successful_request()
    return output

Clearly, calling finish_*_request multiple times is not ideal.
reply