mirror of
https://github.com/long2ice/fastapi-cache.git
synced 2026-03-25 04:57:54 +00:00
Merge pull request #118 from naoki-jarvisml/var_keyword
Support functions with VAR_KEYWORD parameter
This commit is contained in:
@@ -42,6 +42,13 @@ async def get_date():
|
|||||||
async def get_datetime(request: Request, response: Response):
|
async def get_datetime(request: Request, response: Response):
|
||||||
return {"now": pendulum.now()}
|
return {"now": pendulum.now()}
|
||||||
|
|
||||||
|
@cache(namespace="test")
|
||||||
|
async def func_kwargs(*unused_args, **kwargs):
|
||||||
|
return kwargs
|
||||||
|
|
||||||
|
@app.get("/kwargs")
|
||||||
|
async def get_kwargs(name: str):
|
||||||
|
return await func_kwargs(name, name=name)
|
||||||
|
|
||||||
@app.get("/sync-me")
|
@app.get("/sync-me")
|
||||||
@cache(namespace="test")
|
@cache(namespace="test")
|
||||||
|
|||||||
@@ -48,7 +48,13 @@ def cache(
|
|||||||
(param for param in signature.parameters.values() if param.annotation is Response),
|
(param for param in signature.parameters.values() if param.annotation is Response),
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
parameters = [*signature.parameters.values()]
|
parameters = []
|
||||||
|
extra_params = []
|
||||||
|
for p in signature.parameters.values():
|
||||||
|
if p.kind <= inspect.Parameter.KEYWORD_ONLY:
|
||||||
|
parameters.append(p)
|
||||||
|
else:
|
||||||
|
extra_params.append(p)
|
||||||
if not request_param:
|
if not request_param:
|
||||||
parameters.append(
|
parameters.append(
|
||||||
inspect.Parameter(
|
inspect.Parameter(
|
||||||
@@ -65,6 +71,7 @@ def cache(
|
|||||||
kind=inspect.Parameter.KEYWORD_ONLY,
|
kind=inspect.Parameter.KEYWORD_ONLY,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
parameters.extend(extra_params)
|
||||||
if parameters:
|
if parameters:
|
||||||
signature = signature.replace(parameters=parameters)
|
signature = signature.replace(parameters=parameters)
|
||||||
func.__signature__ = signature
|
func.__signature__ = signature
|
||||||
|
|||||||
@@ -67,3 +67,9 @@ def test_cache_response_obj() -> None:
|
|||||||
assert get_cache_response.json() == {"a": 1}
|
assert get_cache_response.json() == {"a": 1}
|
||||||
assert get_cache_response.headers.get("cache-control")
|
assert get_cache_response.headers.get("cache-control")
|
||||||
assert get_cache_response.headers.get("etag")
|
assert get_cache_response.headers.get("etag")
|
||||||
|
|
||||||
|
def test_kwargs() -> None:
|
||||||
|
with TestClient(app) as client:
|
||||||
|
name = "Jon"
|
||||||
|
response = client.get("/kwargs", params = {"name": name})
|
||||||
|
assert response.json() == {"name": name}
|
||||||
|
|||||||
Reference in New Issue
Block a user