From: Daan De Meyer Date: Wed, 22 Jan 2025 11:27:52 +0000 (+0100) Subject: Remove mkosi.types to avoid conflict with standard library types.py X-Git-Tag: v25~12^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d26194bef2e445a24356236c68733c31fb92a8bd;p=thirdparty%2Fmkosi.git Remove mkosi.types to avoid conflict with standard library types.py The process related stuff is moved to run.py and the rest is moved to util.py --- diff --git a/kernel-install/50-mkosi.install b/kernel-install/50-mkosi.install index 865e6d554..f35572e66 100755 --- a/kernel-install/50-mkosi.install +++ b/kernel-install/50-mkosi.install @@ -14,7 +14,7 @@ from mkosi.initrd import KernelInstallContext from mkosi.log import log_setup from mkosi.run import run, uncaught_exception_handler from mkosi.sandbox import umask -from mkosi.types import PathString +from mkosi.util import PathString def we_are_wanted(context: KernelInstallContext) -> bool: diff --git a/kernel-install/51-mkosi-addon.install b/kernel-install/51-mkosi-addon.install index e889fea15..be017ef0c 100755 --- a/kernel-install/51-mkosi-addon.install +++ b/kernel-install/51-mkosi-addon.install @@ -8,7 +8,7 @@ from pathlib import Path from mkosi.initrd import KernelInstallContext from mkosi.log import log_setup from mkosi.run import run, uncaught_exception_handler -from mkosi.types import PathString +from mkosi.util import PathString @uncaught_exception_handler() diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 1233b4403..e4ff8b0d8 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -126,9 +126,9 @@ from mkosi.sandbox import ( ) from mkosi.sysupdate import run_sysupdate from mkosi.tree import copy_tree, make_tree, move_tree, rmtree -from mkosi.types import PathString from mkosi.user import INVOKING_USER from mkosi.util import ( + PathString, current_home_dir, flatten, flock, diff --git a/mkosi/addon.py b/mkosi/addon.py index 37d1d3d09..9f2786bb8 100644 --- a/mkosi/addon.py +++ b/mkosi/addon.py @@ -12,8 +12,7 @@ from mkosi.documentation import show_docs from mkosi.initrd import include_system_config, initrd_common_args, initrd_finalize, process_crypttab from mkosi.log import log_setup from mkosi.run import run, uncaught_exception_handler -from mkosi.types import PathString -from mkosi.util import resource_path +from mkosi.util import PathString, resource_path @uncaught_exception_handler() diff --git a/mkosi/archive.py b/mkosi/archive.py index 7a42d9a9e..1ba28afc0 100644 --- a/mkosi/archive.py +++ b/mkosi/archive.py @@ -8,8 +8,7 @@ from typing import Optional from mkosi.log import log_step from mkosi.run import SandboxProtocol, finalize_passwd_symlinks, nosandbox, run, workdir from mkosi.sandbox import umask -from mkosi.types import PathString -from mkosi.util import chdir +from mkosi.util import PathString, chdir def tar_exclude_apivfs_tmp() -> list[str]: diff --git a/mkosi/bootloader.py b/mkosi/bootloader.py index 68f56aaba..1fffa05a9 100644 --- a/mkosi/bootloader.py +++ b/mkosi/bootloader.py @@ -28,10 +28,9 @@ from mkosi.distributions import Distribution from mkosi.log import complete_step, die, log_step from mkosi.partition import Partition from mkosi.qemu import KernelType -from mkosi.run import run, workdir +from mkosi.run import CompletedProcess, run, workdir from mkosi.sandbox import umask -from mkosi.types import _FILE, CompletedProcess, PathString -from mkosi.util import flatten +from mkosi.util import _FILE, PathString, flatten from mkosi.versioncomp import GenericVersion diff --git a/mkosi/config.py b/mkosi/config.py index f77c34b2b..a1a24dca9 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -35,10 +35,11 @@ from mkosi.log import ARG_DEBUG, ARG_DEBUG_SANDBOX, ARG_DEBUG_SHELL, Style, die from mkosi.pager import page from mkosi.run import SandboxProtocol, find_binary, nosandbox, run, sandbox_cmd, workdir from mkosi.sandbox import __version__ -from mkosi.types import PathString, SupportsRead from mkosi.user import INVOKING_USER from mkosi.util import ( + PathString, StrEnum, + SupportsRead, chdir, flatten, is_power_of_2, diff --git a/mkosi/context.py b/mkosi/context.py index 109cdc556..cab9a0a91 100644 --- a/mkosi/context.py +++ b/mkosi/context.py @@ -6,7 +6,7 @@ from pathlib import Path from typing import Optional from mkosi.config import Args, Config -from mkosi.types import PathString +from mkosi.util import PathString class Context: diff --git a/mkosi/initrd.py b/mkosi/initrd.py index d8f9abc0d..f71f6e48e 100644 --- a/mkosi/initrd.py +++ b/mkosi/initrd.py @@ -18,8 +18,7 @@ from mkosi.log import log_notice, log_setup from mkosi.run import find_binary, run, uncaught_exception_handler from mkosi.sandbox import __version__, umask from mkosi.tree import copy_tree -from mkosi.types import PathString -from mkosi.util import mandatory_variable, resource_path +from mkosi.util import PathString, mandatory_variable, resource_path @dataclasses.dataclass(frozen=True) diff --git a/mkosi/installer/__init__.py b/mkosi/installer/__init__.py index 50c659f84..0453d362b 100644 --- a/mkosi/installer/__init__.py +++ b/mkosi/installer/__init__.py @@ -9,8 +9,7 @@ from mkosi.context import Context from mkosi.mounts import finalize_certificate_mounts from mkosi.run import apivfs_options, finalize_interpreter, finalize_passwd_symlinks, find_binary from mkosi.tree import rmtree -from mkosi.types import PathString -from mkosi.util import flatten, startswith +from mkosi.util import PathString, flatten, startswith class PackageManager: diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index 4c0ecafdf..f635dc69a 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -10,9 +10,9 @@ from mkosi.config import PACKAGE_GLOBS, Config, ConfigFeature from mkosi.context import Context from mkosi.installer import PackageManager from mkosi.log import die -from mkosi.run import run, workdir +from mkosi.run import CompletedProcess, run, workdir from mkosi.sandbox import umask -from mkosi.types import _FILE, CompletedProcess, PathString +from mkosi.util import _FILE, PathString @dataclasses.dataclass(frozen=True) diff --git a/mkosi/installer/dnf.py b/mkosi/installer/dnf.py index b4ac8a62d..8115fb7fd 100644 --- a/mkosi/installer/dnf.py +++ b/mkosi/installer/dnf.py @@ -9,8 +9,8 @@ from mkosi.context import Context from mkosi.installer import PackageManager from mkosi.installer.rpm import RpmRepository, rpm_cmd from mkosi.log import ARG_DEBUG -from mkosi.run import run, workdir -from mkosi.types import _FILE, CompletedProcess, PathString +from mkosi.run import CompletedProcess, run, workdir +from mkosi.util import _FILE, PathString class Dnf(PackageManager): diff --git a/mkosi/installer/pacman.py b/mkosi/installer/pacman.py index 56e354f42..76516fbff 100644 --- a/mkosi/installer/pacman.py +++ b/mkosi/installer/pacman.py @@ -12,10 +12,10 @@ from mkosi.context import Context from mkosi.distributions import detect_distribution from mkosi.installer import PackageManager from mkosi.log import complete_step -from mkosi.run import run, workdir +from mkosi.run import CompletedProcess, run, workdir from mkosi.sandbox import umask from mkosi.tree import copy_tree -from mkosi.types import _FILE, CompletedProcess, PathString +from mkosi.util import _FILE, PathString from mkosi.versioncomp import GenericVersion diff --git a/mkosi/installer/rpm.py b/mkosi/installer/rpm.py index d3f614af4..b3347502a 100644 --- a/mkosi/installer/rpm.py +++ b/mkosi/installer/rpm.py @@ -10,7 +10,7 @@ from mkosi.context import Context from mkosi.distributions import Distribution from mkosi.log import die from mkosi.run import run -from mkosi.types import PathString +from mkosi.util import PathString @dataclasses.dataclass(frozen=True) diff --git a/mkosi/installer/zypper.py b/mkosi/installer/zypper.py index 1215aadbf..fc5625f76 100644 --- a/mkosi/installer/zypper.py +++ b/mkosi/installer/zypper.py @@ -8,8 +8,8 @@ from mkosi.config import Config, yes_no from mkosi.context import Context from mkosi.installer import PackageManager from mkosi.installer.rpm import RpmRepository, rpm_cmd -from mkosi.run import run, workdir -from mkosi.types import _FILE, CompletedProcess, PathString +from mkosi.run import CompletedProcess, run, workdir +from mkosi.util import _FILE, PathString class Zypper(PackageManager): diff --git a/mkosi/mounts.py b/mkosi/mounts.py index 31eb9c7de..3b83d6e92 100644 --- a/mkosi/mounts.py +++ b/mkosi/mounts.py @@ -10,8 +10,7 @@ from typing import Optional from mkosi.config import Config from mkosi.sandbox import OverlayOperation -from mkosi.types import PathString -from mkosi.util import flatten +from mkosi.util import PathString, flatten def stat_is_whiteout(st: os.stat_result) -> bool: diff --git a/mkosi/qemu.py b/mkosi/qemu.py index 5427fbbe0..1d694e772 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -45,9 +45,8 @@ from mkosi.log import ARG_DEBUG, die from mkosi.partition import finalize_root, find_partitions from mkosi.run import SD_LISTEN_FDS_START, AsyncioThread, find_binary, fork_and_wait, run, spawn, workdir from mkosi.tree import copy_tree, rmtree -from mkosi.types import PathString from mkosi.user import INVOKING_USER, become_root_in_subuid_range, become_root_in_subuid_range_cmd -from mkosi.util import StrEnum, current_home_dir, flock, flock_or_die, groupby, round_up, try_or +from mkosi.util import PathString, StrEnum, current_home_dir, flock, flock_or_die, groupby, round_up, try_or from mkosi.versioncomp import GenericVersion QEMU_KVM_DEVICE_VERSION = GenericVersion("9.0") diff --git a/mkosi/run.py b/mkosi/run.py index 1aa62b417..d54ec13c9 100644 --- a/mkosi/run.py +++ b/mkosi/run.py @@ -18,17 +18,27 @@ from collections.abc import Awaitable, Collection, Iterator, Mapping, Sequence from contextlib import AbstractContextManager from pathlib import Path from types import TracebackType -from typing import Any, Callable, NoReturn, Optional, Protocol +from typing import TYPE_CHECKING, Any, Callable, NoReturn, Optional, Protocol import mkosi.sandbox from mkosi.log import ARG_DEBUG, ARG_DEBUG_SANDBOX, ARG_DEBUG_SHELL, die from mkosi.sandbox import acquire_privileges, joinpath, umask -from mkosi.types import _FILE, CompletedProcess, PathString, Popen -from mkosi.util import current_home_dir, flatten, one_zero, unique +from mkosi.util import _FILE, PathString, current_home_dir, flatten, one_zero, unique SD_LISTEN_FDS_START = 3 +# These types are only generic during type checking and not at runtime, leading +# to a TypeError during compilation. +# Let's be as strict as we can with the description for the usage we have. +if TYPE_CHECKING: + CompletedProcess = subprocess.CompletedProcess[str] + Popen = subprocess.Popen[str] +else: + CompletedProcess = subprocess.CompletedProcess + Popen = subprocess.Popen + + def make_foreground_process(*, new_process_group: bool = True) -> None: """ If we're connected to a terminal, put the process in a new process group and make that the foreground diff --git a/mkosi/sysupdate.py b/mkosi/sysupdate.py index 9b9a8a00b..514e7bbc6 100644 --- a/mkosi/sysupdate.py +++ b/mkosi/sysupdate.py @@ -9,7 +9,7 @@ from pathlib import Path from mkosi.config import Args, ArtifactOutput, Config from mkosi.log import die from mkosi.run import run -from mkosi.types import PathString +from mkosi.util import PathString def run_sysupdate(args: Args, config: Config) -> None: diff --git a/mkosi/tree.py b/mkosi/tree.py index da6806776..b35867030 100644 --- a/mkosi/tree.py +++ b/mkosi/tree.py @@ -13,8 +13,7 @@ from mkosi.config import ConfigFeature from mkosi.log import ARG_DEBUG, die from mkosi.run import SandboxProtocol, nosandbox, run, workdir from mkosi.sandbox import BTRFS_SUPER_MAGIC, statfs -from mkosi.types import PathString -from mkosi.util import flatten +from mkosi.util import PathString, flatten from mkosi.versioncomp import GenericVersion diff --git a/mkosi/types.py b/mkosi/types.py deleted file mode 100644 index 3b3b6077f..000000000 --- a/mkosi/types.py +++ /dev/null @@ -1,29 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later - -import subprocess -from pathlib import Path -from typing import IO, TYPE_CHECKING, Any, Protocol, TypeVar, Union - -# These types are only generic during type checking and not at runtime, leading -# to a TypeError during compilation. -# Let's be as strict as we can with the description for the usage we have. -if TYPE_CHECKING: - CompletedProcess = subprocess.CompletedProcess[str] - Popen = subprocess.Popen[str] -else: - CompletedProcess = subprocess.CompletedProcess - Popen = subprocess.Popen - -# Borrowed from https://github.com/python/typeshed/blob/3d14016085aed8bcf0cf67e9e5a70790ce1ad8ea/stdlib/3/subprocess.pyi#L24 -_FILE = Union[None, int, IO[Any]] -PathString = Union[Path, str] - -# Borrowed from -# https://github.com/python/typeshed/blob/ec52bf1adde1d3183d0595d2ba982589df48dff1/stdlib/_typeshed/__init__.pyi#L19 -# and -# https://github.com/python/typeshed/blob/ec52bf1adde1d3183d0595d2ba982589df48dff1/stdlib/_typeshed/__init__.pyi#L224 -_T_co = TypeVar("_T_co", covariant=True) - - -class SupportsRead(Protocol[_T_co]): - def read(self, __length: int = ...) -> _T_co: ... diff --git a/mkosi/util.py b/mkosi/util.py index 2ce615aef..b21ed689e 100644 --- a/mkosi/util.py +++ b/mkosi/util.py @@ -20,16 +20,29 @@ import tempfile from collections.abc import Hashable, Iterable, Iterator, Mapping, Sequence from pathlib import Path from types import ModuleType -from typing import Any, Callable, Optional, TypeVar +from typing import IO, Any, Callable, Optional, Protocol, TypeVar, Union from mkosi.backport import as_file from mkosi.log import die -from mkosi.types import PathString T = TypeVar("T") V = TypeVar("V") S = TypeVar("S", bound=Hashable) +# Borrowed from https://github.com/python/typeshed/blob/3d14016085aed8bcf0cf67e9e5a70790ce1ad8ea/stdlib/3/subprocess.pyi#L24 +_FILE = Union[None, int, IO[Any]] +PathString = Union[Path, str] + +# Borrowed from +# https://github.com/python/typeshed/blob/ec52bf1adde1d3183d0595d2ba982589df48dff1/stdlib/_typeshed/__init__.pyi#L19 +# and +# https://github.com/python/typeshed/blob/ec52bf1adde1d3183d0595d2ba982589df48dff1/stdlib/_typeshed/__init__.pyi#L224 +_T_co = TypeVar("_T_co", covariant=True) + + +class SupportsRead(Protocol[_T_co]): + def read(self, __length: int = ...) -> _T_co: ... + def dictify(f: Callable[..., Iterator[tuple[T, V]]]) -> Callable[..., dict[T, V]]: def wrapper(*args: Any, **kwargs: Any) -> dict[T, V]: diff --git a/mkosi/vmspawn.py b/mkosi/vmspawn.py index 60a21b11d..9b3891c56 100644 --- a/mkosi/vmspawn.py +++ b/mkosi/vmspawn.py @@ -23,8 +23,7 @@ from mkosi.qemu import ( finalize_register, ) from mkosi.run import run -from mkosi.types import PathString -from mkosi.util import current_home_dir +from mkosi.util import PathString, current_home_dir def run_vmspawn(args: Args, config: Config) -> None: diff --git a/tests/__init__.py b/tests/__init__.py index 2923f5e99..07438c3b4 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -14,10 +14,10 @@ from typing import Any, Optional import pytest from mkosi.distributions import Distribution -from mkosi.run import fork_and_wait, run +from mkosi.run import CompletedProcess, fork_and_wait, run from mkosi.sandbox import acquire_privileges from mkosi.tree import rmtree -from mkosi.types import _FILE, CompletedProcess, PathString +from mkosi.util import _FILE, PathString @dataclasses.dataclass(frozen=True) diff --git a/tests/test_initrd.py b/tests/test_initrd.py index 7d7562a52..1e03328ac 100644 --- a/tests/test_initrd.py +++ b/tests/test_initrd.py @@ -14,7 +14,7 @@ from mkosi.distributions import Distribution from mkosi.run import run from mkosi.sandbox import umask from mkosi.tree import copy_tree -from mkosi.types import PathString +from mkosi.util import PathString from . import Image, ImageConfig