Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/datastore/bin/datastore-service
diff options
context:
space:
mode:
Diffstat (limited to 'datastore/bin/datastore-service')
-rwxr-xr-xdatastore/bin/datastore-service58
1 files changed, 58 insertions, 0 deletions
diff --git a/datastore/bin/datastore-service b/datastore/bin/datastore-service
new file mode 100755
index 0000000..06b6517
--- /dev/null
+++ b/datastore/bin/datastore-service
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+import sys, os, signal, logging
+import gobject
+import dbus.service
+import dbus.mainloop.glib
+import dbus.glib
+from carquinyol.datastore import DataStore
+from sugar import logger
+
+# Path handling
+profile = os.environ.get('SUGAR_PROFILE', 'default')
+base_dir = os.path.join(os.path.expanduser('~'), '.sugar', profile)
+log_dir = os.path.join(base_dir, "logs")
+if not os.path.exists(log_dir): os.makedirs(log_dir)
+
+# setup logger
+logger.start('datastore')
+
+# build the datastore
+dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+bus = dbus.SessionBus()
+connected = True
+
+ds = DataStore()
+
+# and run it
+mainloop = gobject.MainLoop()
+
+def handle_disconnect():
+ global mainloop
+ mainloop.quit()
+ logging.debug("Datastore disconnected from the bus.")
+
+def handle_shutdown(signum, frame):
+ global mainloop
+ mainloop.quit()
+ raise SystemExit("Shutting down on signal %s" % signum)
+
+bus.set_exit_on_disconnect(False)
+bus.add_signal_receiver(handle_disconnect,
+ signal_name='Disconnected',
+ dbus_interface='org.freedesktop.DBus.Local')
+
+signal.signal(signal.SIGHUP, handle_shutdown)
+signal.signal(signal.SIGTERM, handle_shutdown)
+
+def main():
+ try:
+ mainloop.run()
+ except KeyboardInterrupt:
+ logging.info("DataStore shutdown by user")
+ except:
+ logging.error("Datastore shutdown with error", exc_info=sys.exc_info())
+
+main()
+
+ds.stop()
+