[Zope] persistence and dictionaries
Matt
matt.bion@eudoramail.com
Sun, 10 Dec 2000 10:08:21 +1300
This makes sense with some of my experimentation. So I am correct to assume now
that any member classes that I include into my Product that don't themselves
derive from Persistence.Persistent will become pickled into my products pickle,
and will do whenever __setattr__ method of my product is called.
I am wondering if this also answers my question in my very last email titled Re:
[Zope] persistence and dictionaries - new light .... where I found that anything
called within my manage_edit(self, title, REQUEST=None) method was persisted, but
that if I did the same things in another method(also in the Product) and called
that method from a dtmlMethod then things would not be persisted.
thanks for all the help from everyone, this is really invaluable.
regards
Matt
Tres Seaver wrote:
> Matt <matt.bion@eudoramail.com> wrote:
> >
> > Chris, this was my original confusion .... the two places below where you say
> >
> > "You can put instances which do not inherit from Persistence.Persistent in
> > your database. They just won't "stick". They'll hang around until the
> > server is restarted or for an undetermined amount of time during normal
> > operations."
> >
> > "No. It'll work for "a while" or until the server is restarted. :-)"
> >
> > actually do persist after restarts ... that's what confused me, they wouldn't
> > go away and they should!!
>
> I think that the confusion here lies in the word, "Peristent".
>
> Because it uses the standard Python pickling mechanism, the ZODB
> can store all kinds of objects (integers, strings, etc., as well
> as class instances). The ZODB is, however, broken up into a
> collection of individual records, each of which contains a
> series of pickles (one per transaction). Objects which are not
> "ZODB aware" get stored in the pickle of their container (actually,
> the nearest one which *is* persistence-aware).
>
> Deriving your class from Persistence.Persistent says to the
> ZODB, "put me in my *own* pickle, not it the pickle of my container".
>
> The other thing Persistence does is hook the '__setattr__' method,
> so that changes you make to the object's attributes automatically
> register it with Zope's transaction machinery; this registration
> means that a new pickle gets saved to the ZODB at the end of the
> transaction. Objects which do not derive from Persistence must
> handle this registration themselves, or else risk having such
> changes be lost whenever they are reloaded.
>
> Globals.PersistentDictionary is a wrapper class which does does
> this kind of registration in its '__setitem__' method.
>
> HTH,
>
> Tres.
> --
> ===============================================================
> Tres Seaver tseaver@digicool.com
> Digital Creations "Zope Dealers" http://www.zope.org
>
> _______________________________________________
> Zope maillist - Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> ** No cross posts or HTML encoding! **
> (Related lists -
> http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope-dev )