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