15
15
from .models import DefaultPipingBoolParameter , DefaultPipingStrParameter
16
16
17
17
18
+ class PluginPipingSerializer (serializers .HyperlinkedModelSerializer ):
19
+ previous_id = serializers .ReadOnlyField (source = 'previous.id' )
20
+ plugin_id = serializers .ReadOnlyField (source = 'plugin.id' )
21
+ plugin_name = serializers .ReadOnlyField (source = 'plugin.meta.name' )
22
+ plugin_version = serializers .ReadOnlyField (source = 'plugin.version' )
23
+ pipeline_id = serializers .ReadOnlyField (source = 'pipeline.id' )
24
+ previous = serializers .HyperlinkedRelatedField (view_name = 'pluginpiping-detail' ,
25
+ read_only = True )
26
+ plugin = serializers .HyperlinkedRelatedField (view_name = 'plugin-detail' ,
27
+ read_only = True )
28
+ pipeline = serializers .HyperlinkedRelatedField (view_name = 'pipeline-detail' ,
29
+ read_only = True )
30
+
31
+ class Meta :
32
+ model = PluginPiping
33
+ fields = ('url' , 'id' , 'previous_id' , 'title' , 'plugin_id' , 'plugin_name' ,
34
+ 'plugin_version' , 'pipeline_id' , 'previous' , 'plugin' , 'pipeline' )
35
+
36
+
18
37
class PipelineSerializer (serializers .HyperlinkedModelSerializer ):
19
38
plugin_tree = serializers .JSONField (write_only = True , required = False )
20
39
owner_username = serializers .ReadOnlyField (source = 'owner.username' )
@@ -123,6 +142,16 @@ def validate_plugin_tree(self, plugin_tree):
123
142
msg = [f"Plugin { plg } is of type 'fs' and therefore can not be used to "
124
143
f"create a pipeline." ]
125
144
raise serializers .ValidationError (msg )
145
+ title = d .get ('title' )
146
+ if title is None :
147
+ d ['title' ] = plg .meta .name
148
+ else :
149
+ piping_serializer = PluginPipingSerializer (data = {'title' : title })
150
+ try :
151
+ piping_serializer .is_valid (raise_exception = True )
152
+ except serializers .ValidationError as e :
153
+ raise serializers .ValidationError ([f'Invalid title: { title } , '
154
+ f'detail: { str (e )} ' ])
126
155
if 'plugin_parameter_defaults' in d :
127
156
param_defaults = d ['plugin_parameter_defaults' ]
128
157
PipelineSerializer .validate_plugin_parameter_defaults (plg , param_defaults )
@@ -192,16 +221,20 @@ def get_tree(tree_list):
192
221
raise ValueError (f'Could not find the root of the tree in { tree_list } .' )
193
222
tree = [None ] * len (tree_list )
194
223
plugin_id = tree_list [root_ix ]['plugin_id' ]
224
+ title = tree_list [root_ix ]['title' ]
195
225
defaults = tree_list [root_ix ]['plugin_parameter_defaults' ]
196
226
tree [root_ix ] = {'plugin_id' : plugin_id ,
227
+ 'title' : title ,
197
228
'plugin_parameter_defaults' : defaults ,
198
229
'child_indices' : []}
199
230
for ix , d in enumerate (tree_list ):
200
231
if ix != root_ix :
201
232
if not tree [ix ]:
202
233
plugin_id = d ['plugin_id' ]
234
+ title = d ['title' ]
203
235
defaults = d ['plugin_parameter_defaults' ]
204
236
tree [ix ] = {'plugin_id' : plugin_id ,
237
+ 'title' : title ,
205
238
'plugin_parameter_defaults' : defaults ,
206
239
'child_indices' : []}
207
240
prev_ix = d ['previous_index' ]
@@ -210,8 +243,10 @@ def get_tree(tree_list):
210
243
tree [prev_ix ]['child_indices' ].append (ix )
211
244
else :
212
245
plugin_id = tree_list [prev_ix ]['plugin_id' ]
246
+ title = tree_list [prev_ix ]['title' ]
213
247
defaults = tree_list [prev_ix ]['plugin_parameter_defaults' ]
214
248
tree [prev_ix ] = {'plugin_id' : plugin_id ,
249
+ 'title' : title ,
215
250
'plugin_parameter_defaults' : defaults ,
216
251
'child_indices' : [ix ]}
217
252
except (IndexError , TypeError ):
@@ -247,7 +282,9 @@ def _add_plugin_tree_to_pipeline(pipeline, tree_dict):
247
282
root_ix = tree_dict ['root_index' ]
248
283
tree = tree_dict ['tree' ]
249
284
root_plg = Plugin .objects .get (pk = tree [root_ix ]['plugin_id' ])
250
- root_plg_piping = PluginPiping .objects .create (pipeline = pipeline , plugin = root_plg )
285
+ title = tree [root_ix ]['title' ]
286
+ root_plg_piping = PluginPiping .objects .create (title = title , pipeline = pipeline ,
287
+ plugin = root_plg )
251
288
defaults = tree [root_ix ]['plugin_parameter_defaults' ]
252
289
root_plg_piping .save (parameter_defaults = defaults )
253
290
# breath-first traversal
@@ -258,33 +295,15 @@ def _add_plugin_tree_to_pipeline(pipeline, tree_dict):
258
295
curr_piping = piping_queue .pop (0 )
259
296
for ix in tree [curr_ix ]['child_indices' ]:
260
297
plg = Plugin .objects .get (pk = tree [ix ]['plugin_id' ])
261
- plg_piping = PluginPiping .objects .create (pipeline = pipeline , plugin = plg ,
262
- previous = curr_piping )
298
+ title = tree [ix ]['title' ]
299
+ plg_piping = PluginPiping .objects .create (title = title , pipeline = pipeline ,
300
+ plugin = plg , previous = curr_piping )
263
301
defaults = tree [ix ]['plugin_parameter_defaults' ]
264
302
plg_piping .save (parameter_defaults = defaults )
265
303
ix_queue .append (ix )
266
304
piping_queue .append (plg_piping )
267
305
268
306
269
- class PluginPipingSerializer (serializers .HyperlinkedModelSerializer ):
270
- plugin_id = serializers .ReadOnlyField (source = 'plugin.id' )
271
- plugin_name = serializers .ReadOnlyField (source = 'plugin.meta.name' )
272
- plugin_version = serializers .ReadOnlyField (source = 'plugin.version' )
273
- pipeline_id = serializers .ReadOnlyField (source = 'pipeline.id' )
274
- previous_id = serializers .ReadOnlyField (source = 'previous.id' )
275
- previous = serializers .HyperlinkedRelatedField (view_name = 'pluginpiping-detail' ,
276
- read_only = True )
277
- plugin = serializers .HyperlinkedRelatedField (view_name = 'plugin-detail' ,
278
- read_only = True )
279
- pipeline = serializers .HyperlinkedRelatedField (view_name = 'pipeline-detail' ,
280
- read_only = True )
281
-
282
- class Meta :
283
- model = PluginPiping
284
- fields = ('url' , 'id' , 'plugin_id' , 'plugin_name' , 'plugin_version' ,
285
- 'pipeline_id' , 'previous_id' , 'previous' , 'plugin' , 'pipeline' )
286
-
287
-
288
307
class DefaultPipingStrParameterSerializer (serializers .HyperlinkedModelSerializer ):
289
308
previous_plugin_piping_id = serializers .ReadOnlyField (
290
309
source = 'plugin_piping.previous_id' )
0 commit comments