Improve workflow selection before raising a WorkflowExecutionAlreadyStartedFault

This commit is contained in:
Jean-Baptiste Barth 2015-11-01 22:23:15 +01:00
parent 96d6bb056b
commit 804d2e91b5
2 changed files with 17 additions and 15 deletions

View File

@ -71,33 +71,32 @@ class Domain(object):
def add_workflow_execution(self, workflow_execution):
_id = workflow_execution.workflow_id
# TODO: handle this better: this should raise ONLY if there's an OPEN wfe with this ID
if any(wfe.workflow_id == _id for wfe in self.workflow_executions):
if self.get_workflow_execution(_id, raise_if_none=False):
raise SWFWorkflowExecutionAlreadyStartedFault()
self.workflow_executions.append(workflow_execution)
def get_workflow_execution(self, workflow_id, run_id=None, raise_if_closed=False):
def get_workflow_execution(self, workflow_id, run_id=None,
raise_if_none=True, raise_if_closed=False):
# query
if run_id:
_all = [w for w in self.workflow_executions
if w.workflow_id == workflow_id and w.run_id == run_id]
else:
_all = [w for w in self.workflow_executions
if w.workflow_id == workflow_id and w.execution_status == "OPEN"]
# reduce
wfe = _all[0] if _all else None
# raise if closed / none
if raise_if_closed and wfe and wfe.execution_status == "CLOSED":
wfe = None
if run_id:
if not wfe or wfe.run_id != run_id:
raise SWFUnknownResourceFault(
"execution",
"WorkflowExecution=[workflowId={}, runId={}]".format(
workflow_id, run_id
)
)
elif not wfe:
raise SWFUnknownResourceFault(
"execution, workflowId = {}".format(workflow_id)
)
if not wfe and raise_if_none:
if run_id:
args = ["execution", "WorkflowExecution=[workflowId={}, runId={}]".format(
workflow_id, run_id)]
else:
args = ["execution, workflowId = {}".format(workflow_id)]
raise SWFUnknownResourceFault(*args)
# at last return workflow execution
return wfe
def add_to_activity_task_list(self, task_list, obj):

View File

@ -97,3 +97,6 @@ def test_domain_get_workflow_execution():
SWFUnknownResourceFault,
"Unknown execution: WorkflowExecution=[workflowId=wf-id-3, runId=run-id-4]"
)
# raise_if_none attribute
domain.get_workflow_execution("foo", raise_if_none=False).should.be.none