From ae13768b636824b6514268189b5af2458c3c67c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 12 Nov 2016 17:11:16 +0100 Subject: [PATCH] workflows: add custom handling for computed email destinations (#13935) --- tests/test_workflow_import.py | 21 ++++++++++++++++++++- wcs/workflows.py | 14 +++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/tests/test_workflow_import.py b/tests/test_workflow_import.py index a3c0ca9..e2e9144 100644 --- a/tests/test_workflow_import.py +++ b/tests/test_workflow_import.py @@ -7,7 +7,8 @@ from quixote import cleanup from wcs import publisher from wcs.workflows import (Workflow, CommentableWorkflowStatusItem, - WorkflowCriticalityLevel, WorkflowBackofficeFieldsFormDef) + WorkflowCriticalityLevel, WorkflowBackofficeFieldsFormDef, + SendmailWorkflowStatusItem) from wcs.wf.wscall import WebserviceCallStatusItem from wcs.wf.dispatch import DispatchWorkflowStatusItem from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem @@ -441,6 +442,24 @@ def test_display_message_action(): wf2 = assert_import_export_works(wf, include_id=True) +def test_sendmail_other_destination(): + wf = Workflow(name='status') + st1 = wf.add_status('Status1', 'st1') + + sendmail = SendmailWorkflowStatusItem() + sendmail.to = ['_submitter'] + st1.items.append(sendmail) + sendmail.parent = st1 + + Role.wipe() + wf2 = assert_import_export_works(wf) + assert Role.count() == 0 + + sendmail.to = ['_submitter', '=form_var_plop', '[form_var_plop]', 'foobar@localhost'] + wf2 = assert_import_export_works(wf) + assert Role.count() == 0 + assert wf2.possible_status[0].items[0].to == sendmail.to + def test_criticality_level(): wf = Workflow(name='criticality level') wf.criticality_levels = [ diff --git a/wcs/workflows.py b/wcs/workflows.py index f4e33ee..ff015b8 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -1953,10 +1953,22 @@ class SendmailWorkflowStatusItem(WorkflowStatusItem): comment = None + def _get_role_id_from_xml(self, elem, charset, include_id=False): + # override to allow for destination set with computed values. + if elem is None: + return None + value = elem.text.encode(charset) + + if value.startswith('=') or '@' in value or '[' in value: + return value + + return super(SendmailWorkflowStatusItem, self)._get_role_id_from_xml( + elem, charset, include_id=include_id) + def render_list_of_roles_or_emails(self, roles): t = [] for r in roles: - if r.startswith('='): + if r.startswith('=') or '[' in r: t.append(_('computed value')) elif '@' in r: t.append(r) -- 2.10.2