# HG changeset patch # User Goffi # Date 1387238199 -3600 # Node ID 1def5b7edf9f8513b08784268e0dd9c7d30bc693 # Parent c8b9f675ac1771e0947747831c2fb4d4e9a70be0 core, bridge: better GenericException handling diff -r c8b9f675ac17 -r 1def5b7edf9f frontends/src/primitivus/profile_manager.py --- a/frontends/src/primitivus/profile_manager.py Mon Dec 16 17:49:54 2013 +0100 +++ b/frontends/src/primitivus/profile_manager.py Tue Dec 17 00:56:39 2013 +0100 @@ -77,11 +77,11 @@ def _profileCreationFailure(self, reason): self.host.removePopUp() - if reason=="CONFLICT": + if reason=="ConflictError": message=_("A profile with this name already exists") - elif reason=="CANCELED": + elif reason=="CancelError": message=_("Profile creation cancelled by backend") - elif reason=="DATABASE": + elif reason=="DATABASE": # FIXME: doesn't seem to exist ! message=_("Database error") else: message=_("Unknown reason (%s)") % reason diff -r c8b9f675ac17 -r 1def5b7edf9f src/bridge/DBus.py --- a/src/bridge/DBus.py Mon Dec 16 17:49:54 2013 +0100 +++ b/src/bridge/DBus.py Tue Dec 17 00:56:39 2013 +0100 @@ -56,8 +56,13 @@ class GenericException(dbus.DBusException): def __init__(self, twisted_error): super(GenericException, self).__init__() - mess = twisted_error.getErrorMessage() - self._dbus_error_name = const_ERROR_PREFIX + "." + (mess or str(twisted_error.__class__)) + try: + error_name = str(twisted_error.value().__class__.__name__) + # twisted_error.value is a class + except TypeError: + # twisted_error.value is an instance + error_name = str(twisted_error.value.__class__.__name__) + self._dbus_error_name = const_ERROR_PREFIX + "." + error_name class DbusObject(dbus.service.Object): diff -r c8b9f675ac17 -r 1def5b7edf9f src/bridge/bridge_constructor/dbus_core_template.py --- a/src/bridge/bridge_constructor/dbus_core_template.py Mon Dec 16 17:49:54 2013 +0100 +++ b/src/bridge/bridge_constructor/dbus_core_template.py Tue Dec 17 00:56:39 2013 +0100 @@ -56,8 +56,13 @@ class GenericException(dbus.DBusException): def __init__(self, twisted_error): super(GenericException, self).__init__() - mess = twisted_error.getErrorMessage() - self._dbus_error_name = const_ERROR_PREFIX + "." + (mess or str(twisted_error.__class__)) + try: + error_name = str(twisted_error.value().__class__.__name__) + # twisted_error.value is a class + except TypeError: + # twisted_error.value is an instance + error_name = str(twisted_error.value.__class__.__name__) + self._dbus_error_name = const_ERROR_PREFIX + "." + error_name class DbusObject(dbus.service.Object): diff -r c8b9f675ac17 -r 1def5b7edf9f src/core/exceptions.py --- a/src/core/exceptions.py Mon Dec 16 17:49:54 2013 +0100 +++ b/src/core/exceptions.py Tue Dec 17 00:56:39 2013 +0100 @@ -57,6 +57,18 @@ pass +class ConflictError(Exception): + pass + + +class CancelError(Exception): + pass + + +class InternalError(Exception): + pass + + class BridgeInitError(Exception): pass diff -r c8b9f675ac17 -r 1def5b7edf9f src/memory/memory.py --- a/src/memory/memory.py Mon Dec 16 17:49:54 2013 +0100 +++ b/src/memory/memory.py Tue Dec 17 00:56:39 2013 +0100 @@ -164,9 +164,9 @@ """ if self.storage.hasProfile(profile): info(_('The profile name already exists')) - return defer.fail(Failure(u"CONFLICT")) + return defer.fail(Failure(exceptions.ConflictError)) if not self.host.trigger.point("ProfileCreation", profile): - return defer.fail(Failure(u"CANCEL")) + return defer.fail(Failure(exceptions.CancelError)) return self.storage.createProfile(profile) def deleteProfile(self, profile): diff -r c8b9f675ac17 -r 1def5b7edf9f src/plugins/plugin_misc_account.py --- a/src/plugins/plugin_misc_account.py Mon Dec 16 17:49:54 2013 +0100 +++ b/src/plugins/plugin_misc_account.py Tue Dec 17 00:56:39 2013 +0100 @@ -79,7 +79,7 @@ self.deferred.callback(None) else: error(_(u"Can't register Prosody account (error code: %(code)d): %(message)s") % {'code': reason.value.exitCode, 'message': self.data}) - self.deferred.errback(Failure(u"INTERNAL")) + self.deferred.errback(Failure(exceptions.InternalError)) class MiscAccount(object): @@ -118,7 +118,7 @@ raise exceptions.DataError if profile.lower() in self.getConfig('reserved_list'): - return defer.fail(Failure(u'CONFLICT')) + return defer.fail(Failure(exceptions.ConflictError)) d = self.host.memory.asyncCreateProfile(profile) d.addCallback(self._profileRegistered, email, password, profile)