[Kimchi-devel] [PATCH 4/8] refator exception: Update control to raise the exception message

Leonardo Augusto Guimarães Garcia lagarcia at linux.vnet.ibm.com
Tue Feb 11 03:09:30 UTC 2014


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?
>              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.

Best regards,

Leonardo Garcia




More information about the Kimchi-devel mailing list