[Zope3-Users] Traversing a Tuple Field

Johan Carlsson johanc at easypublisher.com
Wed Oct 26 05:55:28 EDT 2005


Johan Carlsson wrote:
> Hi all,
> 
> I have a schema that defines a tuple field that holds object field
> of a specific type.
> Now I want to be able to traverse each object in the tuple
> by using ./<field_name>/<index>.
> 
>  From the Zope3 book I've learn how to create a Traverser (by 
> subclassing the ContainerTraverser) but my problem is that the first name
> encountered is the field_name, but I can't return the tuple (or)
> because it's a simple object not aware of location (that would be
> fixable I guess, I've seen a LocationProxy somewhere).
> Instead I return the context, which has the effect that the
> Traverser gets called again (with the index), but I can't figure
> out how to save the state, that the <field_name> has already been
> traverser, so I'd know that the index should be look up on the field_name.
> 
> Are there anyway to know which part of the URL that has been traverse,
> or to traverse ahead in the first call to the Traverser?
> 
> Any advice on this problem?

Yes (found it, after I though of revisit the Life of a Request).

The request object uses to attribute to track the traversal
(well three actually (_last_obj_traversed too), but who's counting ;-)

request._traversal_stack, that holds the names to be traversed (reversed)
request._traversed_names, that holds the names that have been (or is 
being) traversed (current name is last).

That means I can just pop the last item in _traversal_stack and
push it on to _traversed_names, use it to locate my object in
the tuple and return it to the called :-)

-- 
Johan Carlsson          Tel: + 46 8 31 24 94
Colliberty              Mob: + 46 70 558 25 24
Torsgatan 72            Email: johanc at easypublisher.com
SE-113 37 STOCKHOLM



More information about the Zope3-users mailing list