comparison src/bridge/bridge_constructor/dbus_core_template.py @ 284:c25371424090

dbus bridge: fixed introspection for dynamically added methods and signals
author Goffi <goffi@goffi.org>
date Fri, 04 Feb 2011 00:13:41 +0100
parents 1d2e0dfe7114
children 15c8916317d0
comparison
equal deleted inserted replaced
283:68cd30d982a5 284:c25371424090
92 code = compile ('def '+name+' (self,'+attributes+'): return self.cb["'+name+'"]('+attributes+')', '<DBus bridge>','exec') 92 code = compile ('def '+name+' (self,'+attributes+'): return self.cb["'+name+'"]('+attributes+')', '<DBus bridge>','exec')
93 exec (code) 93 exec (code)
94 method = locals()[name] 94 method = locals()[name]
95 setattr(DbusObject, name, dbus.service.method( 95 setattr(DbusObject, name, dbus.service.method(
96 const_INT_PREFIX+int_suffix, in_signature=in_sign, out_signature=out_sign)(method)) 96 const_INT_PREFIX+int_suffix, in_signature=in_sign, out_signature=out_sign)(method))
97 function = getattr(self, name)
98 func_table = self._dbus_class_table[self.__class__.__module__ + '.' + self.__class__.__name__][function._dbus_interface]
99 func_table[function.__name__] = function #Needed for introspection
97 100
98 def addSignal(self, name, int_suffix, signature): 101 def addSignal(self, name, int_suffix, signature):
99 """Dynamically add a signal to Dbus Bridge""" 102 """Dynamically add a signal to Dbus Bridge"""
100 #FIXME: Better way ??? 103 #FIXME: Better way ???
101 attributes = self.__attribute_string(signature) 104 attributes = self.__attribute_string(signature)
103 code = compile ('def '+name+' (self,'+attributes+'): debug ("'+name+' signal")', '<DBus bridge>','exec') 106 code = compile ('def '+name+' (self,'+attributes+'): debug ("'+name+' signal")', '<DBus bridge>','exec')
104 exec (code) 107 exec (code)
105 signal = locals()[name] 108 signal = locals()[name]
106 setattr(DbusObject, name, dbus.service.signal( 109 setattr(DbusObject, name, dbus.service.signal(
107 const_INT_PREFIX+int_suffix, signature=signature)(signal)) 110 const_INT_PREFIX+int_suffix, signature=signature)(signal))
111 function = getattr(self, name)
112 func_table = self._dbus_class_table[self.__class__.__module__ + '.' + self.__class__.__name__][function._dbus_interface]
113 func_table[function.__name__] = function #Needed for introspection
108 114
109 class DBusBridge(Bridge): 115 class DBusBridge(Bridge):
110 def __init__(self): 116 def __init__(self):
111 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 117 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
112 Bridge.__init__(self) 118 Bridge.__init__(self)