From d2526a9dad7cd97dfad77319f9e09cd3fac9bae2 Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Fri, 31 Jul 2020 14:47:59 +0200 Subject: [PATCH] wf/external_workflow: select specific formdef/cardef in evolution parts (#45659) --- tests/test_workflows.py | 24 ++++++++++++++++++++++++ wcs/wf/external_workflow.py | 6 ++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/tests/test_workflows.py b/tests/test_workflows.py index 7de09a217..8d2f96804 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -4878,17 +4878,41 @@ def test_call_external_workflow_with_evolution_linked_object(pub): assert external_formdef.data_class().count() == 1 assert external_carddef.data_class().count() == 1 external_formdata = external_formdef.data_class().select()[0] + + # remove external formdata perform_items([action], formdata) assert LoggedError.count() == 0 assert external_formdef.data_class().count() == 0 assert external_carddef.data_class().count() == 1 + # formdata is already deleted: cannot find it again perform_items([action], formdata) assert LoggedError.count() == 1 logged_error = LoggedError.select()[0] assert logged_error.summary == 'Could not find linked "External Form" object by id %s' % external_formdata.id assert logged_error.exception_class == 'KeyError' + # try remove an unexisting carddef: do nothing + unused_carddef = CardDef() + unused_carddef.name = 'External Card (not used)' + unused_carddef.fields = [] + unused_carddef.workflow = external_wf + unused_carddef.store() + LoggedError.wipe() + action.slug = 'carddef:%s' % unused_carddef.url_name + wf.store() + perform_items([action], formdata) + assert LoggedError.count() == 0 + assert external_formdef.data_class().count() == 0 + assert external_carddef.data_class().count() == 1 + # remove the right carddef + action.slug = 'carddef:%s' % external_carddef.url_name + wf.store() + perform_items([action], formdata) + assert LoggedError.count() == 0 + assert external_formdef.data_class().count() == 0 + assert external_carddef.data_class().count() == 0 + def test_call_external_workflow_with_data_sourced_object(pub): FormDef.wipe() diff --git a/wcs/wf/external_workflow.py b/wcs/wf/external_workflow.py index 9925ca5de..f84b5f046 100644 --- a/wcs/wf/external_workflow.py +++ b/wcs/wf/external_workflow.py @@ -132,8 +132,10 @@ class ExternalWorkflowGlobalAction(WorkflowStatusItem): # search in evolution for part in formdata.iter_evolution_parts(): - if isinstance(part, LinkedFormdataEvolutionPart) and part.formdef_class == objectdef.__class__: - data_ids.append(part.formdata_id) + if isinstance(part, LinkedFormdataEvolutionPart): + part_identifier = '%s:%s' % (part.formdef.xml_root_node, part.formdef.url_name) + if part_identifier == self.slug: + data_ids.append(part.formdata_id) for target_id in data_ids: try: