-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserializer.py
48 lines (39 loc) · 1.58 KB
/
serializer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import datetime
import sys
import uuid
from peewee import Model
from flask_peewee.utils import get_dictionary_from_model, get_model_from_dictionary
class Serializer(object):
date_format = '%Y-%m-%d'
time_format = '%H:%M:%S'
datetime_format = ' '.join([date_format, time_format])
def convert_value(self, value):
if isinstance(value, datetime.datetime):
return value.strftime(self.datetime_format)
elif isinstance(value, datetime.date):
return value.strftime(self.date_format)
elif isinstance(value, datetime.time):
return value.strftime(self.time_format)
elif isinstance(value, Model):
return value._pk
elif isinstance(value, uuid.UUID):
return str(value)
else:
return value
def clean_data(self, data):
for key, value in data.items():
if isinstance(value, dict):
self.clean_data(value)
elif isinstance(value, (list, tuple)):
data[key] = map(self.clean_data, value)
else:
data[key] = self.convert_value(value)
return data
def serialize_object(self, obj, fields=None, exclude=None):
data = get_dictionary_from_model(obj, fields, exclude)
return self.clean_data(data)
def serialize_list(self, lst, fields=None, exclude=None):
return [self.clean_data(get_dictionary_from_model(obj, fields, exclude)) for obj in lst]
class Deserializer(object):
def deserialize_object(self, model, data):
return get_model_from_dictionary(model, data)