[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