From: Daan De Meyer Date: Fri, 21 Jul 2023 13:11:21 +0000 (+0200) Subject: Move more enums to config.py X-Git-Tag: v15~66^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5baa4d5c53729dbdd656f5403b825aecc7fb0c4c;p=thirdparty%2Fmkosi.git Move more enums to config.py Also move is_xxx_distribution() functions into Distribution enum. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 84e4c3905..98113ade9 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -23,11 +23,14 @@ from typing import Callable, ContextManager, Optional, TextIO, Union, cast from mkosi.btrfs import btrfs_maybe_snapshot_subvolume from mkosi.config import ( + Compression, ConfigFeature, GenericVersion, + ManifestFormat, MkosiArgs, MkosiConfig, MkosiConfigParser, + OutputFormat, SecureBootSignTool, Verb, ) @@ -42,16 +45,11 @@ from mkosi.run import become_root, bwrap, chroot_cmd, init_mount_namespace, run, from mkosi.state import MkosiState from mkosi.types import PathString from mkosi.util import ( - Compression, InvokingUser, - ManifestFormat, - OutputFormat, flatten, flock, format_bytes, format_rlimit, - is_apt_distribution, - is_portage_distribution, scopedenv, try_import, ) @@ -806,7 +804,7 @@ def gen_kernel_modules_initrd(state: MkosiState, kver: str) -> Path: # Debian/Ubuntu do not compress their kernel modules, so we compress the initramfs instead. Note that # this is not ideal since the compressed kernel modules will all be decompressed on boot which # requires significant memory. - if is_apt_distribution(state.config.distribution): + if state.config.distribution.is_apt_distribution(): maybe_compress(state, Compression.zst, kmods, kmods) return kmods @@ -865,9 +863,9 @@ def install_unified_kernel(state: MkosiState, roothash: Optional[str]) -> None: "--format", "cpio", "--package", "systemd", "--package", "util-linux", - *(["--package", "udev"] if not is_portage_distribution(state.config.distribution) else []), + *(["--package", "udev"] if not state.config.distribution.is_portage_distribution() else []), "--package", "kmod", - *(["--package", "dmsetup"] if is_apt_distribution(state.config.distribution) else []), + *(["--package", "dmsetup"] if state.config.distribution.is_apt_distribution() else []), "--output", f"{state.config.output}-initrd", *(["--image-version", state.config.image_version] if state.config.image_version else []), "--make-initrd", "yes", diff --git a/mkosi/config.py b/mkosi/config.py index ab7b7dc9e..30f5044cb 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -28,16 +28,11 @@ from mkosi.log import ARG_DEBUG, ARG_DEBUG_SHELL, Style, die from mkosi.pager import page from mkosi.run import run from mkosi.util import ( - Compression, Distribution, InvokingUser, - ManifestFormat, - OutputFormat, chdir, detect_distribution, flatten, - is_apt_distribution, - is_dnf_distribution, qemu_check_kvm_support, qemu_check_vsock_support, ) @@ -94,6 +89,35 @@ class SecureBootSignTool(enum.Enum): return str(self.value).lower() +class OutputFormat(str, enum.Enum): + directory = "directory" + tar = "tar" + cpio = "cpio" + disk = "disk" + none = "none" + + +class ManifestFormat(str, enum.Enum): + json = "json" # the standard manifest in json format + changelog = "changelog" # human-readable text file with package changelogs + + +class Compression(enum.Enum): + none = None + zst = "zst" + xz = "xz" + bz2 = "bz2" + gz = "gz" + lz4 = "lz4" + lzma = "lzma" + + def __str__(self) -> str: + return str(self.value).lower() + + def __bool__(self) -> bool: + return bool(self.value) + + def parse_boolean(s: str) -> bool: "Parse 1/true/yes/y/t/on as true and 0/false/no/n/f/off/None as false" s_l = s.lower() @@ -2149,8 +2173,8 @@ def load_config(args: argparse.Namespace) -> MkosiConfig: die("Sorry, the host machine does not support vsock") if args.repositories and not ( - is_dnf_distribution(args.distribution) or - is_apt_distribution(args.distribution) or + args.distribution.is_dnf_distribution() or + args.distribution.is_apt_distribution() or args.distribution == Distribution.arch ): die("Sorry, the --repositories option is only supported on pacman, dnf and apt based distributions") diff --git a/mkosi/manifest.py b/mkosi/manifest.py index 29578888d..22cd74dfb 100644 --- a/mkosi/manifest.py +++ b/mkosi/manifest.py @@ -8,9 +8,9 @@ from subprocess import DEVNULL, PIPE from textwrap import dedent from typing import IO, Any, Optional -from mkosi.config import MkosiConfig +from mkosi.config import ManifestFormat, MkosiConfig from mkosi.run import run -from mkosi.util import Distribution, ManifestFormat, PackageType +from mkosi.util import Distribution, PackageType @dataclasses.dataclass diff --git a/mkosi/qemu.py b/mkosi/qemu.py index 8632fbd38..df83097f5 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -17,14 +17,13 @@ from typing import Iterator, Optional from mkosi.architecture import Architecture from mkosi.btrfs import btrfs_maybe_snapshot_subvolume -from mkosi.config import ConfigFeature, MkosiArgs, MkosiConfig +from mkosi.config import ConfigFeature, MkosiArgs, MkosiConfig, OutputFormat from mkosi.log import die from mkosi.remove import unlink_try_hard from mkosi.run import MkosiAsyncioThread, run, spawn from mkosi.types import PathString from mkosi.util import ( Distribution, - OutputFormat, format_bytes, qemu_check_kvm_support, qemu_check_vsock_support, diff --git a/mkosi/util.py b/mkosi/util.py index 817ddd31f..ab875d269 100644 --- a/mkosi/util.py +++ b/mkosi/util.py @@ -61,21 +61,22 @@ class Distribution(enum.Enum): def is_centos_variant(self) -> bool: return self in (Distribution.centos, Distribution.alma, Distribution.rocky) + def is_dnf_distribution(self) -> bool: + return self in ( + Distribution.fedora, + Distribution.mageia, + Distribution.centos, + Distribution.openmandriva, + Distribution.rocky, + Distribution.alma, + ) -class Compression(enum.Enum): - none = None - zst = "zst" - xz = "xz" - bz2 = "bz2" - gz = "gz" - lz4 = "lz4" - lzma = "lzma" + def is_apt_distribution(self) -> bool: + return self in (Distribution.debian, Distribution.ubuntu) - def __str__(self) -> str: - return str(self.value).lower() - def __bool__(self) -> bool: - return bool(self.value) + def is_portage_distribution(self) -> bool: + return self in (Distribution.gentoo,) def dictify(f: Callable[..., Iterator[tuple[T, V]]]) -> Callable[..., dict[T, V]]: @@ -139,39 +140,6 @@ def detect_distribution() -> tuple[Optional[Distribution], Optional[str]]: return d, version_id -def is_dnf_distribution(d: Distribution) -> bool: - return d in ( - Distribution.fedora, - Distribution.mageia, - Distribution.centos, - Distribution.openmandriva, - Distribution.rocky, - Distribution.alma, - ) - - -def is_apt_distribution(d: Distribution) -> bool: - return d in (Distribution.debian, Distribution.ubuntu) - - -def is_portage_distribution(d: Distribution) -> bool: - return d in (Distribution.gentoo,) - - -class OutputFormat(str, enum.Enum): - directory = "directory" - tar = "tar" - cpio = "cpio" - disk = "disk" - none = "none" - - -class ManifestFormat(str, enum.Enum): - json = "json" # the standard manifest in json format - changelog = "changelog" # human-readable text file with package changelogs - - - def format_rlimit(rlimit: int) -> str: limits = resource.getrlimit(rlimit) soft = "infinity" if limits[0] == resource.RLIM_INFINITY else str(limits[0]) diff --git a/tests/test_config.py b/tests/test_config.py index c9489bf1f..dd1b2f70f 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -4,7 +4,37 @@ import itertools import pytest -from mkosi.config import GenericVersion +from mkosi.config import Compression, GenericVersion + + +def test_compression_enum_creation() -> None: + assert Compression(None) == Compression.none + assert Compression("zst") == Compression.zst + assert Compression("xz") == Compression.xz + assert Compression("bz2") == Compression.bz2 + assert Compression("gz") == Compression.gz + assert Compression("lz4") == Compression.lz4 + assert Compression("lzma") == Compression.lzma + + +def test_compression_enum_bool() -> None: + assert bool(Compression.none) == False + assert bool(Compression.zst) == True + assert bool(Compression.xz) == True + assert bool(Compression.bz2) == True + assert bool(Compression.gz) == True + assert bool(Compression.lz4) == True + assert bool(Compression.lzma) == True + + +def test_compression_enum_str() -> None: + assert str(Compression.none) == "none" + assert str(Compression.zst) == "zst" + assert str(Compression.xz) == "xz" + assert str(Compression.bz2) == "bz2" + assert str(Compression.gz) == "gz" + assert str(Compression.lz4) == "lz4" + assert str(Compression.lzma) == "lzma" def test_generic_version_systemd() -> None: diff --git a/tests/test_parse_load_args.py b/tests/test_parse_load_args.py index d9f5b0de0..340b13779 100644 --- a/tests/test_parse_load_args.py +++ b/tests/test_parse_load_args.py @@ -12,8 +12,8 @@ from typing import Iterator, List, Optional import pytest -from mkosi.config import MkosiArgs, MkosiConfig, MkosiConfigParser, Verb -from mkosi.util import Compression, Distribution +from mkosi.config import Compression, MkosiArgs, MkosiConfig, MkosiConfigParser, Verb +from mkosi.util import Distribution @contextmanager diff --git a/tests/test_util.py b/tests/test_util.py index fa9717964..ff7a22904 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: LGPL-2.1+ -from mkosi.util import Compression, Distribution, PackageType +from mkosi.util import Distribution, PackageType def test_distribution() -> None: @@ -10,31 +10,3 @@ def test_distribution() -> None: assert str(Distribution.fedora) == "fedora" -def test_compression_enum_creation() -> None: - assert Compression(None) == Compression.none - assert Compression("zst") == Compression.zst - assert Compression("xz") == Compression.xz - assert Compression("bz2") == Compression.bz2 - assert Compression("gz") == Compression.gz - assert Compression("lz4") == Compression.lz4 - assert Compression("lzma") == Compression.lzma - - -def test_compression_enum_bool() -> None: - assert bool(Compression.none) == False - assert bool(Compression.zst) == True - assert bool(Compression.xz) == True - assert bool(Compression.bz2) == True - assert bool(Compression.gz) == True - assert bool(Compression.lz4) == True - assert bool(Compression.lzma) == True - - -def test_compression_enum_str() -> None: - assert str(Compression.none) == "none" - assert str(Compression.zst) == "zst" - assert str(Compression.xz) == "xz" - assert str(Compression.bz2) == "bz2" - assert str(Compression.gz) == "gz" - assert str(Compression.lz4) == "lz4" - assert str(Compression.lzma) == "lzma"