Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorSascha 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)
commit68b57b4619fdc393a5206856502c7ca09c1acf9d (patch)
tree675d01ff92c10924002411b740e3d6daa7bf0b18 /bin
some initial files
Diffstat (limited to 'bin')
-rwxr-xr-xbin/datastore-service62
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()