def decode(obj):
if obj and isinstance(obj.__class__, DeclarativeMeta):
fields = {}
for field in [x for x in dir(obj) if not x.startswith('_') and not x.endswith('_') and x != 'metadata']:
data = obj.__getattribute__(field)
if isinstance(data, datetime.datetime):
fields[field] = data.timestamp()
elif isinstance(data, datetime.date):
fields[field] = data.isoformat()
elif isinstance(data, datetime.timedelta):
fields[field] = (datetime.datetime.min + data).time().isoformat()
elif isinstance(data, int) or isinstance(data, float) or isinstance(data, str):
fields[field] = data
elif isinstance(data, enum.Enum):
fields[field] = data.value
elif isinstance(data.__class__, DeclarativeMeta):
fields[field] = AlchemyEncoder.decode(data)
elif isinstance(data, list):
fields[field] = [AlchemyEncoder.decode(d) for d in data]
return fields
else:
return obj
评论列表
文章目录