From 6ba671532bfa1c7f3c2f4763473d21e6c332a0af Mon Sep 17 00:00:00 2001 From: jar3b Date: Fri, 27 Nov 2020 02:02:54 +0300 Subject: [PATCH] feat: add `raise_validation_errors` parameter to `setup()` To control how pydantic.ValidationError will be handled, own handler (return json) or raise exception to allow intercept in aiohttp middleware --- aiohttp_pydantic/oas/__init__.py | 3 +++ aiohttp_pydantic/view.py | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/aiohttp_pydantic/oas/__init__.py b/aiohttp_pydantic/oas/__init__.py index ef45dcf..71f69ad 100644 --- a/aiohttp_pydantic/oas/__init__.py +++ b/aiohttp_pydantic/oas/__init__.py @@ -13,10 +13,13 @@ def setup( apps_to_expose: Iterable[web.Application] = (), url_prefix: str = "/oas", enable: bool = True, + raise_validation_errors: bool = False, ): if enable: oas_app = web.Application() oas_app["apps to expose"] = tuple(apps_to_expose) or (app,) + for a in oas_app["apps to expose"]: + a['raise_validation_errors'] = raise_validation_errors oas_app["index template"] = jinja2.Template( resources.read_text("aiohttp_pydantic.oas", "index.j2") ) diff --git a/aiohttp_pydantic/view.py b/aiohttp_pydantic/view.py index e04f71e..241e0ff 100644 --- a/aiohttp_pydantic/view.py +++ b/aiohttp_pydantic/view.py @@ -83,7 +83,10 @@ def inject_params( else: injector.inject(self.request, args, kwargs) except ValidationError as error: - return json_response(text=error.json(), status=400) + if self.request.app['raise_validation_errors']: + raise + else: + return json_response(text=error.json(), status=400) return await handler(self, *args, **kwargs)