summaryrefslogtreecommitdiff
path: root/megapixels/app/server/json_encoder.py
blob: 89af578ab8b48bbce9aa0202715e1ce2307d7272 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sqlalchemy.ext.declarative import DeclarativeMeta
from flask import json

class AlchemyEncoder(json.JSONEncoder):
  def default(self, o):
    if isinstance(o.__class__, DeclarativeMeta):
      data = {}
      fields = o.__json__() if hasattr(o, '__json__') else dir(o)
      for field in [f for f in fields if not f.startswith('_') and f not in ['metadata', 'query', 'query_class']]:
        value = o.__getattribute__(field)
        try:
          json.dumps(value)
          data[field] = value
        except TypeError:
          data[field] = None
      return data
    return json.JSONEncoder.default(self, o)