GayathriArjun's picture
pet and guest api changes
b1b7430
raw
history blame contribute delete
898 Bytes
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