[Zope-dev] Re: Acquisition by context first

2000-09-15 Thread Steve Alexander

Steve Alexander wrote:
> 
> Of course, you can simplify it to:
> 
> # acquire the object of name "attr" by context alone
> def aquire_by_context(self, attr):
> ob = self
> while hasattr(ob, 'aq_base'):
> if hasattr(ob.aq_base, attr):
> return self.restrictedTraverse(
> getattr(ob.aq_base, attr).getPhysicalPath())
> ob = ob.aq_parent
> 
> # not found
> raise KeyError, attr

I should point out that this is just for finding an object by context
alone.
The context-only acquisition meme doesn't get passed on to anything that
the returned object might in turn call.

This makes this external method less useful than having a fancy
acquisition context that checks for security by containment whilst
getting attributes by context. However, such a fancy acquisition context
would be much more complex to design.

--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )




[Zope-dev] Re: Acquisition by context first

2000-09-15 Thread Steve Alexander

Steve Alexander wrote:
> 
> Here's an external method that ought to work. Well, it works for me:
> 
> # acquire the object of name "attr" by context alone
> def aquire_by_context(self, attr):
> ob = self
> while hasattr(ob, 'aq_base'):
> aq_b=getattr(ob, 'aq_base', ob)
> if hasattr(aq_b, attr):
> attr_obj = getattr(aq_b, attr)
> break;
> ob = ob.aq_parent
> else:
> # not found
> raise KeyError, attr
> return self.restrictedTraverse(attr_obj.getPhysicalPath())

I'd left some cruft in there from debugging.

Of course, you can simplify it to:

# acquire the object of name "attr" by context alone
def aquire_by_context(self, attr):
ob = self
while hasattr(ob, 'aq_base'):
if hasattr(ob.aq_base, attr):
return self.restrictedTraverse(
getattr(ob.aq_base, attr).getPhysicalPath())
ob = ob.aq_parent

# not found
raise KeyError, attr
  

--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )