mirror of https://github.com/tiangolo/fastapi.git
perf: Remove is_async_callable check in request_response
This commit is contained in:
parent
d06ab3f5c7
commit
b8014715ca
|
|
@ -79,18 +79,15 @@ from starlette.websockets import WebSocket
|
|||
from typing_extensions import deprecated
|
||||
|
||||
|
||||
# Copy of starlette.routing.request_response modified to include the
|
||||
# dependencies' AsyncExitStack
|
||||
# Copy of starlette.routing.request_response, modified to include the
|
||||
# dependencies' AsyncExitStack and to remove support for non-awaitable
|
||||
# functions.
|
||||
def request_response(
|
||||
func: Callable[[Request], Awaitable[Response] | Response],
|
||||
func: Callable[[Request], Awaitable[Response]],
|
||||
) -> ASGIApp:
|
||||
"""
|
||||
Takes a function or coroutine `func(request) -> response`,
|
||||
and returns an ASGI application.
|
||||
Takes a coroutine `func(request) -> response` and returns an ASGI application.
|
||||
"""
|
||||
f: Callable[[Request], Awaitable[Response]] = (
|
||||
func if is_async_callable(func) else functools.partial(run_in_threadpool, func) # type:ignore
|
||||
)
|
||||
|
||||
async def app(scope: Scope, receive: Receive, send: Send) -> None:
|
||||
request = Request(scope, receive, send)
|
||||
|
|
@ -102,7 +99,7 @@ def request_response(
|
|||
scope["fastapi_inner_astack"] = request_stack
|
||||
async with AsyncExitStack() as function_stack:
|
||||
scope["fastapi_function_astack"] = function_stack
|
||||
response = await f(request)
|
||||
response = await func(request)
|
||||
await response(scope, receive, send)
|
||||
# Continues customization
|
||||
response_awaited = True
|
||||
|
|
|
|||
Loading…
Reference in New Issue