Browse Source
* ✨ Add dependency cache, with support for disabling it * ✅ Add tests for dependency cache * 📝 Add docs about dependency value cachingpull/294/head
committed by
GitHub
8 changed files with 142 additions and 24 deletions
@ -0,0 +1,68 @@ |
|||||
|
from fastapi import Depends, FastAPI |
||||
|
from starlette.testclient import TestClient |
||||
|
|
||||
|
app = FastAPI() |
||||
|
|
||||
|
counter_holder = {"counter": 0} |
||||
|
|
||||
|
|
||||
|
async def dep_counter(): |
||||
|
counter_holder["counter"] += 1 |
||||
|
return counter_holder["counter"] |
||||
|
|
||||
|
|
||||
|
async def super_dep(count: int = Depends(dep_counter)): |
||||
|
return count |
||||
|
|
||||
|
|
||||
|
@app.get("/counter/") |
||||
|
async def get_counter(count: int = Depends(dep_counter)): |
||||
|
return {"counter": count} |
||||
|
|
||||
|
|
||||
|
@app.get("/sub-counter/") |
||||
|
async def get_sub_counter( |
||||
|
subcount: int = Depends(super_dep), count: int = Depends(dep_counter) |
||||
|
): |
||||
|
return {"counter": count, "subcounter": subcount} |
||||
|
|
||||
|
|
||||
|
@app.get("/sub-counter-no-cache/") |
||||
|
async def get_sub_counter_no_cache( |
||||
|
subcount: int = Depends(super_dep), |
||||
|
count: int = Depends(dep_counter, use_cache=False), |
||||
|
): |
||||
|
return {"counter": count, "subcounter": subcount} |
||||
|
|
||||
|
|
||||
|
client = TestClient(app) |
||||
|
|
||||
|
|
||||
|
def test_normal_counter(): |
||||
|
counter_holder["counter"] = 0 |
||||
|
response = client.get("/counter/") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"counter": 1} |
||||
|
response = client.get("/counter/") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"counter": 2} |
||||
|
|
||||
|
|
||||
|
def test_sub_counter(): |
||||
|
counter_holder["counter"] = 0 |
||||
|
response = client.get("/sub-counter/") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"counter": 1, "subcounter": 1} |
||||
|
response = client.get("/sub-counter/") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"counter": 2, "subcounter": 2} |
||||
|
|
||||
|
|
||||
|
def test_sub_counter_no_cache(): |
||||
|
counter_holder["counter"] = 0 |
||||
|
response = client.get("/sub-counter-no-cache/") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"counter": 2, "subcounter": 1} |
||||
|
response = client.get("/sub-counter-no-cache/") |
||||
|
assert response.status_code == 200 |
||||
|
assert response.json() == {"counter": 4, "subcounter": 3} |
Loading…
Reference in new issue