Merge pull request #732 from alphagov/change-v2-error-resp

Change v2 error resp
This commit is contained in:
Rebecca Law
2016-11-11 11:07:59 +00:00
committed by GitHub
9 changed files with 171 additions and 64 deletions

View File

@@ -16,10 +16,15 @@ class AuthError(Exception):
self.code = code
def to_dict_v2(self):
return {'code': self.code,
'message': self.short_message,
'fields': self.message,
'link': 'link to docs'}
return {
'status_code': self.code,
"errors": [
{
"error": "AuthError",
"message": self.short_message
}
]
}
def get_auth_token(req):

View File

@@ -10,7 +10,6 @@ from app.authentication.auth import AuthError
class InvalidRequest(Exception):
code = None
link = None
fields = []
def __init__(self, message, status_code):
@@ -26,10 +25,13 @@ class InvalidRequest(Exception):
Version 2 of the public api error response.
'''
return {
"code": self.code,
"message": self.message,
"link": self.link,
"fields": self.fields
"status_code": self.status_code,
"errors": [
{
"error": self.__class__.__name__,
"message": self.message
}
]
}
def __str__(self):

View File

@@ -1,4 +1,5 @@
import json
from jsonschema import Draft4Validator, ValidationError
@@ -16,13 +17,11 @@ def build_error_message(errors, schema):
field = "'{}' {}".format(e.path[0], e.schema.get('validationMessage')) if e.schema.get(
'validationMessage') else e.message
s = field.split("'")
field = {s[1]: s[2].strip()}
field = {"error": "ValidationError", "message": "{}{}".format(s[1], s[2])}
fields.append(field)
message = {
"code": "1001",
"message": "Validation error occurred - {}".format(schema['title']),
"link": "link to error documentation (not yet implemented)",
"fields": fields
"status_code": 400,
"errors": fields
}
return json.dumps(message)

View File

@@ -6,7 +6,7 @@ If the definition is specific to a version put it in a definition file in the ve
uuid = {
"type": "string",
"pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$",
"validationMessage": "not a valid UUID",
"validationMessage": "is not a valid UUID",
"code": "1001", # yet to be implemented
"link": "link to our error documentation not yet implemented"
}

View File

@@ -1,19 +1,14 @@
import json
from flask import jsonify, current_app
from jsonschema import ValidationError
from sqlalchemy.exc import DataError
from sqlalchemy.orm.exc import NoResultFound
from app.authentication.auth import AuthError
from app.errors import InvalidRequest
class TooManyRequestsError(InvalidRequest):
status_code = 429
# code and link will be in a static file
code = "10429"
link = "link to docs"
message_template = 'Exceeded send limits ({}) for today'
def __init__(self, sending_limit):
@@ -22,8 +17,6 @@ class TooManyRequestsError(InvalidRequest):
class BadRequestError(InvalidRequest):
status_code = 400
code = 10400
link = "link to documentation"
message = "An error occurred"
def __init__(self, fields=[], message=None):
@@ -47,7 +40,8 @@ def register_errors(blueprint):
@blueprint.errorhandler(DataError)
def no_result_found(e):
current_app.logger.exception(e)
return jsonify(message="No result found"), 404
return jsonify(status_code=404,
errors=[{"error": e.__class__.__name__, "message": "No result found"}]), 404
@blueprint.errorhandler(AuthError)
def auth_error(error):
@@ -56,4 +50,5 @@ def register_errors(blueprint):
@blueprint.errorhandler(Exception)
def internal_server_error(error):
current_app.logger.exception(error)
return jsonify(message='Internal server error'), 500
return jsonify(status_code=500,
errors=[{"error": error.__class__.__name__, "message": 'Internal server error'}]), 500