mirror of
https://github.com/long2ice/fastapi-cache.git
synced 2026-03-24 20:47:54 +00:00
fix #424, no-cache should store the result to cache
This commit is contained in:
@@ -72,7 +72,7 @@ def _uncacheable(request: Optional[Request]) -> bool:
|
|||||||
Returns true if:
|
Returns true if:
|
||||||
- Caching has been disabled globally
|
- Caching has been disabled globally
|
||||||
- This is not a GET request
|
- This is not a GET request
|
||||||
- The request has a Cache-Control header with a value of "no-store" or "no-cache"
|
- The request has a Cache-Control header with a value of "no-store"
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if not FastAPICache.get_enable():
|
if not FastAPICache.get_enable():
|
||||||
@@ -81,7 +81,7 @@ def _uncacheable(request: Optional[Request]) -> bool:
|
|||||||
return False
|
return False
|
||||||
if request.method != "GET":
|
if request.method != "GET":
|
||||||
return True
|
return True
|
||||||
return request.headers.get("Cache-Control") in ("no-store", "no-cache")
|
return request.headers.get("Cache-Control") == "no-store"
|
||||||
|
|
||||||
|
|
||||||
def cache(
|
def cache(
|
||||||
@@ -182,7 +182,7 @@ def cache(
|
|||||||
)
|
)
|
||||||
ttl, cached = 0, None
|
ttl, cached = 0, None
|
||||||
|
|
||||||
if cached is None: # cache miss
|
if cached is None or (request is not None and request.headers.get("Cache-Control") == "no-cache") : # cache miss
|
||||||
result = await ensure_async_func(*args, **kwargs)
|
result = await ensure_async_func(*args, **kwargs)
|
||||||
to_cache = coder.encode(result)
|
to_cache = coder.encode(result)
|
||||||
|
|
||||||
|
|||||||
@@ -112,3 +112,28 @@ def test_alternate_injected_namespace() -> None:
|
|||||||
response = client.get("/namespaced_injection")
|
response = client.get("/namespaced_injection")
|
||||||
assert response.headers.get("X-FastAPI-Cache") == "MISS"
|
assert response.headers.get("X-FastAPI-Cache") == "MISS"
|
||||||
assert response.json() == {"__fastapi_cache_request": 42, "__fastapi_cache_response": 17}
|
assert response.json() == {"__fastapi_cache_request": 42, "__fastapi_cache_response": 17}
|
||||||
|
|
||||||
|
def test_cache_control() -> None:
|
||||||
|
with TestClient(app) as client:
|
||||||
|
response = client.get("/uncached_put")
|
||||||
|
assert "X-FastAPI-Cache" not in response.headers
|
||||||
|
assert response.json() == {"value": 1}
|
||||||
|
|
||||||
|
# HIT
|
||||||
|
response = client.get("/uncached_put")
|
||||||
|
assert response.headers.get("X-FastAPI-Cache") == "HIT"
|
||||||
|
assert response.json() == {"value": 1}
|
||||||
|
|
||||||
|
# no-cache
|
||||||
|
response = client.get("/uncached_put", headers={"Cache-Control": "no-cache"})
|
||||||
|
assert response.json() == {"value": 2}
|
||||||
|
|
||||||
|
response = client.get("/uncached_put")
|
||||||
|
assert response.json() == {"value": 2}
|
||||||
|
|
||||||
|
# no-store
|
||||||
|
response = client.get("/uncached_put", headers={"Cache-Control": "no-store"})
|
||||||
|
assert response.json() == {"value": 3}
|
||||||
|
|
||||||
|
response = client.get("/uncached_put")
|
||||||
|
assert response.json() == {"value": 2}
|
||||||
|
|||||||
Reference in New Issue
Block a user