[Kimchi-devel] [PATCH 4/8] refator exception: Update control to raise the exception message
Aline Manera
alinefm at linux.vnet.ibm.com
Tue Feb 11 12:16:52 UTC 2014
On 02/11/2014 01:09 AM, Leonardo Augusto Guimarães Garcia wrote:
> On 02/09/2014 08:47 PM, Aline Manera wrote:
>> From: Aline Manera <alinefm at br.ibm.com>
>>
>> The error messages raised on control were being built in there instead of
>> using the exception message
>> And the errors from jsonschema validation also were displayed to the user
>> without a customization what can cause a misunderstanding as it contains
>> technical words.
>> Fix it in order to raise the translated messages to the user.
>>
>> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
>> ---
>> src/kimchi/control/base.py | 90 ++++++++++++++++++++-----------------------
>> src/kimchi/control/utils.py | 5 +--
>> 2 files changed, 44 insertions(+), 51 deletions(-)
>>
>> diff --git a/src/kimchi/control/base.py b/src/kimchi/control/base.py
>> index f50ff6e..102b53c 100644
>> --- a/src/kimchi/control/base.py
>> +++ b/src/kimchi/control/base.py
>> @@ -70,18 +70,16 @@ class Resource(object):
>> fn(*model_args)
>> uri_params = tuple(self.model_args)
>> raise internal_redirect(self.uri_fmt % uri_params)
>> - except MissingParameter, param:
>> - error = "Missing parameter: '%s'" % param
>> - raise cherrypy.HTTPError(400, error)
>> - except InvalidParameter, param:
>> - error = "Invalid parameter: '%s'" % param
>> - raise cherrypy.HTTPError(400, error)
>> - except InvalidOperation, msg:
>> - raise cherrypy.HTTPError(400, "Invalid operation: '%s'" % msg)
>> - except OperationFailed, msg:
>> - raise cherrypy.HTTPError(500, "Operation Failed: '%s'" % msg)
>> - except NotFoundError, msg:
>> - raise cherrypy.HTTPError(404, "Not found: '%s'" % msg)
>> + except MissingParameter, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except InvalidParameter, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except InvalidOperation, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except OperationFailed, e:
>> + raise cherrypy.HTTPError(500, e.message)
>> + except NotFoundError, e:
>> + raise cherrypy.HTTPError(404, e.message)
>>
>> wrapper.__name__ = action_name
>> wrapper.exposed = True
>> @@ -102,10 +100,10 @@ class Resource(object):
>> except AttributeError:
>> error = "Delete is not allowed for %s" % get_class_name(self)
> This error message is not being translated. It should, right?
Ops... I forgot this one!
I will include in V2.
>> raise cherrypy.HTTPError(405, error)
>> - except OperationFailed, msg:
>> - raise cherrypy.HTTPError(500, "Operation Failed: '%s'" % msg)
>> - except InvalidOperation, msg:
>> - raise cherrypy.HTTPError(400, "Invalid operation: '%s'" % msg)
>> + except OperationFailed, e:
>> + raise cherrypy.HTTPError(500, e.message)
>> + except InvalidOperation, e:
>> + raise cherrypy.HTTPError(400, e.message)
>>
>> @cherrypy.expose
>> def index(self):
>> @@ -113,26 +111,26 @@ class Resource(object):
>> if method == 'GET':
>> try:
>> return self.get()
>> - except NotFoundError, msg:
>> - raise cherrypy.HTTPError(404, "Not found: '%s'" % msg)
>> - except InvalidOperation, msg:
>> - raise cherrypy.HTTPError(400, "Invalid operation: '%s'" % msg)
>> - except OperationFailed, msg:
>> - raise cherrypy.HTTPError(406, "Operation failed: '%s'" % msg)
>> + except NotFoundError, e:
>> + raise cherrypy.HTTPError(404, e.message)
>> + except InvalidOperation, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except OperationFailed, e:
>> + raise cherrypy.HTTPError(406, e.message)
>> elif method == 'DELETE':
>> try:
>> return self.delete()
>> - except NotFoundError, msg:
>> - raise cherrypy.HTTPError(404, "Not found: '%s'" % msg)
>> + except NotFoundError, e:
>> + raise cherrypy.HTTPError(404, e.message)
>> elif method == 'PUT':
>> try:
>> return self.update()
>> - except InvalidParameter, msg:
>> - raise cherrypy.HTTPError(400, "Invalid parameter: '%s'" % msg)
>> - except InvalidOperation, msg:
>> - raise cherrypy.HTTPError(400, "Invalid operation: '%s'" % msg)
>> - except NotFoundError, msg:
>> - raise cherrypy.HTTPError(404, "Not found: '%s'" % msg)
>> + except InvalidParameter, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except InvalidOperation, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except NotFoundError, e:
>> + raise cherrypy.HTTPError(404, e.message)
>>
>> def update(self):
>> try:
>> @@ -264,28 +262,24 @@ class Collection(object):
>> filter_params = cherrypy.request.params
>> validate_params(filter_params, self, 'get_list')
>> return self.get(filter_params)
>> - except InvalidOperation, param:
>> - error = "Invalid operation: '%s'" % param
>> - raise cherrypy.HTTPError(400, error)
>> - except NotFoundError, param:
>> - raise cherrypy.HTTPError(404, "Not found: '%s'" % param)
>> + except InvalidOperation, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except NotFoundError, e:
>> + raise cherrypy.HTTPError(404, e.message)
>>
>> elif method == 'POST':
>> try:
>> return self.create(*args)
>> - except MissingParameter, param:
>> - error = "Missing parameter: '%s'" % param
>> - raise cherrypy.HTTPError(400, error)
>> - except InvalidParameter, param:
>> - error = "Invalid parameter: '%s'" % param
>> - raise cherrypy.HTTPError(400, error)
>> - except OperationFailed, param:
>> - raise cherrypy.HTTPError(500, "Operation Failed: '%s'" % param)
>> - except InvalidOperation, param:
>> - error = "Invalid operation: '%s'" % param
>> - raise cherrypy.HTTPError(400, error)
>> - except NotFoundError, param:
>> - raise cherrypy.HTTPError(404, "Not found: '%s'" % param)
>> + except MissingParameter, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except InvalidParameter, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except OperationFailed, e:
>> + raise cherrypy.HTTPError(500, e.message)
>> + except InvalidOperation, e:
>> + raise cherrypy.HTTPError(400, e.message)
>> + except NotFoundError, e:
>> + raise cherrypy.HTTPError(404, e.message)
>>
>>
>> class AsyncCollection(Collection):
>> diff --git a/src/kimchi/control/utils.py b/src/kimchi/control/utils.py
>> index 9c6878b..3e06100 100644
>> --- a/src/kimchi/control/utils.py
>> +++ b/src/kimchi/control/utils.py
>> @@ -101,9 +101,8 @@ def validate_params(params, instance, action):
>>
>> try:
>> validator.validate(request)
>> - except ValidationError:
>> - raise InvalidParameter('; '.join(
>> - e.message for e in validator.iter_errors(request)))
>> + except ValidationError, e:
>> + raise InvalidParameter(e.schema['error'], {'value': str(e.instance)})
>>
>>
>> class UrlSubNode(object):
> There is at least one error message in the login function in
> src/kimchi/root.py that is not being covered by this patch. I think the
> error message on missing parameter there should be translated as well.
Yeap! I will add in V2.
> Best regards,
>
> Leonardo Garcia
More information about the Kimchi-devel
mailing list