from collections.abc import Iterator, Sequence
from pathlib import Path
from textwrap import dedent
-from typing import Callable, ContextManager, Optional, TextIO, TypeVar, Union, cast
+from typing import Callable, ContextManager, Optional, TextIO, Union, cast
from mkosi.btrfs import btrfs_maybe_snapshot_subvolume
from mkosi.config import (
MKOSI_COMMANDS_SUDO = (Verb.shell, Verb.boot)
-T = TypeVar("T")
-
-
@contextlib.contextmanager
def mount_image(state: MkosiState) -> Iterator[None]:
with complete_step("Mounting image…", "Unmounting image…"), contextlib.ExitStack() as stack:
return "auto" if f is ConfigFeature.auto else yes_no(f == ConfigFeature.enabled)
-def none_to_na(s: Optional[T]) -> Union[T, str]:
- return "n/a" if s is None else s
+def none_to_na(s: Optional[object]) -> str:
+ return "n/a" if s is None else str(s)
-def none_to_none(s: Optional[T]) -> Union[T, str]:
- return "none" if s is None else s
+def none_to_none(s: Optional[object]) -> str:
+ return "none" if s is None else str(s)
-def none_to_default(s: Optional[T]) -> Union[T, str]:
- return "default" if s is None else s
+def none_to_default(s: Optional[object]) -> str:
+ return "default" if s is None else str(s)
def path_or_none(