from datetime import datetime from typing import Any from flask.json.provider import DefaultJSONProvider __all__ = [ 'JSONProvider', ] class JSONProvider(DefaultJSONProvider): """ Custom JSON provider. """ def default(self, obj: Any) -> Any: """ Convert any object to a JSON serializable type. """ # Convert datetimes to ISO format without microseconds (e.g. '2022-01-02T10:20:30+00:00') if isinstance(obj, datetime): return obj.isoformat(timespec='seconds') # Use to_dict() method on objects that have it if hasattr(obj, 'to_dict'): return obj.to_dict() # Fallback to the default JSON provider return super().default(obj)