Déplacement pour eggification.
[Plinn.git] / Products / Plinn / shutdown_dispatcher.py
diff --git a/Products/Plinn/shutdown_dispatcher.py b/Products/Plinn/shutdown_dispatcher.py
new file mode 100755 (executable)
index 0000000..f5d778b
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+#######################################################################################
+#   Plinn - http://plinn.org                                                          #
+#   Copyright (C) 2005-2009  Benoît PIN <benoit.pin@ensmp.fr>                         #
+#                                                                                     #
+#   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