Spaces:
Sleeping
Sleeping
File size: 930 Bytes
796da7c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | from __future__ import annotations
from dataclasses import asdict, is_dataclass
from enum import Enum
from typing import Any
def to_jsonable(value: Any) -> Any:
"""Recursively convert values into JSON-serializable primitives."""
if value is None:
return None
if isinstance(value, (str, int, float, bool)):
return value
if isinstance(value, Enum):
return value.value
if is_dataclass(value):
return to_jsonable(asdict(value))
if isinstance(value, dict):
return {str(key): to_jsonable(item) for key, item in value.items()}
if isinstance(value, (list, tuple)):
return [to_jsonable(item) for item in value]
if isinstance(value, set):
return [to_jsonable(item) for item in sorted(value, key=lambda item: repr(item))]
if hasattr(value, "to_dict") and callable(value.to_dict):
return to_jsonable(value.to_dict())
return str(value)
|