Re: Re: publisher difficult to modify for sessions

Evan Laforge <[email protected]>
Newsgroups gmane.comp.web.quixote.user
Message-ID <[email protected]>
> 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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.