From: Trim21 Date: Mon, 20 May 2019 14:34:33 +0000 (+0800) Subject: :zap: Make Swagger UI, ReDoc and OpenAPI handlers be coroutines to improve performanc... X-Git-Tag: 0.23.0~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=01b43e6e25a0bac85f2612cbb44a5237e976d6ed;p=thirdparty%2Ffastapi%2Ffastapi.git :zap: Make Swagger UI, ReDoc and OpenAPI handlers be coroutines to improve performance (#241) --- diff --git a/fastapi/applications.py b/fastapi/applications.py index e4b9ab967b..59e094436f 100644 --- a/fastapi/applications.py +++ b/fastapi/applications.py @@ -9,7 +9,7 @@ from starlette.applications import Starlette from starlette.exceptions import ExceptionMiddleware, HTTPException from starlette.middleware.errors import ServerErrorMiddleware from starlette.requests import Request -from starlette.responses import JSONResponse, Response +from starlette.responses import HTMLResponse, JSONResponse, Response from starlette.routing import BaseRoute @@ -79,29 +79,28 @@ class FastAPI(Starlette): def setup(self) -> None: if self.openapi_url: - self.add_route( - self.openapi_url, - lambda req: JSONResponse(self.openapi()), - include_in_schema=False, - ) + + async def openapi(req: Request) -> JSONResponse: + return JSONResponse(self.openapi()) + + self.add_route(self.openapi_url, openapi, include_in_schema=False) + openapi_url = self.openapi_prefix + self.openapi_url if self.openapi_url and self.docs_url: - self.add_route( - self.docs_url, - lambda r: get_swagger_ui_html( - openapi_url=self.openapi_prefix + self.openapi_url, - title=self.title + " - Swagger UI", - ), - include_in_schema=False, - ) + + async def swagger_ui_html(req: Request) -> HTMLResponse: + return get_swagger_ui_html( + openapi_url=openapi_url, title=self.title + " - Swagger UI" + ) + + self.add_route(self.docs_url, swagger_ui_html, include_in_schema=False) if self.openapi_url and self.redoc_url: - self.add_route( - self.redoc_url, - lambda r: get_redoc_html( - openapi_url=self.openapi_prefix + self.openapi_url, - title=self.title + " - ReDoc", - ), - include_in_schema=False, - ) + + async def redoc_html(req: Request) -> HTMLResponse: + return get_redoc_html( + openapi_url=openapi_url, title=self.title + " - ReDoc" + ) + + self.add_route(self.redoc_url, redoc_html, include_in_schema=False) self.add_exception_handler(HTTPException, http_exception) def add_api_route(