[Zope3-Users] Seeking Explicit Acquisition Support re Climbing
	Containment Hierarchy
    Jeff Rush 
    jeff at taupro.com
       
    Thu Apr  6 03:18:36 EDT 2006
    
    
  
Michael Howitz wrote:
> Am Mittwoch, den 05.04.2006, 09:36 -0500 schrieb Jeff Rush:
> 
>>I know that Zope3 dropped 'implicit' acquisition, but is there any support for 
>>*explicit* acquisition that walks the __parent__ containment hierarchy. 
>>Something that follows the same rules as traverse() to look up a name, but 
>>from bottom-to-top instead of traverse() from top-to-bottom?
> 
> for a project we wrote the following function. It climbes up the
> conatinment hierachy until it finds an object which implements the given
> interface.
<snip function source>
Thanks Michael for the function.  It seems very useful and I'll add it to my 
toolkit.
Jürgen made me aware of the ++acquire++NAME pathing and I've come up with a 
solution using that approach.
I have three levels of containers; ventures, ledgers, entries.
When producing views of ledgers, I wanted to be able to display the venture's 
name, "context/venture/legalname", and when displaying a ledger entry, the 
ledger's description, "context/ledger/desc".
By adding to my venture class,
   def venture(self):
       return self
And to the ledger class,
   def ledger(self):
       return self
I am now able to do things like:
   <span tal:content="context/++acquire++venture/legalname" />
and
   <span tal:content="context/++acquire++/ledger/desc" />
It might be interesting to add your function as a namespace, and do:
   <span tal:content="context/++interface++IVenture/legalname" />
Your approach is more general, not requiring the building in of support for 
"return self" in each container class.
-Jeff
    
    
More information about the Zope3-users
mailing list