mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-02 09:26:08 -05:00
Merge pull request #732 from alphagov/change-v2-error-resp
Change v2 error resp
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user