Ich habe in letzter Zeit mit dbus experimentiert. Aber anscheinend bekomme ich meinen dbus-Dienst nicht dazu, die richtigen Datentypen für boolesche Werte zu erraten. Betrachten Sie das folgende Beispiel:
import gtk
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
class Service(dbus.service.Object):
def __init__(self):
bus_name = dbus.service.BusName("org.foo.bar", bus = dbus.SessionBus())
dbus.service.Object.__init__(self, bus_name, "/org/foo/bar")
@dbus.service.method("org.foo.bar", in_signature = "a{sa{sv}}",
out_signature = "a{sa{sv}}")
def perform(self, data):
return data
if __name__ == "__main__":
DBusGMainLoop(set_as_default = True)
s = Service()
gtk.main()
Dieser Code erstellt einen dbus-Dienst, der die Methode "perform" bereitstellt, die ein Parameter akzeptiert, der ein Wörterbuch ist, das von Zeichenfolgen zu anderen Wörterbüchern abgebildet wird, die wiederum Zeichenfolgen zu Varianten abbilden. Ich habe dieses Format gewählt, weil meine Wörterbücher in diesem Format vorliegen:
{
"key1": {
"type": ("tuple", "value")
},
"key2": {
"name": "John Doe",
"gender": "male",
"age": 23
},
"test": {
"true-property": True,
"false-property": False
}
}
Wenn ich dieses Wörterbuch durch meinen Dienst schicke, werden die booleschen Werte in Ganzzahlen umgewandelt. Meiner Meinung nach sollte die Überprüfung nicht so schwierig sein. Betrachten Sie dies (value
ist die Variable, die in einen dbus-Typ konvertiert werden soll):
if isinstance(value, bool):
return dbus.Boolean(value)
Wenn diese Überprüfung vor der Überprüfung auf isinstance(value, int)
erfolgt, sollte es kein Problem geben. Irgendwelche Ideen?