Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/groupthink/dbus_tools.py
blob: 423e51ace4f5af3af78863126c97fecead248677 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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