diff --git a/mistraldashboard/api.py b/mistraldashboard/api.py index b44655a..7defaec 100644 --- a/mistraldashboard/api.py +++ b/mistraldashboard/api.py @@ -110,6 +110,15 @@ def workflow_delete(request, workflow_name): return mistralclient(request).workflows.delete(workflow_name) +def workflow_update(request, workflows_definition): + """Update workflow. + + :param workflows_definition: Workflows definition + """ + + return mistralclient(request).workflows.update(workflows_definition) + + @handle_errors(_("Unable to retrieve workbooks."), []) def workbook_list(request): """Returns all workbooks.""" diff --git a/mistraldashboard/workflows/forms.py b/mistraldashboard/workflows/forms.py index f6ed71f..e56ee10 100644 --- a/mistraldashboard/workflows/forms.py +++ b/mistraldashboard/workflows/forms.py @@ -143,3 +143,18 @@ class CreateForm(forms.SelfHandlingForm): msg = _('Failed to create workflow.') redirect = reverse('horizon:mistral:workflows:index') exceptions.handle(request, msg, redirect=redirect) + + +class UpdateForm(CreateForm): + + def handle(self, request, data): + try: + api.workflow_update(request, data['definition']) + msg = _('Successfully updated workflow.') + messages.success(request, msg) + + return True + except Exception: + msg = _('Failed to update workflow.') + redirect = reverse('horizon:mistral:workflows:index') + exceptions.handle(request, msg, redirect=redirect) diff --git a/mistraldashboard/workflows/tables.py b/mistraldashboard/workflows/tables.py index 5f04062..6df920c 100644 --- a/mistraldashboard/workflows/tables.py +++ b/mistraldashboard/workflows/tables.py @@ -31,6 +31,14 @@ class CreateWorkflow(tables.LinkAction): icon = "plus" +class UpdateWorkflow(tables.LinkAction): + name = "update" + verbose_name = _("Update Workflow") + url = "horizon:mistral:workflows:change_definition" + classes = ("ajax-modal",) + icon = "pencil" + + class DeleteWorkflow(tables.DeleteAction): @staticmethod def action_present(count): @@ -103,5 +111,5 @@ class WorkflowsTable(tables.DataTable): class Meta: name = "workflows" verbose_name = _("Workflows") - table_actions = (CreateWorkflow, DeleteWorkflow) + table_actions = (CreateWorkflow, UpdateWorkflow, DeleteWorkflow) row_actions = (ExecuteWorkflow, DeleteWorkflow) diff --git a/mistraldashboard/workflows/templates/workflows/_update.html b/mistraldashboard/workflows/templates/workflows/_update.html new file mode 100644 index 0000000..dbbf12d --- /dev/null +++ b/mistraldashboard/workflows/templates/workflows/_update.html @@ -0,0 +1,6 @@ +{% extends "horizon/common/_modal_form.html" %} +{% load i18n %} +{% block modal-body-right %} +

{% trans "Description:" %}

+

{% trans "Update workflows with the provided definition." %}

+{% endblock %} diff --git a/mistraldashboard/workflows/templates/workflows/update.html b/mistraldashboard/workflows/templates/workflows/update.html new file mode 100644 index 0000000..647d077 --- /dev/null +++ b/mistraldashboard/workflows/templates/workflows/update.html @@ -0,0 +1,7 @@ +{% extends 'base.html' %} +{% load i18n %} +{% block title %}{% trans "Update Workflow" %}{% endblock %} + +{% block main %} + {% include 'mistral/workflows/_update.html' %} +{% endblock %} diff --git a/mistraldashboard/workflows/urls.py b/mistraldashboard/workflows/urls.py index dcb2d69..7dbd509 100644 --- a/mistraldashboard/workflows/urls.py +++ b/mistraldashboard/workflows/urls.py @@ -27,7 +27,11 @@ urlpatterns = patterns( url(r'^select_definition$', views.SelectDefinitionView.as_view(), name='select_definition'), + url(r'^change_definition$', + views.ChangeDefinitionView.as_view(), + name='change_definition'), url(r'^create$', views.CreateView.as_view(), name='create'), + url(r'^update$', views.UpdateView.as_view(), name='update'), url(WORKFLOWS % 'execute', views.ExecuteView.as_view(), name='execute'), url(WORKFLOWS % 'detail', views.DetailView.as_view(), name='detail'), ) diff --git a/mistraldashboard/workflows/views.py b/mistraldashboard/workflows/views.py index 3d23318..ed581a9 100644 --- a/mistraldashboard/workflows/views.py +++ b/mistraldashboard/workflows/views.py @@ -94,6 +94,19 @@ class SelectDefinitionView(forms.ModalFormView): return kwargs +class ChangeDefinitionView(SelectDefinitionView): + modal_header = _("Update Definition") + submit_url = reverse_lazy("horizon:mistral:workflows:change_definition") + success_url = reverse_lazy('horizon:mistral:workflows:update') + page_title = _("Update Definition") + + def get_form_kwargs(self): + kwargs = super(ChangeDefinitionView, self).get_form_kwargs() + kwargs['next_view'] = UpdateView + + return kwargs + + class CreateView(forms.ModalFormView): template_name = 'mistral/workflows/create.html' modal_header = _("Create Workflow") @@ -111,3 +124,13 @@ class CreateView(forms.ModalFormView): initial['definition'] = self.kwargs['definition'] return initial + + +class UpdateView(CreateView): + template_name = 'mistral/workflows/update.html' + modal_header = _("Update Workflow") + form_id = "update_workflow" + form_class = mistral_forms.UpdateForm + submit_label = _("Update") + submit_url = reverse_lazy("horizon:mistral:workflows:update") + page_title = _("Update Workflow")