Robert Leftwich wrote:
How do I detect if an object is being deleted ? I need to detect when an object is being deleted in order to perform some clean up.
The deal is (excuse the highly imaginative names) :
Foo inherits from Bar which inherits from Folder Foo has a __del__ method which prints 'Foo is being deleted' When an instance of Foo is deleted (via manage_delObjects) I would expect __del__ to be called at some point but nothing happens.
Am I overlooking something obvious ?
No, you are unaware of something subtle. :) This is a good question BTW. The standard Python __del__ method is called whan an object is removed from memory. For non-persistent objects, this corresponds to the object's "death". Persistent objects may move in and out of memory many times in their lifetimes. (With ZODB3, they may have many copies in memory simultaneously.) In this case, __del__ has little to do with an object's life or it's connection to it's container. We just added a protocol for notifying an object when it is being deleted from an Object Manager (e.g. Folder): _on_delete_object() Object managers call this method just before deleting objects. This protocol is present in the publich CVS source and will be in the upcoming Zope 2 alpha release. (The current default implementation actually extends this protcol in a way that will certainly change, so don't pay attention to it.) Note that this method is *not* a destructor. It is only called when an object is removed from a collection. An object may be in multiple collections or referenced in other ways. Even if an object is only referenced in a collection, it is not removed from the database until the next pack. (When an object is removed from the database during packing, it's record is simply removed. No method gets called on the object. Old objects don't die, they just fade away. ;) Jim -- Jim Fulton mailto:jim@digicool.com Technical Director (540) 371-6909 Python Powered! Digital Creations http://www.digicool.com http://www.python.org Under US Code Title 47, Sec.227(b)(1)(C), Sec.227(a)(2)(B) This email address may not be added to any commercial mail list with out my permission. Violation of my privacy with advertising or SPAM will result in a suit for a MINIMUM of $500 damages/incident, $1500 for repeats.