Skip to content

Commit 9f78302

Browse files
committed
Implement the workflows Django app
1 parent 2d63355 commit 9f78302

File tree

20 files changed

+858
-10
lines changed

20 files changed

+858
-10
lines changed

.github/workflows/dev.yml

100644100755
File mode changed.

chris_backend/config/settings/common.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
'pacsfiles',
4242
'servicefiles',
4343
'filebrowser',
44-
'users'
44+
'users',
45+
'workflows'
4546
]
4647

4748
# Pagination

chris_backend/config/settings/local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272

7373
for app in ['collectionjson', 'core', 'feeds', 'plugins', 'plugininstances', 'pipelines',
7474
'pipelineinstances', 'uploadedfiles', 'pacsfiles', 'servicefiles', 'users',
75-
'filebrowser']:
75+
'filebrowser', 'workflows']:
7676
LOGGING['loggers'][app] = {
7777
'level': 'DEBUG',
7878
'handlers': ['console_verbose', 'file'],

chris_backend/core/api.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from plugininstances import views as plugininstance_views
1010
from pipelines import views as pipeline_views
1111
from pipelineinstances import views as pipelineinstance_views
12+
from workflows import views as workflow_views
1213
from uploadedfiles import views as uploadedfile_views
1314
from pacsfiles import views as pacsfile_views
1415
from servicefiles import views as servicefile_views
@@ -276,6 +277,23 @@
276277
name='pipelineinstance-plugininstance-list'),
277278

278279

280+
path('v1/pipelines/<int:pk>/workflows/',
281+
workflow_views.WorkflowList.as_view(),
282+
name='workflow-list'),
283+
284+
path('v1/pipelines/workflows/',
285+
workflow_views.AllWorkflowList.as_view(),
286+
name='allworkflow-list'),
287+
288+
path('v1/pipelines/workflows/search/',
289+
workflow_views.AllWorkflowListQuerySearch.as_view(),
290+
name='allworkflow-list-query-search'),
291+
292+
path('v1/pipelines/workflows/<int:pk>/',
293+
workflow_views.WorkflowDetail.as_view(),
294+
name='workflow-detail'),
295+
296+
279297
path('v1/uploadedfiles/',
280298
uploadedfile_views.UploadedFileList.as_view(),
281299
name='uploadedfile-list'),

chris_backend/feeds/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ def list(self, request, *args, **kwargs):
303303
'pipelines': reverse('pipeline-list', request=request),
304304
'pipeline_instances': reverse('allpipelineinstance-list',
305305
request=request),
306+
'workflows': reverse('allworkflow-list', request=request),
306307
'tags': reverse('tag-list', request=request),
307308
'uploadedfiles': reverse('uploadedfile-list', request=request),
308309
'pacsfiles': reverse('pacsfile-list', request=request),

chris_backend/pipelineinstances/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def validate_previous_plugin_inst(self, previous_plugin_inst_id):
4848
except (ValueError, ObjectDoesNotExist):
4949
raise serializers.ValidationError(
5050
{'previous_plugin_inst_id':
51-
["Couldn't find any 'previous' plugin instance with id %s."]})
51+
[f"Couldn't find any 'previous' plugin instance with id {pk}."]})
5252
# check that the user can run plugins within this feed
5353
user = self.context['request'].user
5454
if user not in previous_plugin_inst.feed.owner.all():

chris_backend/pipelines/serializers.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@ class PipelineSerializer(serializers.HyperlinkedModelSerializer):
2727
default_parameters = serializers.HyperlinkedIdentityField(
2828
view_name='pipeline-defaultparameter-list')
2929
instances = serializers.HyperlinkedIdentityField(view_name='pipelineinstance-list')
30+
workflows = serializers.HyperlinkedIdentityField(view_name='workflow-list')
3031

3132
class Meta:
3233
model = Pipeline
3334
fields = ('url', 'id', 'name', 'locked', 'authors', 'category', 'description',
3435
'plugin_tree', 'plugin_inst_id', 'owner_username', 'creation_date',
3536
'modification_date', 'plugins', 'plugin_pipings', 'default_parameters',
36-
'instances')
37+
'instances', 'workflows')
3738

3839
def create(self, validated_data):
3940
"""
@@ -118,10 +119,10 @@ def validate_plugin_inst_id(self, plugin_inst_id):
118119
raise serializers.ValidationError(
119120
["Couldn't find any plugin instance with id %s." % plugin_inst_id])
120121
plg = plg_inst.plugin
121-
if plg.meta.type == 'fs':
122+
if plg.meta.type != 'ds':
122123
raise serializers.ValidationError(
123-
["Plugin instance of %s which is of type 'fs' and therefore can not "
124-
"be used as the root of a new pipeline." % plg.meta.name])
124+
[f"Plugin instance of %s which is of type {plg.meta.type} and therefore "
125+
f"can not be used as the root of a new pipeline." % plg.meta.name])
125126
return plg_inst
126127

127128
def validate_plugin_tree(self, plugin_tree):
@@ -313,19 +314,21 @@ def _add_plugin_tree_to_pipeline(pipeline, tree_dict):
313314

314315
class PluginPipingSerializer(serializers.HyperlinkedModelSerializer):
315316
plugin_id = serializers.ReadOnlyField(source='plugin.id')
317+
plugin_name = serializers.ReadOnlyField(source='plugin.meta.name')
318+
plugin_version = serializers.ReadOnlyField(source='plugin.version')
316319
pipeline_id = serializers.ReadOnlyField(source='pipeline.id')
317320
previous_id = serializers.ReadOnlyField(source='previous.id')
318321
previous = serializers.HyperlinkedRelatedField(view_name='pluginpiping-detail',
319-
read_only=True)
322+
read_only=True)
320323
plugin = serializers.HyperlinkedRelatedField(view_name='plugin-detail',
321324
read_only=True)
322325
pipeline = serializers.HyperlinkedRelatedField(view_name='pipeline-detail',
323326
read_only=True)
324327

325328
class Meta:
326329
model = PluginPiping
327-
fields = ('url', 'id', 'plugin_id', 'pipeline_id', 'previous_id', 'previous',
328-
'plugin', 'pipeline')
330+
fields = ('url', 'id', 'previous_id', 'plugin_id', 'plugin_name',
331+
'plugin_version', 'pipeline_id', 'previous', 'plugin', 'pipeline')
329332

330333

331334
class DefaultPipingStrParameterSerializer(serializers.HyperlinkedModelSerializer):

chris_backend/plugininstances/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,3 +353,11 @@ class Meta:
353353

354354
def __str__(self):
355355
return self.value
356+
357+
358+
PARAMETER_MODELS = {'string': StrParameter,
359+
'integer': IntParameter,
360+
'float': FloatParameter,
361+
'boolean': BoolParameter,
362+
'path': PathParameter,
363+
'unextpath': UnextpathParameter}

chris_backend/workflows/__init__.py

Whitespace-only changes.

chris_backend/workflows/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

0 commit comments

Comments
 (0)