make clients configurable via argparse
[~helmut/onoff.git] / onoff / dbusutils.py
1 import argparse
2
3 import dbus
4
5 object_prefix = "/de/subdivi/onoff0"
6
7 dbus_options = argparse.ArgumentParser(add_help=False)
8 dbus_options.add_argument("--bus", default="session",
9                           choices=("system", "session"),
10                           help="which bus to use (default: %(default)s)")
11 dbus_options.add_argument("--busname", type=str, required=True,
12                           help="which busname (i.e. client) to use")
13 dbus_options.add_argument("--device", type=str, required=True,
14                           help="which device to control")
15
16 def get_dbus_proxy(namespace):
17     """
18     @param namespace: a namespace returned from a dbus_options argument parser
19     @returns: a dbus object proxy
20     """
21     if namespace.bus == "session":
22         bus = dbus.SessionBus()
23     elif namespace.bus == "system":
24         bus = dbus.SystemBus()
25     else:
26         raise AssertionError("namespace.bus %r is neither session nor system",
27                              namespace.bus)
28     objname = "%s/%s" % (object_prefix, namespace.device)
29     return bus.get_object(namespace.busname, objname)