From b42b2c4f25b5e7d95d514323608b481d8c05e232 Mon Sep 17 00:00:00 2001 From: Mateusz Kowalski Date: Tue, 22 Aug 2017 12:33:51 +0200 Subject: [PATCH] Expand parameter list for workflow execution Currently one generic field "Input" is shown when executing a workflow. This patch checks list of parameters for a workflow and generates a Django form according to the results, also prefilling any default value. In case default value for a parameter is none, field is not marked as required. Closes-bug: #1712322 Change-Id: I702d2b196f87e46bc39da00cad509d2f08f5d24c --- mistraldashboard/workflows/forms.py | 31 +++++++++++++++++++++++------ mistraldashboard/workflows/views.py | 4 +++- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/mistraldashboard/workflows/forms.py b/mistraldashboard/workflows/forms.py index 78283c9..f05a3f2 100644 --- a/mistraldashboard/workflows/forms.py +++ b/mistraldashboard/workflows/forms.py @@ -30,21 +30,40 @@ class ExecuteForm(forms.SelfHandlingForm): required=True, widget=forms.TextInput(attrs={'readonly': 'readonly'}) ) - workflow_input = forms.CharField( - label=_("Input"), - required=False, - initial="{}", - widget=forms.widgets.Textarea() - ) task_name = forms.CharField( label=_("Task name"), required=False, widget=forms.TextInput() ) + def __init__(self, *args, **kwargs): + super(ExecuteForm, self).__init__(*args, **kwargs) + self._generate_parameter_fields(kwargs["initial"]["parameter_list"]) + + def _generate_parameter_fields(self, list): + self.workflow_parameters = [] + for entry in list.split(","): + label, _, default = entry.partition("=") + label = label.strip() + self.workflow_parameters.append(label) + if default == "None": + default = None + required = False + else: + required = True + self.fields[label] = forms.CharField(label=label, + required=required, + initial=default) + def handle(self, request, data): try: data['workflow_identifier'] = data.pop('workflow_name') + data['workflow_input'] = {} + for param in self.workflow_parameters: + value = data.pop(param) + if value == "": + value = None + data['workflow_input'][param] = value ex = api.execution_create(request, **data) msg = _('Execution has been created with id "%s".') % ex.id diff --git a/mistraldashboard/workflows/views.py b/mistraldashboard/workflows/views.py index 5428d4e..7ce8eb4 100644 --- a/mistraldashboard/workflows/views.py +++ b/mistraldashboard/workflows/views.py @@ -107,7 +107,9 @@ class ExecuteView(forms.ModalFormView): return context def get_initial(self, **kwargs): - return {'workflow_name': self.kwargs['workflow_name']} + workflow = get_single_data(self.request, self.kwargs['workflow_name']) + return {'workflow_name': self.kwargs['workflow_name'], + 'parameter_list': workflow.input} class SelectDefinitionView(forms.ModalFormView):