X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/3c4367d8e03450e9a73e61f4247145d2b6c86a33..959d888c17d1403d2eeecc19bc4b5e2c8d1debf6:/Products/Plinn/shutdown_dispatcher.py diff --git a/Products/Plinn/shutdown_dispatcher.py b/Products/Plinn/shutdown_dispatcher.py new file mode 100755 index 0000000..f5d778b --- /dev/null +++ b/Products/Plinn/shutdown_dispatcher.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +####################################################################################### +# Plinn - http://plinn.org # +# Copyright (C) 2005-2009 Benoît PIN # +# # +# This program is free software; you can redistribute it and/or # +# modify it under the terms of the GNU General Public License # +# as published by the Free Software Foundation; either version 2 # +# of the License, or (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program; if not, write to the Free Software # +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # +####################################################################################### +""" provides utilities to raise / handle zope server shutdown events + + + +""" + +import asyncore +from zope.event import notify +from zope.component import getSiteManager +from events import ZopeShutdownEvent +from OFS.interfaces import IApplication + +class ZopeShutdownDispatcher(asyncore.dispatcher): + + + def __init__(self, app, map=None): + asyncore.dispatcher.__init__(self, None, map) + self.connected = False + self.app = self._fileno = app + self.add_channel() + + def close(self) : + self.del_channel() + + def readable(self): + return False + + def handle_read(self): + return True + + def writable(self): + return False + + def handle_write (self): + return True + + def clean_shutdown_control(self, phase, time): + asyncore.dispatcher.log_info(self, 'zope shutdown event raised at phase: %s' % phase, 'info') + e = ZopeShutdownEvent(self.app, phase, time) + notify(e) + return e.veto