pyramid_openapi3 icon indicating copy to clipboard operation
pyramid_openapi3 copied to clipboard

provide a way to configure Validation Exceptions to be contextual

Open PKgotso opened this issue 3 years ago • 5 comments

I am looking for a way to add context to RequestValidationError. Instead of it returning the error from being unable to cast to a type, I want to be able to give it the message and append the value.

Eg Failed to cast hello to type integer

Allowing The number hello is not a valid number

I think this will make it extremely reusable. If this is available already, I couldn't find it in the docs.

PKgotso avatar Oct 05 '22 15:10 PKgotso

Have you looked at https://github.com/teamniteo/pyramid-realworld-example-app yet? There is some basic error overriding there, might serve as an inspiration for what you are trying to achieve: https://github.com/teamniteo/pyramid-realworld-example-app/blob/master/src/conduit/openapi.py#L71

zupo avatar Oct 06 '22 10:10 zupo

@zupo Thank you for those, however this is not what I mean.

Lets use this: https://github.com/teamniteo/pyramid-realworld-example-app/blob/master/src/conduit/comment/views.py

@view_config(route_name="comments", renderer="json", request_method="GET", openapi=True)
def comments(request: Request) -> MultipleCommentsResponse:
    """Get recent comments on the given article."""
    article = object_or_404(
        Article.by_slug(
            request.openapi_validated.parameters["path"]["slug"], db=request.db
        )
    )
    return {"comments": article.comments}

On the above, if the slug was a requirement and meant to be an integer and the user supplied a string, the RequestValidationError would be Failed to cast slug to type integer.

What I want to be able to do is to change this error message to something meaningful e.g `Invalid slug string provided.

I am aware you can override the the response using this config: @exception_view_config(RequestValidationError) however, this does not allow individual views to define their own custom error message.

PKgotso avatar Oct 06 '22 11:10 PKgotso

Ah, I see. Hmm ...

What about custom formatters? https://github.com/Pylons/pyramid_openapi3/blob/29f0180a97d9d33cbe65488aee97af8339c120c4/pyramid_openapi3/tests/test_extract_errors.py#L567

zupo avatar Oct 06 '22 16:10 zupo

These are actually cool, I can try that, but I still think the feature might be a neat feature especially on large projects.

PKgotso avatar Oct 06 '22 16:10 PKgotso

Yep, I agree!

zupo avatar Oct 06 '22 17:10 zupo