From 4cc946eb009aa15d6e752888d31ead8e9d25bc2a Mon Sep 17 00:00:00 2001 From: Martijn Pieters Date: Fri, 28 Apr 2023 18:43:40 +0100 Subject: [PATCH] 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. --- examples/in_memory/main.py | 11 +++++++++++ fastapi_cache/decorator.py | 2 +- tests/test_decorator.py | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/in_memory/main.py b/examples/in_memory/main.py index d79007d..4584f82 100644 --- a/examples/in_memory/main.py +++ b/examples/in_memory/main.py @@ -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()) diff --git a/fastapi_cache/decorator.py b/fastapi_cache/decorator.py index 23ea496..79bf07e 100644 --- a/fastapi_cache/decorator.py +++ b/fastapi_cache/decorator.py @@ -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: diff --git a/tests/test_decorator.py b/tests/test_decorator.py index a037bed..33c4f9f 100644 --- a/tests/test_decorator.py +++ b/tests/test_decorator.py @@ -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}