use the enum module to represent states
[~helmut/onoff.git] / onoff / gobject.py
index ea98019..a2f9428 100644 (file)
@@ -1,18 +1,32 @@
 from gi.repository import GObject
 
 def spawn_child(command, callback):
-    """
+    """Spawn a child process with GObject and attach a callback to the
+    termination of the spawned process.
+
     @type command: [str]
     @param command: an argument vector. First element is used as argv[0] and
             used as executable to look up in $PATH.
     @type callback: (pid, condition) -> None
     @param callback: is executed when the command completes
-    @rtype: (int, int)
-    @returns: the child process pid and the event id of the callback
+    @rtype: int
+    @returns: the child process pid
     """
     ret = GObject.spawn_async(command,
             flags=GObject.SPAWN_SEARCH_PATH | GObject.SPAWN_DO_NOT_REAP_CHILD)
     pid = ret[0]
     assert pid
-    watch = GObject.child_watch_add(pid, callback)
-    return pid, watch
+    GObject.child_watch_add(pid, callback)
+    return pid
+
+class ScheduledFunction(object):
+    def __init__(self, interval, function):
+        """
+        @type interval: float
+        @param interval: seconds
+        """
+        self.event = GObject.timeout_add(int(1000 * interval), function)
+
+    def cancel(self):
+        ret = GObject.source_remove(self.event)
+        assert ret