BuyingAgent/backend/app/domain/serialize.py

27 lines
809 B
Python
Raw Permalink Normal View History

from datetime import date, datetime
from decimal import Decimal
from typing import Any
from uuid import UUID
from app.domain.timeutil import to_iso_z
def jsonable(value: Any) -> Any:
if value is None or isinstance(value, (str, int, bool)):
return value
if isinstance(value, Decimal):
return format(value, "f")
if isinstance(value, UUID):
return str(value)
if isinstance(value, datetime):
return to_iso_z(value)
if isinstance(value, date):
return value.isoformat()
if isinstance(value, dict):
return {str(key): jsonable(item) for key, item in value.items()}
if isinstance(value, (list, tuple)):
return [jsonable(item) for item in value]
if hasattr(value, "value"):
return jsonable(value.value)
return value