From d38f8688c5a5819c9f59c96c8998840a0103e220 Mon Sep 17 00:00:00 2001 From: mike0sv Date: Tue, 28 Nov 2023 04:10:18 +0300 Subject: [PATCH] Add better json encoder to collector --- src/evidently/collector/app.py | 3 ++- src/evidently/ui/utils.py | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/evidently/collector/app.py b/src/evidently/collector/app.py index ca1b9d3913..bfd255f9ee 100644 --- a/src/evidently/collector/app.py +++ b/src/evidently/collector/app.py @@ -19,6 +19,7 @@ from evidently.collector.storage import LogEvent from evidently.telemetry import DO_NOT_TRACK_ENV from evidently.telemetry import event_logger +from evidently.ui.utils import NumpyJsonResponse from evidently.ui.utils import authenticated from evidently.ui.utils import set_secret @@ -49,7 +50,7 @@ async def lifespan(app: FastAPI): app = FastAPI(lifespan=lifespan) -collector_write_router = APIRouter(dependencies=[Depends(authenticated)]) +collector_write_router = APIRouter(dependencies=[Depends(authenticated)], default_response_class=NumpyJsonResponse) @collector_write_router.post("/{id}") diff --git a/src/evidently/ui/utils.py b/src/evidently/ui/utils.py index 16efdf47c2..e9015236a3 100644 --- a/src/evidently/ui/utils.py +++ b/src/evidently/ui/utils.py @@ -1,11 +1,13 @@ import json import os import urllib.parse +from typing import Any from typing import Optional import requests from fastapi import Header from fastapi import HTTPException +from starlette.responses import JSONResponse from typing_extensions import Annotated from evidently._pydantic_compat import parse_obj_as @@ -52,3 +54,10 @@ def _request( if response_model is not None: return parse_obj_as(response_model, response.json()) return response + + +class NumpyJsonResponse(JSONResponse): + def render(self, content: Any) -> bytes: + return json.dumps( + content, ensure_ascii=False, allow_nan=True, indent=None, separators=(",", ":"), cls=NumpyEncoder + ).encode("utf-8")