diff --git a/mitm_tooling/utilities/python_utils.py b/mitm_tooling/utilities/python_utils.py index c766c0dae8ca02e96116f3500f9c662d749f3489..b2c18d711576562ba7b23da798cffad7b4252efa 100644 --- a/mitm_tooling/utilities/python_utils.py +++ b/mitm_tooling/utilities/python_utils.py @@ -90,18 +90,33 @@ def inner_list_concat(d1: dict[K, list[Any]], d2: dict[K, list[Any]]) -> dict[K, return res -def pick_from_mapping(d: Mapping[K, T], keys: Sequence[K]) -> list[tuple[K, T]]: - return [(k, d[k]) for k in keys] +@overload +def pick_from_mapping(d: Mapping[K, T], keys: Sequence[K], *, flatten: bool = True) -> list[T]: ... @overload -def unique(*its: Iterable[T]) -> list[T]: - ... +def pick_from_mapping(d: Mapping[K, T], keys: Sequence[K], *, flatten: bool = False) -> list[tuple[K, T]]: ... + + +@overload +def pick_from_mapping(d: Mapping[K, T], keys: Sequence[K], *, flatten: bool) -> list[T] | list[tuple[K, T]]: ... + +# TODO maybe fix type annotations? +def pick_from_mapping(d: Mapping[K, T], keys: Sequence[K], *, flatten: bool = False) -> list[T] | list[tuple[K, T]]: + if flatten: + return [d[k] for k in keys] + else: + return [(k, d[k]) for k in keys] Ts = TypeVarTuple('Ts') +@overload +def unique(*its: Iterable[T]) -> list[T]: + ... + + def unique(*its: Iterable[Union[*Ts]]) -> list[Union[Unpack[Ts]]]: return list(set(itertools.chain(*its)))