Syver Enstad wrote at 2004-5-28 12:41 +0200:
>I have a Persistent derived class where I want to upgrade from using a
>PersistentList to a BTrees.IOBTree.IOBTree.
>_articleList is the old Persistent list
>_oidsToArticles is the new IOBTree.
> def __setstate__(self, state):
> articleList = state.get('_articleList')
> if articleList:
> oidsToArticles = self.makeBTree()
> for each in articleList:
> oidsToArticles[each.oid()] = each
> del state['_articleList']
> state['_oidsToArticles'] = oidsToArticles
> Persistent.__setstate__(self, state)
>This seems to work fine, and I am adding more objects to
>_oidsToArticles. The problem is that when I commit the transaction,
>nothing is saved. I have tested the same code without __setstate__ and
>then it saves just fine. What hoops does one have to jump through to
>upgrade the state of a ZODB object?
This does not work as changes made in "__setstate__" are not
explicitly persisted. Whether or not they become persistent
depends on whether the object is changed again outside "__setstate__".
Use an explicit conversion script instead...
Zope-Dev maillist - [EMAIL PROTECTED]
** No cross posts or HTML encoding! **
(Related lists -