22 lines
631 B
Python
22 lines
631 B
Python
|
|
from datetime import datetime
|
||
|
|
from dataclasses import asdict, is_dataclass
|
||
|
|
from pydantic import BaseModel
|
||
|
|
from json import JSONEncoder
|
||
|
|
|
||
|
|
|
||
|
|
class DefaultJSONEncoder(JSONEncoder):
|
||
|
|
def default(self, o):
|
||
|
|
if hasattr(o, "to_dict"):
|
||
|
|
return o.to_dict()
|
||
|
|
elif isinstance(o, BaseModel):
|
||
|
|
return o.model_dump()
|
||
|
|
elif is_dataclass(o):
|
||
|
|
return asdict(o)
|
||
|
|
elif isinstance(o, set):
|
||
|
|
return list(o)
|
||
|
|
elif isinstance(o, datetime):
|
||
|
|
return o.isoformat()
|
||
|
|
elif hasattr(o, "__dict__"):
|
||
|
|
return o.__dict__
|
||
|
|
return super().default(o)
|