20 lines
589 B
Python
20 lines
589 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import asdict, is_dataclass
|
|
from datetime import date, datetime
|
|
from typing import Any
|
|
|
|
|
|
def to_plain(value: Any) -> Any:
|
|
if is_dataclass(value):
|
|
return to_plain(asdict(value))
|
|
if isinstance(value, datetime):
|
|
return value.isoformat()
|
|
if isinstance(value, date):
|
|
return value.isoformat()
|
|
if isinstance(value, dict):
|
|
return {key: to_plain(item) for key, item in value.items()}
|
|
if isinstance(value, (list, tuple, set)):
|
|
return [to_plain(item) for item in value]
|
|
return value
|