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

1from typing import Any, Callable 

2 

3 

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 

11 

12 

13def call_with_signature(function: Callable, *args: tuple, kwargs: dict) -> Any: 

14 import inspect 

15 

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)