On Thu, 2005-10-13 at 19:04 -0400, Tim Peters wrote: > > from the connection object, > > You didn't say which version of ZODB you're using. Since you believe a > Connection keeps track of which objects have been modified, I'll assume > you're using ZODB 3.3 or later (which is either true, or your belief about > who keeps track of modified objects is false ;-)).
yup i missed this info, i'm using zodb 3.4 > > > so i overload the __setattr__ method in my base-class and keep track > > of the modified objects > > > > But that's the problem, __setattr__ is called also when ZODB loads the > > objects from the storage and reconstructs it, so is there a way to know > > the state of the object (unpickilng, modified, clean etc etc)? > > The good news is that obj._p_state reveals the current state of a persistent > object. The possible values are exposed by the `persistent` module: I see, yesterday, after my message obviously, i see the light and write this code class PersistentObject(Persistent): [... some code ...] def __setattr__(self, attr, value): if not self._p_setattr(attr, value): super(PersistentObject, self).__setattr__(attr, value) if not attr.startswith('_p_') and self._p_changed and attr! ='_Modified': self.Touch() > So, in the end, I don't see any hope for you via this route, short of this: > register an object as changed in your __setattr__ without worrying at all > about _why_ __setattr__ was called. Later, when you "do something" with > your list of modified objects, simply ignore any whose state at that time is > UPTODATE. Those are exactly the objects whose state got materialized but > didn't change thereafter. Ok, thank you for your help bye _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org http://mail.zope.org/mailman/listinfo/zodb-dev