@@ -31,6 +31,49 @@ class Meta:
31
31
]
32
32
33
33
34
+ class BaseLinksSerializer (serializers .Serializer ):
35
+
36
+ def _absolute_url (self , path ):
37
+ scheme = 'http' if settings .DEBUG else 'https'
38
+ domain = settings .PRODUCTION_DOMAIN
39
+ return urllib .parse .urlunparse ((scheme , domain , path , '' , '' , '' ))
40
+
41
+
42
+ class BuildLinksSerializer (BaseLinksSerializer ):
43
+ _self = serializers .SerializerMethodField ()
44
+ version = serializers .SerializerMethodField ()
45
+ project = serializers .SerializerMethodField ()
46
+
47
+ def get__self (self , obj ):
48
+ path = reverse (
49
+ 'projects-builds-detail' ,
50
+ kwargs = {
51
+ 'parent_lookup_project__slug' : obj .project .slug ,
52
+ 'build_pk' : obj .pk ,
53
+ },
54
+ )
55
+ return self ._absolute_url (path )
56
+
57
+ def get_version (self , obj ):
58
+ path = reverse (
59
+ 'projects-versions-detail' ,
60
+ kwargs = {
61
+ 'parent_lookup_project__slug' : obj .project .slug ,
62
+ 'version_slug' : obj .version .slug ,
63
+ },
64
+ )
65
+ return self ._absolute_url (path )
66
+
67
+ def get_project (self , obj ):
68
+ path = reverse (
69
+ 'projects-detail' ,
70
+ kwargs = {
71
+ 'project_slug' : obj .project .slug ,
72
+ },
73
+ )
74
+ return self ._absolute_url (path )
75
+
76
+
34
77
class BuildConfigSerializer (FlexFieldsSerializerMixin , serializers .Serializer ):
35
78
36
79
def to_representation (self , obj ):
@@ -46,6 +89,7 @@ class BuildSerializer(FlexFieldsModelSerializer):
46
89
created = serializers .DateTimeField (source = 'date' )
47
90
finished = serializers .SerializerMethodField ()
48
91
duration = serializers .IntegerField (source = 'length' )
92
+ links = BuildLinksSerializer (source = '*' )
49
93
50
94
expandable_fields = dict (
51
95
config = (
@@ -70,7 +114,7 @@ class Meta:
70
114
'commit' ,
71
115
'builder' ,
72
116
'cold_storage' ,
73
- # 'links',
117
+ 'links' ,
74
118
]
75
119
76
120
def get_finished (self , obj ):
@@ -86,6 +130,41 @@ def get_name(self, obj):
86
130
return obj .privacy_level .title ()
87
131
88
132
133
+ class VersionLinksSerializer (BaseLinksSerializer ):
134
+ _self = serializers .SerializerMethodField ()
135
+ builds = serializers .SerializerMethodField ()
136
+ project = serializers .SerializerMethodField ()
137
+
138
+ def get__self (self , obj ):
139
+ path = reverse (
140
+ 'projects-versions-detail' ,
141
+ kwargs = {
142
+ 'parent_lookup_project__slug' : obj .project .slug ,
143
+ 'version_slug' : obj .slug ,
144
+ },
145
+ )
146
+ return self ._absolute_url (path )
147
+
148
+ def get_builds (self , obj ):
149
+ path = reverse (
150
+ 'projects-versions-builds-list' ,
151
+ kwargs = {
152
+ 'parent_lookup_project__slug' : obj .project .slug ,
153
+ 'parent_lookup_version__slug' : obj .slug ,
154
+ },
155
+ )
156
+ return self ._absolute_url (path )
157
+
158
+ def get_project (self , obj ):
159
+ path = reverse (
160
+ 'projects-detail' ,
161
+ kwargs = {
162
+ 'project_slug' : obj .project .slug ,
163
+ },
164
+ )
165
+ return self ._absolute_url (path )
166
+
167
+
89
168
class VersionURLsSerializer (serializers .Serializer ):
90
169
documentation = serializers .SerializerMethodField ()
91
170
vcs = serializers .URLField (source = 'vcs_url' )
@@ -102,6 +181,7 @@ class VersionSerializer(FlexFieldsModelSerializer):
102
181
ref = serializers .CharField ()
103
182
downloads = serializers .SerializerMethodField ()
104
183
urls = VersionURLsSerializer (source = '*' )
184
+ links = VersionLinksSerializer (source = '*' )
105
185
106
186
expandable_fields = dict (
107
187
last_build = (
@@ -126,7 +206,7 @@ class Meta:
126
206
'type' ,
127
207
'downloads' ,
128
208
'urls' ,
129
- # 'links',
209
+ 'links' ,
130
210
]
131
211
132
212
def get_downloads (self , obj ):
@@ -195,22 +275,66 @@ class RepositorySerializer(serializers.Serializer):
195
275
type = serializers .CharField (source = 'repo_type' )
196
276
197
277
198
- class ProjectLinksSerializer (serializers . Serializer ):
278
+ class ProjectLinksSerializer (BaseLinksSerializer ):
199
279
200
280
_self = serializers .SerializerMethodField ()
201
281
202
282
# TODO: add these once the endpoints get implemented
203
283
# users = serializers.SerializerMethodField()
204
- # versions = serializers.SerializerMethodField()
205
- # builds = serializers.SerializerMethodField()
206
- # subprojects = serializers.SerializerMethodField()
207
- # translations = serializers.SerializerMethodField()
284
+ versions = serializers .SerializerMethodField ()
285
+ builds = serializers .SerializerMethodField ()
286
+ subprojects = serializers .SerializerMethodField ()
287
+ superprojects = serializers .SerializerMethodField ()
288
+ translations = serializers .SerializerMethodField ()
208
289
209
290
def get__self (self , obj ):
210
- scheme = 'http' if settings .DEBUG else 'https'
211
- domain = settings .PRODUCTION_DOMAIN
212
291
path = reverse ('projects-detail' , kwargs = {'project_slug' : obj .slug })
213
- return urllib .parse .urlunparse ((scheme , domain , path , '' , '' , '' ))
292
+ return self ._absolute_url (path )
293
+
294
+ def get_versions (self , obj ):
295
+ path = reverse (
296
+ 'projects-versions-list' ,
297
+ kwargs = {
298
+ 'parent_lookup_project__slug' : obj .slug ,
299
+ },
300
+ )
301
+ return self ._absolute_url (path )
302
+
303
+ def get_builds (self , obj ):
304
+ path = reverse (
305
+ 'projects-builds-list' ,
306
+ kwargs = {
307
+ 'parent_lookup_project__slug' : obj .slug ,
308
+ },
309
+ )
310
+ return self ._absolute_url (path )
311
+
312
+ def get_subprojects (self , obj ):
313
+ path = reverse (
314
+ 'projects-subprojects' ,
315
+ kwargs = {
316
+ 'project_slug' : obj .slug ,
317
+ },
318
+ )
319
+ return self ._absolute_url (path )
320
+
321
+ def get_superprojects (self , obj ):
322
+ path = reverse (
323
+ 'projects-superprojects' ,
324
+ kwargs = {
325
+ 'project_slug' : obj .slug ,
326
+ },
327
+ )
328
+ return self ._absolute_url (path )
329
+
330
+ def get_translations (self , obj ):
331
+ path = reverse (
332
+ 'projects-translations' ,
333
+ kwargs = {
334
+ 'project_slug' : obj .slug ,
335
+ },
336
+ )
337
+ return self ._absolute_url (path )
214
338
215
339
216
340
class ProjectSerializer (FlexFieldsModelSerializer ):
0 commit comments