Преобразование в словарь

Функция asdict предназначена для преобразования объекта в словарь.

from cwtch import asdict, dataclass

@dataclass
class M:
    i: int

d = M(1)
assert asdict(d) == {"i": 1}

В случае необходимости можно изменить поведение, определив метод __cwtch_asdict__

from typing import Callable

from cwtch import dataclass
from cwtch.core import AsDictKwds

@dataclass
class M:
    i: int

    def __cwtch_asdict__(self, handler: Callable, kwds: AsDictKwds):
        return handler(self, kwds)

Note

AsDictKwds = namedtuple("AsDictKwds", ("include", "exclude", "exclude_none", "exclude_unset", "context"))

Пример для Secret типа:

from typing import Callable

from cwtch import dataclass
from cwtch.core import AsDictKwds

class SecretType:
    def get_scret_value(self): ...

    def __cwtch_asdict__(self, handler: Callable, kwds: AsDictKwds):
        if (kwds.context or {}).get("show_secrets"):
            return self.get_secret_value()
        return self