Fix handling non-GET requests

The `request` parameter being passed in was just a hold-over from an
earlier refactoring. Added tests to ensure that this edge case keeps
working.
This commit is contained in:
Martijn Pieters
2023-04-28 18:43:40 +01:00
parent 1ded0ed50e
commit 4cc946eb00
3 changed files with 20 additions and 1 deletions

View File

@@ -95,6 +95,17 @@ async def pydantic_instance() -> Item:
return Item(name="Something", description="An instance of a Pydantic model", price=10.5)
put_ret = 0
@app.put("/uncached_put")
@cache(namespace="test", expire=5)
async def uncached_put():
global put_ret
put_ret = put_ret + 1
return {"value": put_ret}
@app.on_event("startup")
async def startup():
FastAPICache.init(InMemoryBackend())

View File

@@ -152,7 +152,7 @@ def cache(
return ret
if request.method != "GET":
return await ensure_async_func(request, *args, **kwargs)
return await ensure_async_func(*args, **kwargs)
if_none_match = request.headers.get("if-none-match")
if ret is not None:

View File

@@ -86,3 +86,11 @@ def test_pydantic_model() -> None:
r1 = client.get("/pydantic_instance").json()
r2 = client.get("/pydantic_instance").json()
assert r1 == r2
def test_non_get() -> None:
with TestClient(app) as client:
response = client.put("/uncached_put")
assert response.json() == {"value": 1}
response = client.put("/uncached_put")
assert response.json() == {"value": 2}