On 22 Jun 2006, at 14:43, Tres Seaver wrote:
Philipp von Weitershausen wrote:
Dieter Maurer wrote:
Florent Guillaume wrote at 2006-6-18 02:05 +0200:
            if hasattr(object,'__bobo_traverse__'):
                subobject=object.__bobo_traverse__(request, name)
If you are working on it, then you should implement a
means that "__bobo_traverse__" can tell the caller that
it should use the normal default.

This feature makes lots of "__bobo_traverse__" implementations
much saner. A prominent example is the Archetypes' one.

In our private Zope version, I have used an exception
("UseTraversalDefault") for this purpose.

I think that __bobo_traverse__ can raise AttributeError currently to
indicate that it has failed to look up an attribute and that traversal
should try other options. Apart from being a more explicit spelling,
what advantage would UseTraversalDefault have?

The contract for '__bobo_traverse__' is actually insane on this point,
becuase it has to serve two "masters":

  - In publishing traversal, an AttributeErrror raised from
    '__bobo_traverse__' has the semantics you describe.

  - In '{un,}restrictedTraverse', an AtttributeError causes the whole
    traversal process to abort, returning the 'default' value (if
    passed), or raising.

Fixing this incompatibility without breaking applications which may be
unknowingling dependent on it is going to be hard.

Which is one of the reasons why abandoning it and moving on to Zope 3 traversal is the only sane way to proceed :)

Abandon = deprecate, yes :)


Florent Guillaume, Nuxeo (Paris, France)   Director of R&D
+33 1 40 33 71 59   http://nuxeo.com   [EMAIL PROTECTED]

Zope-Dev maillist  -  Zope-Dev@zope.org
**  No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to