# HG changeset patch # User Goffi # Date 1298248539 -3600 # Node ID 233e6fce0b4998627457373c0886d55f38081be0 # Parent e044d1dc37d1c0da960ba913bdfc2e191660668e DBus bridge: using new generated bridge diff -r e044d1dc37d1 -r 233e6fce0b49 src/bridge/DBus.py --- a/src/bridge/DBus.py Sun Feb 20 23:59:43 2011 +0100 +++ b/src/bridge/DBus.py Mon Feb 21 01:35:39 2011 +0100 @@ -296,18 +296,18 @@ return self.cb["subscription"](unicode(sub_type), unicode(entity), unicode(profile_key)) - 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) @@ -416,12 +421,12 @@ 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))