]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
:zap: Make Swagger UI, ReDoc and OpenAPI handlers be coroutines to improve performanc...
authorTrim21 <i@trim21.me>
Mon, 20 May 2019 14:34:33 +0000 (22:34 +0800)
committerSebastián Ramírez <tiangolo@gmail.com>
Mon, 20 May 2019 14:34:33 +0000 (18:34 +0400)
fastapi/applications.py

index e4b9ab967be1b6a47bcb1adeaf5e64135dcabee6..59e094436fbf1b4004e9bc1dca6707228a87ec40 100644 (file)
@@ -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(