[Zope] Storing Persistent Objects as keys in BTrees
Thomas Guettler
zopestoller@thomas-guettler.de
Fri, 08 Feb 2002 09:06:30 +0100
Thomas Guettler wrote:
> Hi have problem that appears at random:
>
> I store Persistent Objects (inherited from a Zope Folder) as keys in a
> OOBTree.
> I developed something like mxmRelation
> (http://www.zope.org/Members/maxm/productList/mxmRelations)
>
> It is strange: I get "r" from the keys of the hash, but if I try to
> get it from the hash it fails.
> This only happens sometimes.
>
> def tostring(self):
> "return string of the relations"
> result={}
> for r in self._tree.keys():
> result[r]=[]
> hash_back=self._tree.get(r, None)
> if hash_back==None:
> print "tostring(): ", r
> raise Exception, "Internal Error ???"
> return
> for r2 in hash_back.keys():
> result[r].append(r2)
> return result
>
> It is a single threaded application
Solution:
BTrees compare the keys of the objects. This means you have to use keys
which can be compared to each other. Since you need to have
a __cmp__() method for all objects which can compare all objects with
each other
it is easier to change the application design and use only one type of
object as key.
See zodb-dev's thread of this week titled "OOBTree: Persistent Objects
as keys"
thomas