Coverage for src/zapy/utils/functools.py: 100%
24 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-10 19:35 +0000
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-10 19:35 +0000
1from typing import Any, Callable
4async def empty_function(*args: tuple[Any]) -> Any | None:
5 if len(args) == 0:
6 return None
7 elif len(args) == 1:
8 return args[0]
9 else:
10 return args
13def call_with_signature(function: Callable, *args: tuple, kwargs: dict) -> Any:
14 import inspect
16 sig = inspect.signature(function)
17 my_args = list(args)
18 my_kwargs = {}
19 args_tuples = list(sig.parameters.items())
20 for k, v in args_tuples[len(my_args) :]:
21 cls = v.annotation
22 if inspect.Signature.empty == cls:
23 err_msg = f"Undefined type for '{k}' argument on method '{function.__name__}'"
24 raise ValueError(err_msg)
25 if cls not in kwargs:
26 err_msg = f"Missing type of {cls} for argument '{k}' on method '{function.__name__}'"
27 raise ValueError(err_msg)
28 value = kwargs.get(cls)
29 my_kwargs[k] = value
30 return function(*my_args, **my_kwargs)