Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/groupthink/dbus_tools.py
diff options
context:
space:
mode:
Diffstat (limited to 'groupthink/dbus_tools.py')
-rw-r--r--groupthink/dbus_tools.py26
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