| 1234567891011121314151617181920212223 |
- import json
- import math
- from fastapi.responses import JSONResponse
- def _sanitize(obj):
- """Replace NaN/Infinity with None so every payload remains valid JSON."""
- if isinstance(obj, float):
- if math.isnan(obj) or math.isinf(obj):
- return None
- if isinstance(obj, dict):
- return {k: _sanitize(v) for k, v in obj.items()}
- if isinstance(obj, list):
- return [_sanitize(i) for i in obj]
- return obj
- class SafeJSONResponse(JSONResponse):
- """JSONResponse variant that normalizes non-JSON float values."""
- def render(self, content) -> bytes:
- return json.dumps(_sanitize(content), ensure_ascii=False).encode("utf-8")
|