Coverage for signals/utils/inspect.py: 93%
14 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-16 09:17 +0330
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-16 09:17 +0330
1import functools
2import inspect
5@functools.lru_cache(maxsize=512)
6def _get_func_parameters(func, remove_first):
7 parameters = tuple(inspect.signature(func).parameters.values())
8 if remove_first:
9 parameters = parameters[1:]
10 return parameters
13def _get_callable_parameters(meth_or_func):
14 is_method = inspect.ismethod(meth_or_func)
15 func = meth_or_func.__func__ if is_method else meth_or_func
16 return _get_func_parameters(func, remove_first=is_method)
19def func_accepts_kwargs(func):
20 """Return True if function 'func' accepts keyword arguments **kwargs."""
21 return any(p for p in _get_callable_parameters(func) if p.kind == p.VAR_KEYWORD)