draft device api
[~helmut/onoff.git] / dbus_client.py
1 #!/usr/bin/env python
2
3 import os
4 import socket
5 import sys
6
7 import dbus
8 from dbus.mainloop.glib import DBusGMainLoop
9 from gi.repository import GObject
10
11 from onoff.common import ST_ACTIVE
12
13 def wait_for_signal(proxy, signal):
14     loop = GObject.MainLoop()
15     state = []
16     def callback(st):
17         state.append(st)
18         loop.quit()
19     proxy.connect_to_signal(signal, callback)
20     loop.run()
21     return state[0]
22
23 def main():
24     s1, s2 = socket.socketpair()
25     DBusGMainLoop(set_as_default=True)
26     bus = dbus.SessionBus()
27     proxy = bus.get_object("de.subdivi.onoff", "/de/subdivi/onoff/5")
28     if len(sys.argv) > 1:
29         st = proxy.activatefd(dbus.types.UnixFd(s1), 10)
30         s1.close()
31         os.dup2(s2.fileno(), 254)
32         s2.close()
33         if st != ST_ACTIVE:
34             print("state is %d waiting for signal" % st)
35             st = wait_for_signal(proxy, "changestate")
36             print("new state is %d" % st)
37         os.execvp(sys.argv[1], sys.argv[1:])
38     else:
39         st = proxy.activatetime(10)
40         if st != ST_ACTIVE:
41             print("state is %d waiting for signal" % st)
42             st = wait_for_signal(proxy, "changestate")
43             print("new state is %d" % st)
44
45 if __name__ == "__main__":
46     main()