Spaces:
Sleeping
Sleeping
File size: 898 Bytes
b1b7430 | 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 | from datetime import datetime,date
from decimal import Decimal
from typing import Any
from pydantic import BaseModel
def prepare_for_db(obj: Any) -> Any:
"""
Recursively sanitizes the object to be MongoDB-compatible:
- Converts Decimal to float
- Converts datetime with tzinfo to naive datetime
- Converts Pydantic BaseModel to dict
"""
if isinstance(obj, Decimal):
return float(obj)
elif isinstance(obj, date) and not isinstance(obj, datetime):
return datetime(obj.year, obj.month, obj.day)
elif isinstance(obj, datetime):
return obj.replace(tzinfo=None)
elif isinstance(obj, BaseModel):
return prepare_for_db(obj.dict())
elif isinstance(obj, dict):
return {k: prepare_for_db(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [prepare_for_db(v) for v in obj]
else:
return obj |