Beispiel #1
0
def build_unhandled_exception_response(exception: Exception) \
        -> ErrorResponse:
    error = Error(
        status=str(HTTPStatus.INTERNAL_SERVER_ERROR.value),
        detail=f'Unhandled exception: {type(exception)}',
        title='Internal Server Error'
    )
    return ErrorResponse(errors=[error])
Beispiel #2
0
def transform_http_exception_to_json_api_errors(exception: HTTPException) \
        -> ErrorResponse:
    """
    Object marshalling for http exceptions (these errors come back differently
    than validation errors). e.g. invalid json in request body.
    """
    request_error = Error(status=str(exception.status_code),
                          detail=exception.detail,
                          title='Bad Request')
    return ErrorResponse(errors=[request_error])
Beispiel #3
0
def transform_validation_error_to_json_api_errors(
        status_code: int, exception: ValidationError) -> ErrorResponse:
    """
    Object marshalling for validation errors.  format pydantic validation
    errors to expected json:api response shape.
    """
    def transform_error(error):
        return Error(
            status=str(status_code),
            detail=error.get('msg'),
            source=ErrorSource(pointer='/' +
                               '/'.join(str(node) for node in error['loc'])),
            title=error.get('type'))

    return ErrorResponse(
        errors=[transform_error(error) for error in exception.errors()])
def test_empty_error_response_valid():
    error_response = {'errors': []}
    validated = ErrorResponse(**error_response)
    assert validated.dict(exclude_unset=True) == error_response
def test_error_response_with_all_fields():
    error_response = errors_wrapper(error_with_all_fields)
    validated = ErrorResponse(**error_response)
    assert validated.dict(exclude_unset=True) == error_response
def test_valid_error_response_fields(error_response):
    validated = ErrorResponse(**error_response)
    assert validated.dict(exclude_unset=True) == error_response