provide a way to configure Validation Exceptions to be contextual
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.
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 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.
Ah, I see. Hmm ...
What about custom formatters? https://github.com/Pylons/pyramid_openapi3/blob/29f0180a97d9d33cbe65488aee97af8339c120c4/pyramid_openapi3/tests/test_extract_errors.py#L567
These are actually cool, I can try that, but I still think the feature might be a neat feature especially on large projects.
Yep, I agree!