Fix bug: TIVI-460 ofono-test:missing dependence to python-xml and dbus-python
[profile/ivi/ofono.git] / test / monitor-dundee
1 #!/usr/bin/python
2
3 import gobject
4
5 import dbus
6 import dbus.mainloop.glib
7
8 _dbus2py = {
9         dbus.String : unicode,
10         dbus.UInt32 : int,
11         dbus.Int32 : int,
12         dbus.Int16 : int,
13         dbus.UInt16 : int,
14         dbus.UInt64 : int,
15         dbus.Int64 : int,
16         dbus.Byte : int,
17         dbus.Boolean : bool,
18         dbus.ByteArray : str,
19         dbus.ObjectPath : str
20     }
21
22 def dbus2py(d):
23         t = type(d)
24         if t in _dbus2py:
25                 return _dbus2py[t](d)
26         if t is dbus.Dictionary:
27                 return dict([(dbus2py(k), dbus2py(v)) for k, v in d.items()])
28         if t is dbus.Array and d.signature == "y":
29                 return "".join([chr(b) for b in d])
30         if t is dbus.Array or t is list:
31                 return [dbus2py(v) for v in d]
32         if t is dbus.Struct or t is tuple:
33                 return tuple([dbus2py(v) for v in d])
34         return d
35
36 def pretty(d):
37         d = dbus2py(d)
38         t = type(d)
39
40         if t in (dict, tuple, list) and len(d) > 0:
41                 if t is dict:
42                         d = ", ".join(["%s = %s" % (k, pretty(v))
43                                         for k, v in d.items()])
44                         return "{ %s }" % d
45
46                 d = " ".join([pretty(e) for e in d])
47
48                 if t is tuple:
49                         return "( %s )" % d
50
51         return str(d)
52
53 def property_changed(name, value, path, interface):
54         iface = interface[interface.rfind(".") + 1:]
55         print "{%s} [%s] %s = %s" % (iface, path, name, pretty(value))
56
57 def added(name, value, member, path, interface):
58         iface = interface[interface.rfind(".") + 1:]
59         print "{%s} [%s] %s %s" % (iface, member, name, pretty(value))
60
61 def removed(name, member, path, interface):
62         iface = interface[interface.rfind(".") + 1:]
63         print "{%s} [%s] %s" % (iface, member, name)
64
65 def event(member, path, interface):
66         iface = interface[interface.rfind(".") + 1:]
67         print "{%s} [%s] %s" % (iface, path, member)
68
69 def message(msg, args, member, path, interface):
70         iface = interface[interface.rfind(".") + 1:]
71         print "{%s} [%s] %s %s (%s)" % (iface, path, member,
72                                         str(msg), pretty(args))
73
74 def ussd(msg, member, path, interface):
75         iface = interface[interface.rfind(".") + 1:]
76         print "{%s} [%s] %s %s" % (iface, path, member, str(msg))
77
78 def value(value, member, path, interface):
79         iface = interface[interface.rfind(".") + 1:]
80         print "{%s} [%s] %s %s" % (iface, path, member, str(value))
81
82 if __name__ == '__main__':
83         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
84
85         bus = dbus.SystemBus()
86
87         bus.add_signal_receiver(property_changed,
88                                         bus_name="org.ofono.dundee",
89                                         signal_name = "PropertyChanged",
90                                                 path_keyword="path",
91                                                 interface_keyword="interface")
92
93         bus.add_signal_receiver(added,
94                                         bus_name="org.ofono.dundee",
95                                         signal_name = "DeviceAdded",
96                                                 member_keyword="member",
97                                                 path_keyword="path",
98                                                 interface_keyword="interface")
99
100         bus.add_signal_receiver(removed,
101                                         bus_name="org.ofono.dundee",
102                                         signal_name = "DeviceRemoved",
103                                                 member_keyword="member",
104                                                 path_keyword="path",
105                                                 interface_keyword="interface")
106
107
108         mainloop = gobject.MainLoop()
109         mainloop.run()