24 lines
649 B
Python
24 lines
649 B
Python
import inspect
|
|
from typing import Any, Callable, Dict, Mapping, Sequence
|
|
|
|
|
|
def get_arguments(
|
|
func: Callable, args: Sequence[Any], kwargs: Mapping[str, Any]
|
|
) -> Dict[str, Any]:
|
|
"""Return mapping from parameter names to actual argument values."""
|
|
|
|
signature = inspect.signature(func)
|
|
|
|
defaults = {
|
|
p.name: p.default
|
|
for p in signature.parameters.values()
|
|
if p.default != inspect._empty
|
|
}
|
|
|
|
filter_keys = [
|
|
param.name
|
|
for param in signature.parameters.values()
|
|
if param.kind == param.POSITIONAL_OR_KEYWORD
|
|
]
|
|
|
|
return {**defaults, **dict(zip(filter_keys, args)), **kwargs}
|