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.
This commit is contained in:
Naoki Shima
2023-02-09 15:14:20 +09:00
parent e3b08dda2c
commit 01c895dbbb

View File

@@ -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