[Zope] __setstate__ not happening.

Dieter Maurer dieter@handshake.de
Sun, 27 Jan 2002 19:24:05 +0100


Lennart Regebro writes:
 > ....
 > I can change _object_workflow_version
 > without trouble if I do it somewhere else, but any changes to
 > _object_workflow_version or any otehr attributes I do in __setstate__
 > doesn't persist after a restart of Zope.
Interesting...

  As an optimization, Zope writes objects back to the storage
  only when it knows they have changed.
  
  "__setstate__" is called internally by the loading process.
  It is quite reasonable that Zope assumes that a freshly loaded
  object does not yet have changes. Thus, if there are no changes
  later, the object will not be written back,

  For the normal use, this should make no difference. When
  the objects are changed, they are written to the storage
  with the new attribute. When not, the new attributes are
  recreated the next time the object is loaded.

  This should make only a problem when you want to do more
  sophisticated actions (as you apparently do: --> upgradeWorkflow).
  Be aware, that what you can/should do inside "__setstate__" is
  very limited. Like in "__init__", "self" is not yet acquisition
  wrapped. It may, therefore, behave very different than is normal.

You may also consider a class attribute for providing values
for new attributes.


Dieter