import enum from dataclasses import asdict, dataclass, fields from typing import Any class StatusEnum(enum.StrEnum): SUCCESS = 'success' SKIPPED = 'skipped' ERROR = 'error' def enum_dict_factory(data: list[tuple[str, Any]]) -> dict[str, Any]: """ A custom factory for asdict(). It iterates over the fields; if a value is an Enum, it extracts .value. """ result = {} for key, value in data: if isinstance(value, enum.Enum): result[key] = value.value else: result[key] = value return result @dataclass(init=False, kw_only=True) class BaseResult: status: StatusEnum message: str = '' def to_dict(self) -> dict[str, Any]: return asdict(self, dict_factory=enum_dict_factory) @classmethod def get_fields(cls) -> list[str]: return [f.name for f in fields(cls)]