On Thu, Sep 23, 2010 at 03:54:59PM +0200, César Muñoz wrote:
> That said, I'm having some problems when removing a chat room from the
> OOTreeSet. Sometimes (and this is weird, sometimes I may get the error, some
> others not) I get a KeyError exception when I try to remove the chat room.
> This is exactly the line that causes the problem:
> *
> root['indexByConf'][confId]['chatrooms'].remove(chatroom)*
> However, if you use the keys() method it will work, and if you use the
> operator in with a list of the OOTreeSet it will work also. Take a look at
> what I got from the interpreter:
> *
> >>chatroom*
> <MaKaC.plugins.InstantMessaging.handlers.Chatroom object at 0x22ff646c>

It sounds as if your Chatroom class doesn't implement comparison
operators (__lt__ and friends) correctly.

If you want to store objects in an OOTreeSet, those objects must
have a well-defined ordering that doesn't change when the objects are
loaded back from the ZODB and end up at a different memory address.  The
default comparison provided by Python doesn't cut it.

So: does your Chatroom define __cmp__ or __lt__, __le__, __gt__, __ge__, 
__eq__, __ne__ methods?

Marius Gedminas
Writing setattr hooks properly is a black art. Writing persistent
setattr hooks is more like hearding bees blindfolded...
        -- Casey Duncan

Attachment: signature.asc
Description: Digital signature

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to