[Zope-dev] __del__
Chris McDonough
chrism@digicool.com
Mon, 18 Sep 2000 18:10:39 -0400
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