-
Notifications
You must be signed in to change notification settings - Fork 70
Expand file tree
/
Copy pathserializers.py
More file actions
161 lines (117 loc) · 5.08 KB
/
serializers.py
File metadata and controls
161 lines (117 loc) · 5.08 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
from collections import OrderedDict
from django.contrib.auth.models import AnonymousUser
from rest_framework_json_api import serializers
from share import models
from share.models import ProviderRegistration, SiteBanner, CeleryTaskResult
from api import fields
class BaseShareSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
# super hates my additional kwargs
sparse = kwargs.pop('sparse', False)
version_serializer = kwargs.pop('version_serializer', False)
super(BaseShareSerializer, self).__init__(*args, **kwargs)
if sparse:
# clear the fields if they asked for sparse
self.fields.clear()
else:
# remove hidden fields
excluded_fields = ['change', 'sources']
for field_name in tuple(self.fields.keys()):
if 'version' in field_name or field_name in excluded_fields:
self.fields.pop(field_name)
# version specific fields
if version_serializer:
self.fields.update({
'action': serializers.CharField(max_length=10),
'persistent_id': serializers.IntegerField()
})
# add fields with improper names
self.fields.update({
'type': fields.TypeField(),
})
class Meta:
links = ('versions', 'changes', 'rawdata')
# http://stackoverflow.com/questions/27015931/remove-null-fields-from-django-rest-framework-response
def to_representation(self, instance):
ret = super(BaseShareSerializer, self).to_representation(instance)
ret = OrderedDict(list(filter(lambda x: x[1] is not None, ret.items())))
return ret
class ShareModelSerializer(serializers.ModelSerializer):
# http://stackoverflow.com/questions/27015931/remove-null-fields-from-django-rest-framework-response
def to_representation(self, instance):
def not_none(value):
return value is not None
ret = super(ShareModelSerializer, self).to_representation(instance)
ret = OrderedDict(list(filter(lambda x: not_none(x[1]), ret.items())))
return ret
class RawDatumSerializer(ShareModelSerializer):
class Meta:
model = models.RawDatum
fields = ('id', 'suid', 'datum', 'sha256', 'date_modified', 'date_created', 'logs')
class ProviderRegistrationSerializer(ShareModelSerializer):
status = serializers.SerializerMethodField()
submitted_at = serializers.DateTimeField(read_only=True)
submitted_by = serializers.HiddenField(default=serializers.CurrentUserDefault())
def get_status(self, obj):
return ProviderRegistration.STATUS[obj.status]
class Meta:
model = models.ProviderRegistration
fields = '__all__'
class FullNormalizedDataSerializer(serializers.ModelSerializer):
tasks = serializers.PrimaryKeyRelatedField(many=True, read_only=False, queryset=CeleryTaskResult.objects.all())
source = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = models.NormalizedData
fields = ('data', 'source', 'raw', 'tasks')
class BasicNormalizedDataSerializer(serializers.ModelSerializer):
source = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = models.NormalizedData
fields = ('data', 'source')
class ShareUserSerializer(ShareModelSerializer):
def __init__(self, *args, token=None, **kwargs):
super(ShareUserSerializer, self).__init__(*args, **kwargs)
if token:
self.fields.update({
'token': serializers.SerializerMethodField()
})
self.fields.update({
'🦄': serializers.SerializerMethodField(method_name='is_superuser'),
'🤖': serializers.SerializerMethodField(method_name='is_robot'),
})
def is_robot(self, obj):
if not isinstance(obj, AnonymousUser):
return obj.is_robot
return False
def get_token(self, obj):
try:
return obj.accesstoken_set.first().token
except AttributeError:
return None
def is_superuser(self, obj):
return obj.is_superuser
class Meta:
model = models.ShareUser
fields = (
'username', 'first_name', 'last_name', 'email', 'date_joined', 'last_login',
'is_active', 'gravatar', 'locale', 'time_zone', 'is_trusted'
)
class SourceSerializer(ShareModelSerializer):
class Meta:
model = models.Source
fields = ('name', 'home_page', 'long_title', 'icon')
class HarvestLogSerializer(ShareModelSerializer):
class Meta:
model = models.HarvestLog
fields = '__all__'
class SourceConfigSerializer(ShareModelSerializer):
class Meta:
model = models.SourceConfig
fields = '__all__'
class SiteBannerSerializer(ShareModelSerializer):
color = serializers.SerializerMethodField()
def get_color(self, obj):
return SiteBanner.COLOR[obj.color]
class Meta:
model = models.SiteBanner
fields = ('title', 'description', 'color', 'icon')