def serialize_meta(data):
if hasattr(data, '__nirum_serialize__'):
d = data.__nirum_serialize__()
elif isinstance(data, (string_types, bool, int, float)):
# FIXME: str in py2 represents binary string as well as text string.
# It should be refactored so that the function explicitly takes
# an expected type as like deserialize_meta() does.
d = data
elif (isinstance(data, datetime.datetime) or
isinstance(data, datetime.date)):
d = data.isoformat()
elif isinstance(data, decimal.Decimal) or isinstance(data, uuid.UUID):
d = str(data)
elif (isinstance(data, collections.Set) or
isinstance(data, collections.Sequence)):
d = [serialize_meta(e) for e in data]
elif isinstance(data, collections.Mapping):
d = [
{'key': serialize_meta(k), 'value': serialize_meta(v)}
for k, v in data.items()
]
else:
d = data
return d
评论列表
文章目录