[Zope] Deleting several items from BTrees

Oliver Bleutgen myzope@gmx.net
Mon, 07 Apr 2003 19:08:39 +0200


Thomas Guettler wrote:
>     * Module ZPublisher.Publish, line 98, in publish
>     * Module ZPublisher.mapply, line 88, in mapply
>     * Module ZPublisher.Publish, line 39, in call_object
>     * Module Products.OOPServer.Demo.Demo, line 200, in deleteAllObjects
>     * Module OFS.ObjectManager, line 448, in manage_delObjects
> 
> TypeError: object doesn't support item deletion
> 
> My object is inherited from the following classes: SimpleItem,
> Persistent, Implicit, CatalogAware
> 
> The container is a BTreeFolder2. 
> 
> objectIds() does not return a list, but: <OOBTreeItems object at 0x93b1a68>
> 
> BTW, the problem is not important, because my code works. I am just
> looking for cleaner solution.
> 
>  thomas

My mistake, I was looking at BTreeFolder1 at that time. I was sure that 
would work to. Arguably this is either a bug in ObjectManager or in 
BTreeFolder2 , since BTreeFolder2 doesn't return something that 
ObjectManagers manage_delObjects recognizes as sequence type. Since 
manage_delObjects wants to be smart, it also accepts single strings (in 
contrast to a sequence with a single object) as an argument. This causes 
it to try to delete an object of type "OOBTreeItems", which is what 
objectIds returns for BTreeFolder2 objects. This causes the error you see.

To make a long story short,
self.manage_delObjects(list(self.objectIds()))

works, tuple() should work, too.

cheers,
oliver