provide a default for --busname
[~helmut/onoff.git] / dbus_client.py
index 691d86b..0ee6b7a 100755 (executable)
@@ -1,13 +1,19 @@
 #!/usr/bin/env python
 #!/usr/bin/env python
+"""
+A simpe client for an onoff device. If no command is given, the device is
+temporarily activated. When a command is given, the device is activated, then
+the command is run. Some time after the command finishes, the device is
+released.
+"""
 
 
+import argparse
 import os
 import os
-import sys
 
 
-import dbus
 from dbus.mainloop.glib import DBusGMainLoop
 from gi.repository import GObject
 
 from onoff.common import ST_ACTIVE
 from dbus.mainloop.glib import DBusGMainLoop
 from gi.repository import GObject
 
 from onoff.common import ST_ACTIVE
+import onoff.dbusutils
 
 def wait_for_signal(proxy, signal):
     loop = GObject.MainLoop()
 
 def wait_for_signal(proxy, signal):
     loop = GObject.MainLoop()
@@ -20,11 +26,18 @@ def wait_for_signal(proxy, signal):
     return state[0]
 
 def main():
     return state[0]
 
 def main():
+    parser = argparse.ArgumentParser(parents=[onoff.dbusutils.dbus_options])
+    parser.add_argument("--duration", type=int, default=10,
+                        help="how long to activate the device in seconds " +
+                        "(default: %(default)d")
+    parser.add_argument("command", nargs=argparse.REMAINDER,
+                        help="a command to be executed with the device being" +
+                             "activated for the duration of the execution")
+    args = parser.parse_args()
     DBusGMainLoop(set_as_default=True)
     DBusGMainLoop(set_as_default=True)
-    bus = dbus.SessionBus()
-    proxy = bus.get_object("de.subdivi.onoff0", "/de/subdivi/onoff0/redshift")
-    if len(sys.argv) > 1:
-        st, fd = proxy.activatefd(10)
+    proxy = onoff.dbusutils.get_dbus_proxy(args)
+    if args.command:
+        st, fd = proxy.activatefd()
         fd = fd.take()
         os.dup2(fd, 254)
         os.close(fd)
         fd = fd.take()
         os.dup2(fd, 254)
         os.close(fd)
@@ -32,9 +45,9 @@ def main():
             print("state is %d waiting for signal" % st)
             st = wait_for_signal(proxy, "changestate")
             print("new state is %d" % st)
             print("state is %d waiting for signal" % st)
             st = wait_for_signal(proxy, "changestate")
             print("new state is %d" % st)
-        os.execvp(sys.argv[1], sys.argv[1:])
+        os.execvp(args.command[0], args.command)
     else:
     else:
-        st = proxy.activatetime(10)
+        st = proxy.activatetime(args.duration)
         if st != ST_ACTIVE:
             print("state is %d waiting for signal" % st)
             st = wait_for_signal(proxy, "changestate")
         if st != ST_ACTIVE:
             print("state is %d waiting for signal" % st)
             st = wait_for_signal(proxy, "changestate")