#!/usr/bin/python

import dbus, flimflam

flim = flimflam.FlimFlam(dbus.SystemBus())

for obj in flim.GetObjectList("Device"):
    obj_properties = obj.GetProperties(utf8_strings = True)

    print "[ %s ]" % (obj.object_path)
    for key in obj_properties.keys():
        print "    %s = %s" % \
            (key, flimflam.convert_dbus_value(obj_properties[key], 4))

print
