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