import itertools import subprocess from typing import Iterable, List, Literal, TypeVar, Union def call(args, check=True, stdin=None) -> subprocess.CompletedProcess: proc = subprocess.run(args, capture_output=True, check=check, text=True, stdin=stdin) return proc def update_bool_value(old_value: bool, new_value: Union[bool, Literal["toggle"]]) -> bool: if new_value == "toggle": return not old_value if type(new_value) != bool: raise Exception(f"Invalid type of new_value: Expected bool or literal \"toggle\", got type={type(new_value)!r}, value={new_value!r}") return new_value T = TypeVar("T") def limit_iter(iter: Iterable[T], limit: int) -> List[T]: return list(itertools.islice(iter, limit))