Coverage for src / remedapy / decorator.py: 100%
13 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-02 10:52 +0100
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-02 10:52 +0100
1import inspect
2from collections.abc import Callable
3from typing import Any, Concatenate, ParamSpec, TypeVar
5DataT = TypeVar('DataT')
6P = ParamSpec('P')
7R = TypeVar('R')
10def make_data_last(
11 f: Callable[Concatenate[DataT, P], R],
12) -> Callable[Concatenate[DataT, P], R] | Callable[P, Callable[[DataT], R]]:
13 number_of_positional_params = sum(
14 1 for x in inspect.signature(f).parameters.values() if x.kind == inspect.Parameter.POSITIONAL_ONLY
15 )
17 def inner(*args: Any, **kwargs: Any) -> R | Callable[[DataT], R]:
18 if len(args) == number_of_positional_params:
19 return f(*args, **kwargs)
20 return lambda data: f(data, *args, **kwargs)
22 return inner # pyright: ignore[reportReturnType]