From d05b2f7266bf7a94d31880dedd58a273e84fdf9f Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 20 Sep 2025 02:34:55 +0800 Subject: [PATCH] Add caching logic to get_dependant --- fastapi/dependencies/utils.py | 1 + tests/test_dependency_cache.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 081b63a8b..0611f1784 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -610,6 +610,7 @@ async def solve_dependencies( call=call, name=sub_dependant.name, security_scopes=sub_dependant.security_scopes, + use_cache=sub_dependant.use_cache, ) solved_result = await solve_dependencies( diff --git a/tests/test_dependency_cache.py b/tests/test_dependency_cache.py index 08fb9b74f..c7d1c94cd 100644 --- a/tests/test_dependency_cache.py +++ b/tests/test_dependency_cache.py @@ -48,6 +48,14 @@ async def get_scope_counter( } +@app.get("/override-no-cache/") +async def get_override_no_cache( + first: int = Depends(dep_counter, use_cache=False), + second: int = Depends(dep_counter, use_cache=False), +): + return {"first": first, "second": second} + + client = TestClient(app) @@ -89,3 +97,23 @@ def test_security_cache(): response = client.get("/scope-counter/") assert response.status_code == 200, response.text assert response.json() == {"counter": 3, "scope_counter_1": 4, "scope_counter_2": 4} + + +def test_dependency_override_respects_use_cache_false(): + counter_holder["counter"] = 0 + + async def override_dep_counter(): + counter_holder["counter"] += 1 + return counter_holder["counter"] + + app.dependency_overrides[dep_counter] = override_dep_counter + try: + response = client.get("/override-no-cache/") + assert response.status_code == 200, response.text + assert response.json() == {"first": 1, "second": 2} + response = client.get("/override-no-cache/") + assert response.status_code == 200, response.text + assert response.json() == {"first": 3, "second": 4} + finally: + app.dependency_overrides.pop(dep_counter, None) + counter_holder["counter"] = 0