diff options
author | Sascha Silbe <sascha-pgp@silbe.org> | 2010-07-02 14:35:36 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha-pgp@silbe.org> | 2010-07-02 14:35:36 (GMT) |
commit | 68b57b4619fdc393a5206856502c7ca09c1acf9d (patch) | |
tree | 675d01ff92c10924002411b740e3d6daa7bf0b18 /bin |
some initial files
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/datastore-service | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/bin/datastore-service b/bin/datastore-service new file mode 100755 index 0000000..c82e92e --- /dev/null +++ b/bin/datastore-service @@ -0,0 +1,62 @@ +#!/usr/bin/env python +import logging +import os +import signal +import time + +import dbus.service +import dbus.mainloop.glib +import dbus.glib +import gobject + +import datastore + + +BASE_DIR = os.path.join(os.path.expanduser('~/.gdatastore')) +LOG_DIR = os.path.join(BASE_DIR, 'logs') + + +def handle_disconnect(mainloop): + mainloop.quit() + logging.debug('DBus disconnect') + + +def handle_signal(signal_number, mainloop): + logging.warning('Signal %d received, shutting down.', signal_number) + mainloop.quit() + + +def main(): + if not os.path.exists(LOG_DIR): + os.makedirs(LOG_DIR) + + logging.basicConfig(level=logging.WARN, + format='%(asctime)-15s %(name)s %(levelname)s: %(message)s', + filename='%s/%d.log' % (LOG_DIR, time.time())) + + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + bus = dbus.SessionBus() + service = datastore.DataStore(BASE_DIR) + mainloop = gobject.MainLoop() + + bus.set_exit_on_disconnect(False) + bus.add_signal_receiver( + lambda mainloop=mainloop: handle_disconnect(mainloop), + signal_name='Disconnected', + dbus_interface='org.freedesktop.DBus.Local') + + signal.signal(signal.SIGHUP, lambda signal_number, frame_, + mainloop=mainloop: handle_signal(signal_number, mainloop)) + signal.signal(signal.SIGTERM, lambda signal_number, frame_, + mainloop=mainloop: handle_signal(signal_number, mainloop)) + + # pylint: disable-msg=W0702 + try: + mainloop.run() + except: + logging.exception('Data store shut down with error') + + service.stop() + + +main() |