# -*- coding: utf-8 -
#
# This file is part of gaffer. See the NOTICE for more information.
import signal
import pyuv
[docs]class BaseSigHandler(object):
""" A simple gaffer application to handle signals """
QUIT_SIGNALS = (signal.SIGQUIT, signal.SIGTERM, signal.SIGINT)
def __init__(self):
self._sig_handlers = []
[docs] def start(self, loop):
self.loop = loop
# quit signals handling
for signum in self.QUIT_SIGNALS:
self._start_signal(self.handle_quit, signum)
# reload signal
self._start_signal(self.handle_reload, signal.SIGHUP)
def _start_signal(self, callback, signum):
h = pyuv.Signal(self.loop)
h.start(callback, signum)
h.unref()
self._sig_handlers.append(h)
[docs] def stop(self):
for h in self._sig_handlers:
try:
h.stop()
except:
pass
[docs] def restart(self):
# we never restart, just return
return
[docs] def handle_quit(self, handle, signum):
raise NotImplementedError
[docs] def handle_reload(self, handle, signum):
raise NotImplementedError
[docs]class SigHandler(BaseSigHandler):
""" A simple gaffer application to handle signals """
[docs] def start(self, loop, manager):
self.manager = manager
super(SigHandler, self).start(loop)
[docs] def handle_quit(self, handle, *args):
self.manager.stop()
[docs] def handle_reload(self, handle, *args):
self.manager.restart()