[Zope-dev] Removing the acquisition wrapper from an
object(Python script)
Jeffrey P Shell
jeffrey@cuemedia.com
Mon, 05 Aug 2002 11:35:08 -0600
On 8/4/02 2:15 PM, "Dieter Maurer" <dieter@handshake.de> wrote:
> Adrian Hungate writes:
>> Why do you say it will not always work?
>> What situations might cause it not to work (Assuming that we already know
>> that the object is acquisition wrapped?)
> You may want to read the "Acquisition" section of
>
> <http://www.dieter.handshake.de/pyprojects/zope/book/chap3.html>
>
> You will learn that acquisition wrappers have two components: "aq_self"
> and "aq_parent", and that an implicit acquisition wrapper first
> asks "aq_self" and, if unsuccessful, automatically asks "aq_parent"
> for an attribute lookup, while an explicit wrapper only asks "aq_self".
>
> With these explanations you will understand that "hasattr(obj.aq_explicit,*)"
> is equivalent to "hasattr(obj.aq_base,*)" iff "obj.aq_self" is not
> itself acquisition wrapped.
There is also the 'Acquisition' module, which is full of helpful functions
that are preferred over going after attributes:
Acquisition.aq_base(obj)
It deals nicely with unwrapped objects in a cleaner way than the
hasattr/getattr combos, and also introduces a powerful 'aq_acquire' function
which can be used for fine control.
It's documented in:
http://www.zope.org//Members/michel/Projects/Interfaces/AcquisitionModuleInt
erface
--
Jeffrey P Shell
www.cuemedia.com