@@ -31,6 +31,28 @@ 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
+
45
+ def get__self (self , obj ):
46
+ path = reverse (
47
+ 'projects-builds-detail' ,
48
+ kwargs = {
49
+ 'parent_lookup_project__slug' : obj .project .slug ,
50
+ 'build_pk' : obj .pk ,
51
+ },
52
+ )
53
+ return self ._absolute_url (path )
54
+
55
+
34
56
class BuildConfigSerializer (FlexFieldsSerializerMixin , serializers .Serializer ):
35
57
36
58
def to_representation (self , obj ):
@@ -46,6 +68,7 @@ class BuildSerializer(FlexFieldsModelSerializer):
46
68
created = serializers .DateTimeField (source = 'date' )
47
69
finished = serializers .SerializerMethodField ()
48
70
duration = serializers .IntegerField (source = 'length' )
71
+ links = BuildLinksSerializer (source = '*' )
49
72
50
73
expandable_fields = dict (
51
74
config = (
@@ -70,7 +93,7 @@ class Meta:
70
93
'commit' ,
71
94
'builder' ,
72
95
'cold_storage' ,
73
- # 'links',
96
+ 'links' ,
74
97
]
75
98
76
99
def get_finished (self , obj ):
@@ -86,6 +109,41 @@ def get_name(self, obj):
86
109
return obj .privacy_level .title ()
87
110
88
111
112
+ class VersionLinksSerializer (BaseLinksSerializer ):
113
+ _self = serializers .SerializerMethodField ()
114
+ builds = serializers .SerializerMethodField ()
115
+ project = serializers .SerializerMethodField ()
116
+
117
+ def get__self (self , obj ):
118
+ path = reverse (
119
+ 'projects-versions-detail' ,
120
+ kwargs = {
121
+ 'parent_lookup_project__slug' : obj .project .slug ,
122
+ 'version_slug' : obj .slug ,
123
+ },
124
+ )
125
+ return self ._absolute_url (path )
126
+
127
+ def get_builds (self , obj ):
128
+ path = reverse (
129
+ 'projects-versions-builds-list' ,
130
+ kwargs = {
131
+ 'parent_lookup_project__slug' : obj .project .slug ,
132
+ 'parent_lookup_version__slug' : obj .slug ,
133
+ },
134
+ )
135
+ return self ._absolute_url (path )
136
+
137
+ def get_project (self , obj ):
138
+ path = reverse (
139
+ 'projects-detail' ,
140
+ kwargs = {
141
+ 'project_slug' : obj .project .slug ,
142
+ },
143
+ )
144
+ return self ._absolute_url (path )
145
+
146
+
89
147
class VersionURLsSerializer (serializers .Serializer ):
90
148
documentation = serializers .SerializerMethodField ()
91
149
vcs = serializers .URLField (source = 'vcs_url' )
@@ -102,6 +160,7 @@ class VersionSerializer(FlexFieldsModelSerializer):
102
160
ref = serializers .CharField ()
103
161
downloads = serializers .SerializerMethodField ()
104
162
urls = VersionURLsSerializer (source = '*' )
163
+ links = VersionLinksSerializer (source = '*' )
105
164
106
165
expandable_fields = dict (
107
166
last_build = (
@@ -126,7 +185,7 @@ class Meta:
126
185
'type' ,
127
186
'downloads' ,
128
187
'urls' ,
129
- # 'links',
188
+ 'links' ,
130
189
]
131
190
132
191
def get_downloads (self , obj ):
@@ -195,22 +254,66 @@ class RepositorySerializer(serializers.Serializer):
195
254
type = serializers .CharField (source = 'repo_type' )
196
255
197
256
198
- class ProjectLinksSerializer (serializers . Serializer ):
257
+ class ProjectLinksSerializer (BaseLinksSerializer ):
199
258
200
259
_self = serializers .SerializerMethodField ()
201
260
202
261
# TODO: add these once the endpoints get implemented
203
262
# users = serializers.SerializerMethodField()
204
- # versions = serializers.SerializerMethodField()
205
- # builds = serializers.SerializerMethodField()
206
- # subprojects = serializers.SerializerMethodField()
207
- # translations = serializers.SerializerMethodField()
263
+ versions = serializers .SerializerMethodField ()
264
+ builds = serializers .SerializerMethodField ()
265
+ subprojects = serializers .SerializerMethodField ()
266
+ superprojects = serializers .SerializerMethodField ()
267
+ translations = serializers .SerializerMethodField ()
208
268
209
269
def get__self (self , obj ):
210
- scheme = 'http' if settings .DEBUG else 'https'
211
- domain = settings .PRODUCTION_DOMAIN
212
270
path = reverse ('projects-detail' , kwargs = {'project_slug' : obj .slug })
213
- return urllib .parse .urlunparse ((scheme , domain , path , '' , '' , '' ))
271
+ return self ._absolute_url (path )
272
+
273
+ def get_versions (self , obj ):
274
+ path = reverse (
275
+ 'projects-versions-list' ,
276
+ kwargs = {
277
+ 'parent_lookup_project__slug' : obj .slug ,
278
+ },
279
+ )
280
+ return self ._absolute_url (path )
281
+
282
+ def get_builds (self , obj ):
283
+ path = reverse (
284
+ 'projects-builds-list' ,
285
+ kwargs = {
286
+ 'parent_lookup_project__slug' : obj .slug ,
287
+ },
288
+ )
289
+ return self ._absolute_url (path )
290
+
291
+ def get_subprojects (self , obj ):
292
+ path = reverse (
293
+ 'projects-subprojects' ,
294
+ kwargs = {
295
+ 'project_slug' : obj .slug ,
296
+ },
297
+ )
298
+ return self ._absolute_url (path )
299
+
300
+ def get_superprojects (self , obj ):
301
+ path = reverse (
302
+ 'projects-superprojects' ,
303
+ kwargs = {
304
+ 'project_slug' : obj .slug ,
305
+ },
306
+ )
307
+ return self ._absolute_url (path )
308
+
309
+ def get_translations (self , obj ):
310
+ path = reverse (
311
+ 'projects-translations' ,
312
+ kwargs = {
313
+ 'project_slug' : obj .slug ,
314
+ },
315
+ )
316
+ return self ._absolute_url (path )
214
317
215
318
216
319
class ProjectSerializer (FlexFieldsModelSerializer ):
0 commit comments