From 7cd5b2ee6fc2dc5edb708112bc9449232b952c97 Mon Sep 17 00:00:00 2001 From: Goffi Date: Sun, 20 Feb 2011 23:59:43 +0100 Subject: [PATCH] dbus bridge: asynchrone methods management --- .../bridge_constructor/dbus_core_template.py | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/bridge/bridge_constructor/dbus_core_template.py b/src/bridge/bridge_constructor/dbus_core_template.py index bbd6db2d..78176cf5 100644 --- a/src/bridge/bridge_constructor/dbus_core_template.py +++ b/src/bridge/bridge_constructor/dbus_core_template.py @@ -48,18 +48,18 @@ class DbusObject(dbus.service.Object): ##METHODS_PART## - def __attribute_string(self, in_sign): + def __attributes(self, in_sign): """Return arguments to user given a in_sign @param in_sign: in_sign in the short form (using s,a,i,b etc) @return: list of arguments that correspond to a in_sign (e.g.: "sss" return "arg1, arg2, arg3")""" i=0 idx=0 - attr_string="" + attr=[] while i','exec') exec (code) method = locals()[name] + async_callbacks = ('callback', 'errback') if async else None setattr(DbusObject, name, dbus.service.method( - const_INT_PREFIX+int_suffix, in_signature=in_sign, out_signature=out_sign)(method)) + const_INT_PREFIX+int_suffix, in_signature=in_sign, out_signature=out_sign, + async_callbacks=async_callbacks)(method)) function = getattr(self, name) func_table = self._dbus_class_table[self.__class__.__module__ + '.' + self.__class__.__name__][function._dbus_interface] func_table[function.__name__] = function #Needed for introspection def addSignal(self, name, int_suffix, signature, doc={}): """Dynamically add a signal to Dbus Bridge""" - #FIXME: Better way ??? - attributes = self.__attribute_string(signature) + attributes = ', '.join(self.__attributes(signature)) code = compile ('def '+name+' (self,'+attributes+'): debug ("'+name+' signal")', '','exec') exec (code) @@ -127,13 +132,13 @@ class DBusBridge(Bridge): debug("registering DBus bridge method [%s]", name) self.dbus_bridge.register(name, callback) - def addMethod(self, name, int_suffix, in_sign, out_sign, method, doc={}): + def addMethod(self, name, int_suffix, in_sign, out_sign, method, async=False, doc={}): """Dynamically add a method to Dbus Bridge""" print ("Adding method [%s] to DBus bridge" % name) - self.dbus_bridge.addMethod(name, int_suffix, in_sign, out_sign) + self.dbus_bridge.addMethod(name, int_suffix, in_sign, out_sign, async, doc) self.register(name, method) def addSignal(self, name, int_suffix, signature, doc={}): - self.dbus_bridge.addSignal(name, int_suffix, signature) + self.dbus_bridge.addSignal(name, int_suffix, signature, doc) setattr(DBusBridge, name, getattr(self.dbus_bridge, name))