[Zope] Re: Acquisition not working for me
Tres Seaver
tseaver at zope.com
Tue Sep 28 09:18:40 EDT 2004
Jim Anderson wrote:
>
> Hi Tres,
>
> Thank you for the advice. Unfortunately, in Zope 2.7.1, in ObjectManager.py
> there is no method named getObject(). I searched for getObject in other
> files, but only got a hit in App/Extensions.py which does not seem
> appropropriate.
> In ObjectManager, I also found the method _getOb(), but I'm not sure
> on the wisdom of using this method.
>
> I do have a simple work around that is not too elegant, but will work,
> so please don't spend much time on this issue. However, if you have
> a quick response, please let me know since your solution would be
> of more general use to me in the future.
>
> Jim
>
>
> Tres Seaver wrote:
>
>> Jim Anderson wrote:
>>
>>> I have a problem working with acquisition. I'm working with
>>> python classes in Zope 2.7.1. These class are zope objects.
>>>
>>> My class structure has class F derived from Folder
>>> and class I derived from SimpleItem.
>>>
>>> An instance of I is created in class F and then
>>> a call to setObject is made with the id and handle
>>> to the instance of I.
>>>
>>> When I bring up zope, the instance of I shows up
>>> in the folder, as expected.
>>>
>>> However, if I execute self.absolute_url_path()
>>> in I, it does not return a full path, only the id
>>> of the instance object. When I step through
>>> the absolute_url_path source code, I find that
>>> the instance of I does not have an attribute
>>> for self.aq_parent. I was surprised at this because
>>> I is a SimpleItem which in turn is derived
>>> from Acquisition.
>>>
>>> Am I mistaken in my expectation that instance
>>> I would have an aq_parent that is the folder that
>>> contains it?
>>
>>
>>
>> It sounds as though you still have the original, unwrapped I object.
>> You neet to get your I object back out of your F folder *after*
>> storing it. E.g.:
>>
>> f = F(...)
>> i = I(...)
>> f._setObject('name', i)
>> i = f.getObject('name) # now it is wrapped
Sorry, that should be:
i = f._getOb('name')
That is the canonical way to fetch an item from an ObjectManager.
Tres.
--
===============================================================
Tres Seaver tseaver at zope.com
Zope Corporation "Zope Dealers" http://www.zope.com
More information about the Zope
mailing list