Re: Changes to ZPublisher

Chris McDonough <[email protected]>
Newsgroups gmane.comp.web.zope.coders
Message-ID <1097083840.15156.43.camel@athlon>
On Wed, 2004-10-06 at 13:06, Sidnei da Silva wrote:
> On Wed, Oct 06, 2004 at 12:54:14PM -0400, Chris McDonough wrote:
> | > I suppose you are referring to the stuff below here.
> | 
> | It appears I misread this; you don't do getattr or getitem when you get
> | an AttributeError/KeyError from __bt__, that's good.
> 
> I actually do right now, but I feel it's wrong. ZPublisher didn't do
> it before. If you say not doing it is good, then I'm surely removing
> it.
> 
> | > The intention here is not introduce anything new, but to traversal
> | > using __bobo_traverse__ behave the same way as attribute traversal
> | > with regards to exceptions raised.
> | 
> | I guess the difference is that the publisher is trying to catch
> | AttreibuteError/KeyError/TypeError/IndexError as a result of its own
> | operations to *get* the object.  I don't think it was ever intended that
> | if you raise an AttributeError/KeyError from app code (implemented, in
> | this case, in __bt__) that it would have the side effect of causing a
> | NotFoundError.  I know that's the effect of the current code, but I
> | really don't think that when the Publisher was implemented that this was
> | ever considered.
> 
> The main reasoning for all of this was that:
> 
> - __bt__ exceptions would pass by unmodified on ZPublisher
> - so we thought raising NotFound from __bt__ would be fine
> - but then it broke PageTemplates.Expressions (SubPathExpression)
>   because it doesn't expect a NotFound

Yup got it so far.

> - raising AttributeError copes well with PageTemplates.Expressions
> - but in the case of ZPublisher it should really be NotFound, as it is
>   really coming from the browser, and not trying to find an attribute
>   in application code

But isn't __bt__ "application code"?  Maybe not.  Maybe that's what I'm
stuck on.

IMO, we should really have a sentinel exception to indicate something
that should be raised up to the publisher and which should cause a not
found error (something with the same "punch up through the stack"
semantics as ConflictError, IOW).  But I realize we don't have that now
for __getitem__/__getattr__ and things still appear to work ok, so maybe
I'm just being dogmatic about it.

> - Tres said that NotFound should not be raised by application code,
>   but only by ZPublisher.

Agreed.  Although, maybe in the case of __bt__, you could bend this
rule?  I really don't know what the right answer is.

> So, just to clarify, are you ok with converting the
> AttributeError/KeyError to NotFound on ZPublisher and not trying to
> fallback to __getattr__/__getitem__?

I guess I'd be -0 on it given this explanation of the problem you're
trying to solve.

- C
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.