tofu-api/tofu_api/common/json/json_provider.py

30 lines
746 B
Python

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)