@@ -19,27 +19,30 @@ def collect_func_params(
1919 func : Callable [[Any ], Any ], args : Iterable [Any ], kwargs : Dict [Any , Any ]
2020) -> Dict [str , Any ]:
2121 signature = get_signature (func )
22-
23- params = {}
24- if args :
25- for param , arg_value in zip (signature .parameters .keys (), args ):
26- params [param ] = arg_value
27- if kwargs :
28- params = {** params , ** kwargs }
29- defaults = set (signature .parameters .keys ()).difference (set (params .keys ()))
30- for default_arg in defaults :
31- default = signature .parameters [default_arg ].default
32- if default is inspect .Parameter .empty :
33- continue
34- params [default_arg ] = default
35-
36- signature_params = set (signature .parameters )
37- if set (params ) != signature_params :
38- if "kwargs" in signature_params :
22+ parameters = signature .parameters
23+
24+ # Initialize params with positional arguments
25+ params = {param : arg_value for param , arg_value in zip (parameters .keys (), args )}
26+
27+ # Update params with keyword arguments
28+ params .update (kwargs )
29+
30+ # Set default values for missing arguments
31+ defaults = {
32+ param : param_obj .default
33+ for param , param_obj in parameters .items ()
34+ if param not in params and param_obj .default is not inspect .Parameter .empty
35+ }
36+ params .update (defaults )
37+
38+ # Verify against function signature parameters
39+ signature_keys = set (parameters .keys ())
40+ if params .keys () != signature_keys :
41+ if "kwargs" in signature_keys :
3942 params ["kwargs" ] = kwargs
40- if "args" in signature_params :
43+ if "args" in signature_keys :
4144 params ["args" ] = args
42- if not set (params ).issuperset (signature_params ):
45+ if not set (params ).issuperset (signature_keys ):
4346 logger .error ("Params mismatch for %s.%s" , func .__module__ , func .__name__ )
4447
4548 return params
0 commit comments