A multipurpose python flask API server and administration SPA
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

27 lines
807 B

"""JSON specific utilities."""
from datetime import date
from typing import Any
import rfc3339
from flask.json import JSONEncoder
from corvus.db import db
from corvus.service.transformation_service import serialize_model
class CustomJSONEncoder(JSONEncoder):
"""Ensure that datetime values are serialized correctly."""
def default(self, o: Any) -> Any: # pylint: disable=E0202
"""Handle encoding date and datetime objects according to rfc3339."""
try:
if isinstance(o, date):
return rfc3339.format(o)
if isinstance(o, db.Model):
return serialize_model(o)
iterable = iter(o)
except TypeError:
pass
else:
return list(iterable)
return JSONEncoder.default(self, o)