From 04f7fdec9e74c8486998affe7899e56299466a4b Mon Sep 17 00:00:00 2001 From: Alexander Pushkov Date: Tue, 5 Dec 2023 12:06:28 +0300 Subject: [PATCH] Fix run_in_threadpool call, add support for sync context managers as well --- fastapi/dependencies/utils.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 14ec7f4d1..4021f212c 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -600,11 +600,14 @@ async def solve_dependencies( else: stack = request.scope.get("fastapi_astack") assert isinstance(stack, AsyncExitStack) - called = run_in_threadpool(call, **sub_values) + called = await run_in_threadpool(call, **sub_values) if hasattr(called, "__aenter__"): solved = await stack.enter_async_context(called) + elif hasattr(called, "__enter__"): + cm = contextmanager_in_threadpool(called) + solved = await stack.enter_async_context(cm) else: - solved = await called + solved = called if sub_dependant.name is not None: values[sub_dependant.name] = solved if sub_dependant.cache_key not in dependency_cache: