Mercurial > libervia-backend
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) |