Compare commits

..

2 Commits

Author SHA1 Message Date
jar3b
6ba671532b 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
2020-11-27 02:02:54 +03:00
jar3b
efbaaa5e6f fix: to push 2020-11-25 16:59:10 +03:00
3 changed files with 8 additions and 1 deletions

View File

@@ -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")
)

View File

@@ -172,6 +172,7 @@ async def oas_ui(request):
static_url = request.app.router["static"].url_for(filename="")
spec_url = request.app.router["spec"].url_for()
if request.scheme != request.headers.get('x-forwarded-proto', request.scheme):
request = request.clone(scheme=request.headers['x-forwarded-proto'])
host = request.url.origin()

View File

@@ -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)