[Zope] Re: Acquiring object from Products instances

Tille, Andreas TilleA@rki.de
Tue, 7 May 2002 09:27:01 +0200 (CEST)


On Thu, 2 May 2002, Dieter Maurer wrote:

> Luca Manini writes:
>  > I've a product that defines a classe ageForm.
>  > I've a PythonScript that adds an ageForm instance to a folder.
>  > After adding the instance it calls a method on it.
>  > This methods tries to access an objects using acquisition.
>  > ...
> Apparently, you do not tell us what your problem is...
>
> I expect, the problems cause is that constructors in Zope
> usually do not return the constructed object (but either "None"
> or the id of the constructed object).
>
> The standard idiom is:
>
>     om.manage_addProduct[<product_name>].<constructor>(id,....)
>     obj= getattr(om,id)
I tried it this way and it works perfectly if the new object is
a folder or a dtml-document, but not for a tinytable object.
A complete very simple example you can find at:

   http://www.foodborne-net.de/~tillea/MyFolder/MyFolder.tgz

The relevant part is shown here:


    ob=MyFolder()
    ob.id=str(id)
    ob.title=title
    self._setObject(id, ob)
    ob=self._getOb(id)

    checkPermission=getSecurityManager().checkPermission

### From the example ... but does not work anyway
##    ob = getattr(self, id) #we basically get the instance from the ZODB, now has AqWrapper

    ob.manage_addFolder('someid') #works as expected
    ob.manage_addTinyTable(id='link_table',
                               title='TinyTableObject for '+ob.id,
                               columns=column_names)

The last line does not work because it does not put the TinyTable object
into the new folder (where I was able to create the example folder named
'someid' but it will be created in the folder below.

Is this perhaps a TinyTable bug?

Kind regards

         Andreas.