From: Joerg Behrmann Date: Fri, 15 Sep 2023 16:19:35 +0000 (+0200) Subject: json: make MkosiArgs and MkosiConfig JSON-dumpable X-Git-Tag: v18~13^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b871b26e60f4ee72f2cbc2f29714b1ce601c5725;p=thirdparty%2Fmkosi.git json: make MkosiArgs and MkosiConfig JSON-dumpable --- diff --git a/mkosi/config.py b/mkosi/config.py index 2a3b516d9..3b66df341 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -10,6 +10,7 @@ import fnmatch import functools import graphlib import inspect +import json import logging import math import operator @@ -668,6 +669,8 @@ class MkosiArgs: if k in inspect.signature(cls).parameters }) + def to_json(self, *, indent: Optional[int] = 4, sort_keys: bool = True) -> str: + return json.dumps(dataclasses.asdict(self), cls=MkosiJsonEncoder, indent=indent, sort_keys=sort_keys) @dataclasses.dataclass(frozen=True) class MkosiConfig: @@ -877,6 +880,9 @@ class MkosiConfig: ] } + def to_json(self, *, indent: Optional[int] = 4, sort_keys: bool = True) -> str: + return json.dumps(dataclasses.asdict(self), cls=MkosiJsonEncoder, indent=indent, sort_keys=sort_keys) + def parse_ini(path: Path, only_sections: Collection[str] = ()) -> Iterator[tuple[str, str, str]]: """ @@ -2617,3 +2623,14 @@ Clean Package Manager Metadata: {yes_no_auto(config.clean_package_metadata)} """ return summary + + +class MkosiJsonEncoder(json.JSONEncoder): + def default(self, obj: Any) -> Any: + if isinstance(obj, StrEnum): + return str(obj) + elif isinstance(obj, os.PathLike): + return os.fspath(obj) + elif isinstance(obj, uuid.UUID): + return str(obj) + return json.JSONEncoder.default(self, obj)