@@ -19,27 +19,30 @@ def collect_func_params(
19
19
func : Callable [[Any ], Any ], args : Iterable [Any ], kwargs : Dict [Any , Any ]
20
20
) -> Dict [str , Any ]:
21
21
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 :
39
42
params ["kwargs" ] = kwargs
40
- if "args" in signature_params :
43
+ if "args" in signature_keys :
41
44
params ["args" ] = args
42
- if not set (params ).issuperset (signature_params ):
45
+ if not set (params ).issuperset (signature_keys ):
43
46
logger .error ("Params mismatch for %s.%s" , func .__module__ , func .__name__ )
44
47
45
48
return params
0 commit comments