""" Error details API """ from flask import url_for from enum import Enum from endpoints.api import (resource, nickname, ApiResource, path_param, define_json_response) from endpoints.exception import NotFound, ApiErrorType, ERROR_DESCRIPTION def error_view(error_type): return { 'type': url_for('error', error_type=error_type, _external=True), 'title': error_type, 'description': ERROR_DESCRIPTION[error_type] } @resource('/v1/error/') @path_param('error_type', 'The error code identifying the type of error.') class Error(ApiResource): """ Resource for Error Descriptions""" schemas = { 'ApiErrorDescription': { 'type': 'object', 'description': 'Description of an error', 'required': [ 'type', 'description', 'title', ], 'properties': { 'type': { 'type': 'string', 'description': 'A reference to the error type resource' }, 'title': { 'type': 'string', 'description': 'The title of the error. Can be used to uniquely identify the kind of error.', 'enum': list(ApiErrorType.__members__) }, 'description': { 'type': 'string', 'description': 'A more detailed description of the error that may include help for fixing the issue.' } }, }, } @define_json_response('ApiErrorDescription') @nickname('getErrorDescription') def get(self, error_type): """ Get a detailed description of the error """ if error_type in ERROR_DESCRIPTION.keys(): return error_view(error_type) raise NotFound()