| from typing import Any
|
|
|
| from starlette.responses import FileResponse as FileResponse
|
| from starlette.responses import HTMLResponse as HTMLResponse
|
| from starlette.responses import JSONResponse as JSONResponse
|
| from starlette.responses import PlainTextResponse as PlainTextResponse
|
| from starlette.responses import RedirectResponse as RedirectResponse
|
| from starlette.responses import Response as Response
|
| from starlette.responses import StreamingResponse as StreamingResponse
|
|
|
| try:
|
| import ujson
|
| except ImportError:
|
| ujson = None
|
|
|
|
|
| try:
|
| import orjson
|
| except ImportError:
|
| orjson = None
|
|
|
|
|
| class UJSONResponse(JSONResponse):
|
| """
|
| JSON response using the high-performance ujson library to serialize data to JSON.
|
|
|
| Read more about it in the
|
| [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/).
|
| """
|
|
|
| def render(self, content: Any) -> bytes:
|
| assert ujson is not None, "ujson must be installed to use UJSONResponse"
|
| return ujson.dumps(content, ensure_ascii=False).encode("utf-8")
|
|
|
|
|
| class ORJSONResponse(JSONResponse):
|
| """
|
| JSON response using the high-performance orjson library to serialize data to JSON.
|
|
|
| Read more about it in the
|
| [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/).
|
| """
|
|
|
| def render(self, content: Any) -> bytes:
|
| assert orjson is not None, "orjson must be installed to use ORJSONResponse"
|
| return orjson.dumps(
|
| content, option=orjson.OPT_NON_STR_KEYS | orjson.OPT_SERIALIZE_NUMPY
|
| )
|
|
|