import datetime
import json

from bson import ObjectId


class JSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, ObjectId):
            return str(o)
        elif type(o) == datetime.datetime:
            return o.isoformat()
        elif type(o) == bytes:
            return True
        try:
            return json.JSONEncoder.default(self, o)
        except TypeError:
            return str(o)
