diff --git a/fastapi/applications.py b/fastapi/applications.py index e4b9ab967..59e094436 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(