import dbus
import dbus.mainloop.glib
+_dbus2py = {
+ dbus.String : unicode,
+ dbus.UInt32 : int,
+ dbus.Int32 : int,
+ dbus.Int16 : int,
+ dbus.UInt16 : int,
+ dbus.UInt64 : int,
+ dbus.Int64 : int,
+ dbus.Byte : int,
+ dbus.Boolean : bool,
+ dbus.ByteArray : str,
+ dbus.ObjectPath : str
+ }
+
+def dbus2py(d):
+ t = type(d)
+ if t in _dbus2py:
+ return _dbus2py[t](d)
+ if t is dbus.Dictionary:
+ return dict([(dbus2py(k), dbus2py(v)) for k, v in d.items()])
+ if t is dbus.Array and d.signature == "y":
+ return "".join([chr(b) for b in d])
+ if t is dbus.Array or t is list:
+ return [dbus2py(v) for v in d]
+ if t is dbus.Struct or t is tuple:
+ return tuple([dbus2py(v) for v in d])
+ return d
+
+def pretty(d):
+ d = dbus2py(d)
+ t = type(d)
+
+ if t in (dict, tuple, list) and len(d) > 0:
+ if t is dict:
+ d = ", ".join(["%s = %s" % (k, pretty(v))
+ for k, v in d.items()])
+ return "{ %s }" % d
+
+ d = " ".join([pretty(e) for e in d])
+
+ if t is tuple:
+ return "( %s )" % d
+
+ return str(d)
+
def property_changed(name, value, path, interface):
iface = interface[interface.rfind(".") + 1:]
- if name in ["Modems", "Interfaces", "Features",
- "Technologies",
- "SubscriberNumbers",
- "EmergencyNumbers",
- "PreferredLanguages"]:
- val = ""
- for i in value:
- val += i + " "
- elif name in ["MobileNetworkCodeLength",
- "VoicemailMessageCount"]:
- val = int(value)
- else:
- val = str(value)
- print "{%s} [%s] %s = %s" % (iface, path, name, val)
+ print "{%s} [%s] %s = %s" % (iface, path, name, pretty(value))
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)