diff options
Diffstat (limited to 'groupthink/dbus_tools.py')
-rw-r--r-- | groupthink/dbus_tools.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/groupthink/dbus_tools.py b/groupthink/dbus_tools.py new file mode 100644 index 0000000..423e51a --- /dev/null +++ b/groupthink/dbus_tools.py @@ -0,0 +1,26 @@ +import dbus + +inttypes = (dbus.Int16, dbus.Int32, dbus.Int64, + dbus.Byte, dbus.UInt16, dbus.UInt32, dbus.UInt64) +booltypes = (dbus.Boolean) +floattypes = (dbus.Double) +strtypes = (dbus.ByteArray, dbus.String, dbus.UTF8String, dbus.Signature, + dbus.ObjectPath) + +def undbox(x): + if isinstance(x, inttypes): + return int(x) + elif isinstance(x, booltypes): + return bool(x) + elif isinstance(x, strtypes): + return str(x) + elif isinstance(x, floattypes): + return float(x) + elif isinstance(x, (dbus.Struct, tuple)): + return tuple(undbox(y) for y in x) + elif isinstance(x, (dbus.Array, list)): + return [undbox(y) for y in x] + elif isinstance(x, (dbus.Dictionary, dict)): + return dict((undbox(a),undbox(b)) for (a,b) in x.iteritems()) + else: + return x |