Spaces:
Sleeping
Sleeping
| 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 |