From 01c895dbbb006ef264c8b99764022126ac13715f Mon Sep 17 00:00:00 2001 From: Naoki Shima Date: Thu, 9 Feb 2023 15:14:20 +0900 Subject: [PATCH] Support functions with VAR_KEYWORD parameter decorating function with **kwargs parameter with @cache causes ValueError. ValueError: wrong parameter order: variadic keyword parameter before keyword-only parameter We need to inject request / response parameters before VAR_KEYWORD parameter. --- fastapi_cache/decorator.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fastapi_cache/decorator.py b/fastapi_cache/decorator.py index 2d8ec54..41e6b9e 100644 --- a/fastapi_cache/decorator.py +++ b/fastapi_cache/decorator.py @@ -48,7 +48,13 @@ def cache( (param for param in signature.parameters.values() if param.annotation is Response), 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: parameters.append( inspect.Parameter( @@ -65,6 +71,7 @@ def cache( kind=inspect.Parameter.KEYWORD_ONLY, ), ) + parameters.extend(extra_params) if parameters: signature = signature.replace(parameters=parameters) func.__signature__ = signature