From: Aline Manera <alinefm(a)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(a)br.ibm.com>
---
src/kimchi/control/base.py | 116 +++++++++++++++++++++----------------------
src/kimchi/control/utils.py | 14 +++---
2 files changed, 65 insertions(+), 65 deletions(-)
diff --git a/src/kimchi/control/base.py b/src/kimchi/control/base.py
index f50ff6e..252e9ef 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
@@ -100,12 +98,13 @@ class Resource(object):
fn(*self.model_args)
cherrypy.response.status = 204
except AttributeError:
- error = "Delete is not allowed for %s" % get_class_name(self)
- 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)
+ e = InvalidOperation('KCHAPI0002E', {'resource':
+ get_class_name(self)})
+ raise cherrypy.HTTPError(405, e.message)
+ except OperationFailed, e:
+ raise cherrypy.HTTPError(500, e.message)
+ except InvalidOperation, e:
+ raise cherrypy.HTTPError(400, e.message)
@cherrypy.expose
def index(self):
@@ -113,33 +112,34 @@ 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:
update = getattr(self.model, model_fn(self, 'update'))
except AttributeError:
- error = "%s does not implement update method"
- raise cherrypy.HTTPError(405, error % get_class_name(self))
+ e = InvalidOperation('KCHAPI0003E', {'resource':
+ get_class_name(self)})
+ raise cherrypy.HTTPError(405, e.message)
params = parse_request()
validate_params(params, self, 'update')
@@ -148,8 +148,10 @@ class Resource(object):
invalids = [v for v in params.keys() if
v not in self.update_params]
if invalids:
- error = "%s are not allowed to be updated" % invalids
- raise cherrypy.HTTPError(405, error)
+ msg_args = {'params': ", ".join(invalids),
+ 'resource': get_class_name(self)}
+ e = InvalidOperation('KCHAPI0004E', msg_args)
+ raise cherrypy.HTTPError(405, e.message)
ident = update(self.ident, params)
if ident != self.ident:
@@ -199,8 +201,9 @@ class Collection(object):
try:
create = getattr(self.model, model_fn(self, 'create'))
except AttributeError:
- error = 'Create is not allowed for %s' % get_class_name(self)
- raise cherrypy.HTTPError(405, error)
+ e = InvalidOperation('KCHAPI0005E', {'resource':
+ get_class_name(self)})
+ raise cherrypy.HTTPError(405, e.message)
params = parse_request()
validate_params(params, self, 'create')
@@ -264,28 +267,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):
@@ -299,8 +298,9 @@ class AsyncCollection(Collection):
try:
create = getattr(self.model, model_fn(self, 'create'))
except AttributeError:
- error = 'Create is not allowed for %s' % get_class_name(self)
- raise cherrypy.HTTPError(405, error)
+ e = InvalidOperation('KCHAPI0005E', {'resource':
+ get_class_name(self)})
+ raise cherrypy.HTTPError(405, e.message)
params = parse_request()
args = self.model_args + [params]
diff --git a/src/kimchi/control/utils.py b/src/kimchi/control/utils.py
index 9c6878b..ebfdda7 100644
--- a/src/kimchi/control/utils.py
+++ b/src/kimchi/control/utils.py
@@ -30,7 +30,7 @@ import json
from jsonschema import Draft3Validator, ValidationError, FormatChecker
-from kimchi.exception import InvalidParameter
+from kimchi.exception import InvalidParameter, OperationFailed
from kimchi.utils import import_module, listPathModules
@@ -77,10 +77,11 @@ def parse_request():
try:
return json.loads(rawbody)
except ValueError:
- raise cherrypy.HTTPError(400, "Unable to parse JSON request")
+ e = OperationFailed('KCHAPI0006E')
+ raise cherrypy.HTTPError(400, e.message)
else:
- raise cherrypy.HTTPError(415, "This API only supports"
- " 'application/json'")
+ e = OperationFailed('KCHAPI0007E')
+ raise cherrypy.HTTPError(415, e.message)
def internal_redirect(url):
@@ -101,9 +102,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):
--
1.7.10.4