Oh I see... objects don't get __del__ or manage_beforeDelete called on them when the ZODB is shut down, this only happens when they're explicitly deleted. This is the wonder of transparent persistence :-) If you want things to happen only at Zope start and shutdown, I've had some success using an __init__.py that does things in an otherwise blank product in combination with the setting of a Python sys.exitfunc. The following __init__.py in an otherwise blank Product directory sends an email when Zope is stopped or started: import os, sys, popen2, socket prefix = "StartStopNotifier:" def stop_hook(): mailout(user, prefix, host, "Zope dev portal stop") if callable(existing_exitfunc): existing_exitfunc() def start_hook(): mailout(user, prefix, host, "Zope dev portal start") def mailout(user, prefix, host, subject): cmd="/bin/mail %s -s '%s %s %s' < /dev/null" % (user,prefix,host,subject) popen2.popen2(cmd) user = os.environ.get('STARTSTOPNOTIFY', None) if user is not None: host = socket.gethostname() existing_exitfunc = getattr(sys, 'exitfunc', None) sys.exitfunc = stop_hook start_hook() andym@ActiveState.com wrote:
I was hoping to have this method fired Zope is shut down, restarted etc and not call it implicitly. The theory being if this object is cached it will have to be unloaded at some point?
Ive used manage_beforeDelete() elsewhere and it works fine when Im destroying an object whilst ZODB is still running.
Thanks.
-- Chris McDonough Digital Creations, Publishers of Zope http://www.zope.org