On Thu, Jul 13, 2006 at 03:55:53PM -0400, Chris S wrote:
> not yet defined. And of course I'm not assigning to any other
> Persistent instances, since the point of the code was to show that
> Zope can't persist objects that don't inherit the Persistent class.

It can, but:

- non-Persistent objects have to be stored as attributes of
  Persistent objects.

- Modifying a mutable non-Persistent object means you have
  to either set _p_changed on the parent Persistent object,
  or re-assign the mutable to parent object.

- setting _p_changed on non-Persistent objects has no effect.

In your example, since root is the only thing Persistent,
the lines:

parent._p_changed = 1
parent.children._p_changed = 1

... have no effect.  You could instead do either of
(untested but I think these should both work):

root._p_changed = 1


setattr(root, parentName, parent)

But you don't want big chains of non-Persistent objects, it leads to
write conflict errors and unnecessary storage bloat.  Make some
Persistent wrapper classes and use them.  Use BTrees when you need a
large number of highly mutable sub-objects.


Paul Winkler
For more information about ZODB, see the ZODB Wiki:

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

Reply via email to