[Zope-dev] Traversal issue which affects Five

Alec Mitchell apm13 at columbia.edu
Mon Aug 21 10:22:43 EDT 2006


On 8/21/06, Lennart Regebro <regebro at gmail.com> wrote:
> On 8/20/06, Alec Mitchell <apm13 at columbia.edu> wrote:
> > On 4/17/06, Dieter Maurer <dieter at handshake.de> wrote:
> > ...
> > > In our local Zope version, I implemented a solution that is
> > > (in my opinion) superior:
> > >
> > >   Define an exception "UseTraversalDefault" that can be
> > >   used by "__bobo_traverse__" to tell the traversal process
> > >   (either URL traversal in the publisher or restricted/unrestricted/CMF
> > >   traversal) to use the default lookup.
> > >
> > > One big advantage is that e.g.
> > > "Archetypes.BaseObject.BaseObject.__bobo_traverse__" no longer
> > > need this horrible dance to decide whether it should or must
> > > not create a "NullResource".
> >
> > OK, I'm bringing an old thread back to life to propose implementing
> > this change for Zope 2.10.  It would be quite nice to get rid of this
> > "horrible dance" in the next version of Archetypes, and the change
> > would generally allow people to make simpler __bobo_traverse__ methods
> > that don't have to reimplement the traversal machinery themselves,
> > especially since the traversal machinery is a bit in flux these days.
> > Of course, if the plan is to make __bobo_traverse__ obsolete in the
> > near future (provided reasonable alternatives exist), then making it
> > nicer shouldn't really be too much of a priority.  Thoughts?
>
> Well, as I mentioned in April, i was going to in Zope 2.10 refactor
> this and get rid of five:traversable, so I asked for specific usecases
> so I could test it. No use cases popped up and the refactoring is now
> finished.
>
> What effect that has on your usecase I don't know. However, five
> objects no longer have a __bobo_traverse__ by default, which should
> make things simpler.

Indeed it does, the issue is that writing __bobo_traverse__ methods
which try to fallback on the normal traversal mechanisms has always
been a pain (you have to reimplement the normal traversal mechanisms
yourself, including some funny WebDAVisms).  If instead the
__bobo_traverse__ mechanism could explicitly tell its caller (via an
exception) to continue with the standard traversal, it would be a nice
improvement.  Of course, the real fix may be for products to stop
using __bobo_traverse__ and start sing BeforeTraverseEvent
subscribers, or IPublshTraverse adapters.  This is something I hope to
look into in the next couple days.

Alec


More information about the Zope-Dev mailing list