From f1c072bd0a9a69738b82e9b8526d81beae4f26c0 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sat, 8 Jun 2024 22:53:56 -0400 Subject: [PATCH] Fix issue with how we render binary 422 errors json_encoder assumes it's not binary, but our error messages may include some binary stuff. --- etebase_server/fastapi/main.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/etebase_server/fastapi/main.py b/etebase_server/fastapi/main.py index 5d87a84..2ae01f9 100644 --- a/etebase_server/fastapi/main.py +++ b/etebase_server/fastapi/main.py @@ -1,8 +1,9 @@ +import typing as t + from django.conf import settings # Not at the top of the file because we first need to setup django from fastapi import FastAPI, Request, status -from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.trustedhost import TrustedHostMiddleware @@ -77,9 +78,12 @@ def create_application(prefix="", middlewares=[]): @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): + from pydantic import TypeAdapter + + errors = TypeAdapter(t.Dict[str, t.Any]) return MsgpackResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - content=jsonable_encoder({"detail": exc.errors()}), + content=errors.dump_python({"detail": exc.errors()}), ) app.mount(settings.STATIC_URL, StaticFiles(directory=settings.STATIC_ROOT), name="static")