Browse Source

Add caching logic to get_dependant

pull/14091/head
chris 10 months ago
committed by 山崎ヒカル
parent
commit
d05b2f7266
  1. 1
      fastapi/dependencies/utils.py
  2. 28
      tests/test_dependency_cache.py

1
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(

28
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

Loading…
Cancel
Save