30 lines
746 B
Python
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)
|