workflow: only check expiration jumps on formdata with relevant status (#23174)
This commit is contained in:
parent
34d77aa973
commit
a5fb918f85
|
@ -1752,7 +1752,7 @@ def test_webservice_target_status(pub):
|
|||
assert targets.count(status1) == 1
|
||||
assert targets.count(status2) == 2
|
||||
|
||||
def test_timeout(pub):
|
||||
def test_timeout(two_pubs):
|
||||
workflow = Workflow(name='timeout')
|
||||
st1 = workflow.add_status('Status1', 'st1')
|
||||
st2 = workflow.add_status('Status2', 'st2')
|
||||
|
@ -1780,10 +1780,16 @@ def test_timeout(pub):
|
|||
formdata_id = formdata.id
|
||||
|
||||
time.sleep(0.3)
|
||||
_apply_timeouts(pub)
|
||||
_apply_timeouts(two_pubs)
|
||||
|
||||
assert formdef.data_class().get(formdata_id).status == 'wf-st2'
|
||||
|
||||
# check there's no crash on workflow without jumps
|
||||
formdef = FormDef()
|
||||
formdef.name = 'xxx'
|
||||
formdef.store()
|
||||
_apply_timeouts(two_pubs)
|
||||
|
||||
def test_legacy_timeout(pub):
|
||||
workflow = Workflow(name='timeout')
|
||||
st1 = workflow.add_status('Status1', 'st1')
|
||||
|
|
|
@ -278,24 +278,21 @@ def _apply_timeouts(publisher):
|
|||
from formdef import FormDef
|
||||
wfs_status = workflows_with_timeout()
|
||||
|
||||
for formdef_id in FormDef.keys():
|
||||
formdef = FormDef.get(formdef_id, ignore_errors = True)
|
||||
if not formdef:
|
||||
for formdef in FormDef.select(ignore_errors=True):
|
||||
status_ids = wfs_status.get(str(formdef.workflow_id))
|
||||
if not status_ids:
|
||||
continue
|
||||
if str(formdef.workflow_id) in wfs_status.keys():
|
||||
for formdata_id in formdef.data_class().keys():
|
||||
formdata = formdef.data_class().get(formdata_id, ignore_errors = True)
|
||||
if not formdata:
|
||||
continue
|
||||
if formdata.status in wfs_status[str(formdef.workflow_id)]:
|
||||
for x in wfs_status[str(formdef.workflow_id)][formdata.status]:
|
||||
get_publisher().substitutions.reset()
|
||||
get_publisher().substitutions.feed(get_publisher())
|
||||
get_publisher().substitutions.feed(formdef)
|
||||
get_publisher().substitutions.feed(formdata)
|
||||
if x.must_jump(formdata):
|
||||
jump_and_perform(formdata, x.status)
|
||||
break
|
||||
formdata_class = formdef.data_class()
|
||||
for status_id in status_ids:
|
||||
for formdata in formdata_class.get_with_indexed_value('status', status_id, ignore_errors=True):
|
||||
for x in wfs_status[str(formdef.workflow_id)][formdata.status]:
|
||||
get_publisher().substitutions.reset()
|
||||
get_publisher().substitutions.feed(get_publisher())
|
||||
get_publisher().substitutions.feed(formdef)
|
||||
get_publisher().substitutions.feed(formdata)
|
||||
if x.must_jump(formdata):
|
||||
jump_and_perform(formdata, x.status)
|
||||
break
|
||||
|
||||
if get_publisher_class():
|
||||
# every JUMP_TIMEOUT_INTERVAL minutes check for expired status jump
|
||||
|
|
Loading…
Reference in New Issue