最近、dbus を試しています。しかし、dbus サービスにブール値の正しいデータ型を推測させることができないようです。次の例を検討してください。
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()
このコードは、文字列から他の辞書にマップする辞書である 1 つのパラメーターを受け入れる perform メソッドを提供する dbus サービスを作成します。このパラメーターは、文字列をバリアントにマップします。この形式を選択したのは、辞書の形式が次のとおりであるためです。
{
"key1": {
"type": ("tuple", "value")
},
"key2": {
"name": "John Doe",
"gender": "male",
"age": 23
},
"test": {
"true-property": True,
"false-property": False
}
}
このディクショナリをサービスに渡すと、ブール値が整数に変換されます。私の目には、チェックはそれほど難しくないはずです。これを考慮してください (value
は dbus 型に変換される変数です):
if isinstance(value, bool):
return dbus.Boolean(value)
のチェック前にこのチェックが行われていればisinstance(value, int)
、問題はありません。何か案は?