From cbe99f4c5797b487961b8dacaa2c1064d751e74a Mon Sep 17 00:00:00 2001 From: Alexander Pushkov Date: Tue, 5 Dec 2023 12:06:23 +0300 Subject: [PATCH] Add support for using asynccontextmanager as a dependency --- fastapi/dependencies/utils.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 4e88410a5..14ec7f4d1 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -598,7 +598,13 @@ async def solve_dependencies( elif is_coroutine_callable(call): solved = await call(**sub_values) else: - solved = await run_in_threadpool(call, **sub_values) + stack = request.scope.get("fastapi_astack") + assert isinstance(stack, AsyncExitStack) + called = run_in_threadpool(call, **sub_values) + if hasattr(called, "__aenter__"): + solved = await stack.enter_async_context(called) + else: + solved = await called if sub_dependant.name is not None: values[sub_dependant.name] = solved if sub_dependant.cache_key not in dependency_cache: