Mercurial > libervia-backend
comparison frontends/src/bridge/DBus.py @ 1062:95758ef3faa8
bridge: async failures are more detailed (full class name + error message)
author | souliane <souliane@mailoo.org> |
---|---|
date | Sat, 07 Jun 2014 15:20:39 +0200 |
parents | b2b9c184033f |
children | d123d61976c8 |
comparison
equal
deleted
inserted
replaced
1061:3700165d68dc | 1062:95758ef3faa8 |
---|---|
16 | 16 |
17 # You should have received a copy of the GNU Affero General Public License | 17 # You should have received a copy of the GNU Affero General Public License |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | 19 |
20 from sat.core.i18n import _ | 20 from sat.core.i18n import _ |
21 from bridge_frontend import BridgeFrontend | 21 from bridge_frontend import BridgeFrontend, BridgeException |
22 import dbus | 22 import dbus |
23 from sat.core.log import getLogger | 23 from sat.core.log import getLogger |
24 log = getLogger(__name__) | 24 log = getLogger(__name__) |
25 from sat.core.exceptions import BridgeExceptionNoService, BridgeInitError | 25 from sat.core.exceptions import BridgeExceptionNoService, BridgeInitError |
26 | 26 |
30 const_INT_PREFIX = "org.goffi.SAT" # Interface prefix | 30 const_INT_PREFIX = "org.goffi.SAT" # Interface prefix |
31 const_ERROR_PREFIX = const_INT_PREFIX + ".error" | 31 const_ERROR_PREFIX = const_INT_PREFIX + ".error" |
32 const_OBJ_PATH = '/org/goffi/SAT/bridge' | 32 const_OBJ_PATH = '/org/goffi/SAT/bridge' |
33 const_CORE_SUFFIX = ".core" | 33 const_CORE_SUFFIX = ".core" |
34 const_PLUGIN_SUFFIX = ".plugin" | 34 const_PLUGIN_SUFFIX = ".plugin" |
35 | |
36 | |
37 def dbus_to_bridge_exception(dbus_e): | |
38 """Convert a DBusException to a BridgeException. | |
39 | |
40 @param dbus_e (DBusException) | |
41 @return: BridgeException | |
42 """ | |
43 name = dbus_e.get_dbus_name()[len(const_ERROR_PREFIX) + 1:] | |
44 return BridgeException(name, dbus_e.get_dbus_message()) | |
35 | 45 |
36 | 46 |
37 class DBusBridgeFrontend(BridgeFrontend): | 47 class DBusBridgeFrontend(BridgeFrontend): |
38 def __init__(self): | 48 def __init__(self): |
39 try: | 49 try: |
89 | 99 |
90 method = getattr(self.db_plugin_iface, name) | 100 method = getattr(self.db_plugin_iface, name) |
91 | 101 |
92 if async: | 102 if async: |
93 kwargs['reply_handler'] = _callback | 103 kwargs['reply_handler'] = _callback |
94 kwargs['error_handler'] = lambda err: _errback(err._dbus_error_name[len(const_ERROR_PREFIX) + 1:]) | 104 kwargs['error_handler'] = lambda err: _errback(dbus_to_bridge_exception(err)) |
95 | 105 |
96 return method(*args, **kwargs) | 106 return method(*args, **kwargs) |
97 | 107 |
98 return getPluginMethod | 108 return getPluginMethod |
99 def addContact(self, entity_jid, profile_key="@DEFAULT@"): | 109 def addContact(self, entity_jid, profile_key="@DEFAULT@"): |
100 return self.db_core_iface.addContact(entity_jid, profile_key) | 110 return self.db_core_iface.addContact(entity_jid, profile_key) |
101 | 111 |
102 def asyncConnect(self, profile_key="@DEFAULT@", password='', callback=None, errback=None): | 112 def asyncConnect(self, profile_key="@DEFAULT@", password='', callback=None, errback=None): |
103 return self.db_core_iface.asyncConnect(profile_key, password, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 113 return self.db_core_iface.asyncConnect(profile_key, password, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
104 | 114 |
105 def asyncCreateProfile(self, profile, password='', callback=None, errback=None): | 115 def asyncCreateProfile(self, profile, password='', callback=None, errback=None): |
106 return self.db_core_iface.asyncCreateProfile(profile, password, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 116 return self.db_core_iface.asyncCreateProfile(profile, password, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
107 | 117 |
108 def asyncDeleteProfile(self, profile, callback=None, errback=None): | 118 def asyncDeleteProfile(self, profile, callback=None, errback=None): |
109 return self.db_core_iface.asyncDeleteProfile(profile, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 119 return self.db_core_iface.asyncDeleteProfile(profile, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
110 | 120 |
111 def asyncGetParamA(self, name, category, attribute="value", security_limit=-1, profile_key="@DEFAULT@", callback=None, errback=None): | 121 def asyncGetParamA(self, name, category, attribute="value", security_limit=-1, profile_key="@DEFAULT@", callback=None, errback=None): |
112 return unicode(self.db_core_iface.asyncGetParamA(name, category, attribute, security_limit, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:]))) | 122 return unicode(self.db_core_iface.asyncGetParamA(name, category, attribute, security_limit, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err)))) |
113 | 123 |
114 def confirmationAnswer(self, id, accepted, data, profile): | 124 def confirmationAnswer(self, id, accepted, data, profile): |
115 return self.db_core_iface.confirmationAnswer(id, accepted, data, profile) | 125 return self.db_core_iface.confirmationAnswer(id, accepted, data, profile) |
116 | 126 |
117 def delContact(self, entity_jid, profile_key="@DEFAULT@"): | 127 def delContact(self, entity_jid, profile_key="@DEFAULT@"): |
118 return self.db_core_iface.delContact(entity_jid, profile_key) | 128 return self.db_core_iface.delContact(entity_jid, profile_key) |
119 | 129 |
120 def discoInfos(self, entity_jid, profile_key, callback=None, errback=None): | 130 def discoInfos(self, entity_jid, profile_key, callback=None, errback=None): |
121 return self.db_core_iface.discoInfos(entity_jid, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 131 return self.db_core_iface.discoInfos(entity_jid, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
122 | 132 |
123 def discoItems(self, entity_jid, profile_key, callback=None, errback=None): | 133 def discoItems(self, entity_jid, profile_key, callback=None, errback=None): |
124 return self.db_core_iface.discoItems(entity_jid, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 134 return self.db_core_iface.discoItems(entity_jid, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
125 | 135 |
126 def disconnect(self, profile_key="@DEFAULT@"): | 136 def disconnect(self, profile_key="@DEFAULT@"): |
127 return self.db_core_iface.disconnect(profile_key) | 137 return self.db_core_iface.disconnect(profile_key) |
128 | 138 |
129 def getConfig(self, section, name): | 139 def getConfig(self, section, name): |
137 | 147 |
138 def getEntityData(self, jid, keys, profile): | 148 def getEntityData(self, jid, keys, profile): |
139 return self.db_core_iface.getEntityData(jid, keys, profile) | 149 return self.db_core_iface.getEntityData(jid, keys, profile) |
140 | 150 |
141 def getHistory(self, from_jid, to_jid, limit, between=True, profile="@NONE@", callback=None, errback=None): | 151 def getHistory(self, from_jid, to_jid, limit, between=True, profile="@NONE@", callback=None, errback=None): |
142 return self.db_core_iface.getHistory(from_jid, to_jid, limit, between, profile, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 152 return self.db_core_iface.getHistory(from_jid, to_jid, limit, between, profile, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
143 | 153 |
144 def getLastResource(self, contact_jid, profile_key="@DEFAULT@"): | 154 def getLastResource(self, contact_jid, profile_key="@DEFAULT@"): |
145 return unicode(self.db_core_iface.getLastResource(contact_jid, profile_key)) | 155 return unicode(self.db_core_iface.getLastResource(contact_jid, profile_key)) |
146 | 156 |
147 def getMenuHelp(self, menu_id, language): | 157 def getMenuHelp(self, menu_id, language): |
152 | 162 |
153 def getParamA(self, name, category, attribute="value", profile_key="@DEFAULT@"): | 163 def getParamA(self, name, category, attribute="value", profile_key="@DEFAULT@"): |
154 return unicode(self.db_core_iface.getParamA(name, category, attribute, profile_key)) | 164 return unicode(self.db_core_iface.getParamA(name, category, attribute, profile_key)) |
155 | 165 |
156 def getParams(self, security_limit=-1, app='', profile_key="@DEFAULT@", callback=None, errback=None): | 166 def getParams(self, security_limit=-1, app='', profile_key="@DEFAULT@", callback=None, errback=None): |
157 return unicode(self.db_core_iface.getParams(security_limit, app, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:]))) | 167 return unicode(self.db_core_iface.getParams(security_limit, app, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err)))) |
158 | 168 |
159 def getParamsCategories(self, ): | 169 def getParamsCategories(self, ): |
160 return self.db_core_iface.getParamsCategories() | 170 return self.db_core_iface.getParamsCategories() |
161 | 171 |
162 def getParamsForCategory(self, category, security_limit=-1, app='', profile_key="@DEFAULT@", callback=None, errback=None): | 172 def getParamsForCategory(self, category, security_limit=-1, app='', profile_key="@DEFAULT@", callback=None, errback=None): |
163 return unicode(self.db_core_iface.getParamsForCategory(category, security_limit, app, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:]))) | 173 return unicode(self.db_core_iface.getParamsForCategory(category, security_limit, app, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err)))) |
164 | 174 |
165 def getParamsUI(self, security_limit=-1, app='', profile_key="@DEFAULT@", callback=None, errback=None): | 175 def getParamsUI(self, security_limit=-1, app='', profile_key="@DEFAULT@", callback=None, errback=None): |
166 return unicode(self.db_core_iface.getParamsUI(security_limit, app, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:]))) | 176 return unicode(self.db_core_iface.getParamsUI(security_limit, app, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err)))) |
167 | 177 |
168 def getPresenceStatuses(self, profile_key="@DEFAULT@"): | 178 def getPresenceStatuses(self, profile_key="@DEFAULT@"): |
169 return self.db_core_iface.getPresenceStatuses(profile_key) | 179 return self.db_core_iface.getPresenceStatuses(profile_key) |
170 | 180 |
171 def getProfileName(self, profile_key="@DEFAULT@"): | 181 def getProfileName(self, profile_key="@DEFAULT@"): |
176 | 186 |
177 def getProgress(self, id, profile): | 187 def getProgress(self, id, profile): |
178 return self.db_core_iface.getProgress(id, profile) | 188 return self.db_core_iface.getProgress(id, profile) |
179 | 189 |
180 def getReady(self, callback=None, errback=None): | 190 def getReady(self, callback=None, errback=None): |
181 return self.db_core_iface.getReady(reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 191 return self.db_core_iface.getReady(reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
182 | 192 |
183 def getVersion(self, ): | 193 def getVersion(self, ): |
184 return unicode(self.db_core_iface.getVersion()) | 194 return unicode(self.db_core_iface.getVersion()) |
185 | 195 |
186 def getWaitingConf(self, profile_key): | 196 def getWaitingConf(self, profile_key): |
191 | 201 |
192 def isConnected(self, profile_key="@DEFAULT@"): | 202 def isConnected(self, profile_key="@DEFAULT@"): |
193 return self.db_core_iface.isConnected(profile_key) | 203 return self.db_core_iface.isConnected(profile_key) |
194 | 204 |
195 def launchAction(self, callback_id, data, profile_key="@DEFAULT@", callback=None, errback=None): | 205 def launchAction(self, callback_id, data, profile_key="@DEFAULT@", callback=None, errback=None): |
196 return self.db_core_iface.launchAction(callback_id, data, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 206 return self.db_core_iface.launchAction(callback_id, data, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
197 | 207 |
198 def loadParamsTemplate(self, filename): | 208 def loadParamsTemplate(self, filename): |
199 return self.db_core_iface.loadParamsTemplate(filename) | 209 return self.db_core_iface.loadParamsTemplate(filename) |
200 | 210 |
201 def paramsRegisterApp(self, xml, security_limit=-1, app=''): | 211 def paramsRegisterApp(self, xml, security_limit=-1, app=''): |
203 | 213 |
204 def saveParamsTemplate(self, filename): | 214 def saveParamsTemplate(self, filename): |
205 return self.db_core_iface.saveParamsTemplate(filename) | 215 return self.db_core_iface.saveParamsTemplate(filename) |
206 | 216 |
207 def sendMessage(self, to_jid, message, subject='', mess_type="auto", extra={}, profile_key="@NONE@", callback=None, errback=None): | 217 def sendMessage(self, to_jid, message, subject='', mess_type="auto", extra={}, profile_key="@NONE@", callback=None, errback=None): |
208 return self.db_core_iface.sendMessage(to_jid, message, subject, mess_type, extra, profile_key, reply_handler=callback, error_handler=lambda err:errback(err._dbus_error_name[len(const_ERROR_PREFIX)+1:])) | 218 return self.db_core_iface.sendMessage(to_jid, message, subject, mess_type, extra, profile_key, reply_handler=callback, error_handler=lambda err:errback(dbus_to_bridge_exception(err))) |
209 | 219 |
210 def setParam(self, name, value, category, security_limit=-1, profile_key="@DEFAULT@"): | 220 def setParam(self, name, value, category, security_limit=-1, profile_key="@DEFAULT@"): |
211 return self.db_core_iface.setParam(name, value, category, security_limit, profile_key) | 221 return self.db_core_iface.setParam(name, value, category, security_limit, profile_key) |
212 | 222 |
213 def setPresence(self, to_jid='', show='', statuses={}, profile_key="@DEFAULT@"): | 223 def setPresence(self, to_jid='', show='', statuses={}, profile_key="@DEFAULT@"): |