some more debugging
This commit is contained in:
parent
153c30f491
commit
8bd7716d4c
|
@ -1349,6 +1349,7 @@ class ProcessInstanceProcessor:
|
|||
for task_to_update in tasks_to_update:
|
||||
# print(f"task_to_update: {task_to_update}")
|
||||
TaskService.reset_task_model(task_to_update, state="FUTURE", commit=commit)
|
||||
# TaskService.reset_task_model(task_to_update, state=task_to_update.state, commit=commit)
|
||||
# if task_to_update.task_definition.bpmn_identifier != 'top_level_process_script_after_gate':
|
||||
# TaskService.reset_task_model(task_to_update, state='FUTURE', commit=commit)
|
||||
# else:
|
||||
|
|
|
@ -59,6 +59,8 @@ class TaskService:
|
|||
It also returns the relating json_data object so they can be imported later.
|
||||
"""
|
||||
new_properties_json = serializer.task_to_dict(spiff_task)
|
||||
if new_properties_json["task_spec"] == "Start":
|
||||
new_properties_json["parent"] = None
|
||||
spiff_task_data = new_properties_json.pop("data")
|
||||
python_env_data_dict = cls._get_python_env_data_dict_from_spiff_task(spiff_task, serializer)
|
||||
task_model.properties_json = new_properties_json
|
||||
|
@ -251,11 +253,7 @@ class TaskService:
|
|||
# bpmn process defintion so let's avoid using it.
|
||||
if task_properties["task_spec"] == "Root":
|
||||
continue
|
||||
if task_properties["task_spec"] == "Start":
|
||||
task_properties["parent"] = None
|
||||
|
||||
task_data_dict = task_properties.pop("data")
|
||||
state_int = task_properties["state"]
|
||||
spiff_task = spiff_workflow.get_task_from_id(UUID(task_id))
|
||||
|
||||
task_model = TaskModel.query.filter_by(guid=task_id).first()
|
||||
|
@ -266,23 +264,14 @@ class TaskService:
|
|||
spiff_task,
|
||||
bpmn_definition_to_task_definitions_mappings,
|
||||
)
|
||||
task_model.state = TaskStateNames[state_int]
|
||||
task_model.properties_json = task_properties
|
||||
new_task_models[task_model.guid] = task_model
|
||||
|
||||
json_data_dict = TaskService.update_task_data_on_task_model(
|
||||
task_model, task_data_dict, "json_data_hash"
|
||||
)
|
||||
json_data_dict, python_env_dict = cls.update_task_model(task_model, spiff_task, serializer)
|
||||
|
||||
new_task_models[task_model.guid] = task_model
|
||||
if json_data_dict is not None:
|
||||
new_json_data_dicts[json_data_dict["hash"]] = json_data_dict
|
||||
|
||||
python_env_data_dict = cls._get_python_env_data_dict_from_spiff_task(spiff_task, serializer)
|
||||
python_env_dict = TaskService.update_task_data_on_task_model(
|
||||
task_model, python_env_data_dict, "python_env_data_hash"
|
||||
)
|
||||
if python_env_dict is not None:
|
||||
new_json_data_dicts[python_env_dict["hash"]] = python_env_dict
|
||||
|
||||
return (bpmn_process, new_task_models, new_json_data_dicts)
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -11,6 +11,8 @@ from SpiffWorkflow.task import Task as SpiffTask # type: ignore
|
|||
from SpiffWorkflow.task import TaskState
|
||||
|
||||
from spiffworkflow_backend.exceptions.api_error import ApiError
|
||||
from spiffworkflow_backend.models import task_definition
|
||||
from spiffworkflow_backend.models.bpmn_process_definition import BpmnProcessDefinitionModel
|
||||
from spiffworkflow_backend.models.db import db
|
||||
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
||||
from spiffworkflow_backend.models.message_instance_correlation import (
|
||||
|
@ -19,7 +21,8 @@ from spiffworkflow_backend.models.message_instance_correlation import (
|
|||
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
||||
from spiffworkflow_backend.models.process_instance_event import ProcessInstanceEventModel
|
||||
from spiffworkflow_backend.models.process_instance_event import ProcessInstanceEventType
|
||||
from spiffworkflow_backend.models.task import TaskModel # noqa: F401
|
||||
from spiffworkflow_backend.models.task import TaskModel
|
||||
from spiffworkflow_backend.models.task_definition import TaskDefinitionModel # noqa: F401
|
||||
from spiffworkflow_backend.services.assertion_service import safe_assertion
|
||||
from spiffworkflow_backend.services.process_instance_lock_service import (
|
||||
ProcessInstanceLockService,
|
||||
|
@ -93,6 +96,7 @@ class TaskModelSavingDelegate(EngineStepDelegate):
|
|||
failing_spiff_task = script_engine.failing_spiff_task
|
||||
self._update_task_model_with_spiff_task(failing_spiff_task, task_failed=True)
|
||||
|
||||
# import pdb; pdb.set_trace()
|
||||
db.session.bulk_save_objects(self.task_models.values())
|
||||
db.session.bulk_save_objects(self.process_instance_events.values())
|
||||
|
||||
|
@ -123,7 +127,7 @@ class TaskModelSavingDelegate(EngineStepDelegate):
|
|||
def _process_spiff_task_parents(self, spiff_task: SpiffTask) -> None:
|
||||
(parent_subprocess_guid, _parent_subprocess) = TaskService.task_subprocess(spiff_task)
|
||||
if parent_subprocess_guid is not None:
|
||||
spiff_task_of_parent_subprocess = spiff_task.workflow._get_outermost_workflow().get_task(
|
||||
spiff_task_of_parent_subprocess = spiff_task.workflow._get_outermost_workflow().get_task_from_id(
|
||||
UUID(parent_subprocess_guid)
|
||||
)
|
||||
|
||||
|
@ -156,6 +160,17 @@ class TaskModelSavingDelegate(EngineStepDelegate):
|
|||
bpmn_process_json_data = TaskService.update_task_data_on_bpmn_process(
|
||||
bpmn_process or task_model.bpmn_process, spiff_task.workflow.data
|
||||
)
|
||||
# stp = False
|
||||
# for ntm in new_task_models.values():
|
||||
# td = TaskDefinitionModel.query.filter_by(id=ntm.task_definition_id).first()
|
||||
# if td.bpmn_identifier == 'Start':
|
||||
# # import pdb; pdb.set_trace()
|
||||
# stp = True
|
||||
# print("HEY")
|
||||
|
||||
# if stp:
|
||||
# # import pdb; pdb.set_trace()
|
||||
# print("HEY2")
|
||||
self.task_models.update(new_task_models)
|
||||
self.json_data_dicts.update(new_json_data_dicts)
|
||||
json_data_dict_list = TaskService.update_task_model(task_model, spiff_task, self.serializer)
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
<bpmn:endEvent id="end_event_of_manual_task_model">
|
||||
<bpmn:incoming>Flow_1ygcsbt</bpmn:incoming>
|
||||
</bpmn:endEvent>
|
||||
<bpmn:manualTask id="manual_task" name="Hello">
|
||||
<bpmn:manualTask id="top_level_manual_task_two" name="Top Level Manual Task Two">
|
||||
<bpmn:extensionElements>
|
||||
<spiffworkflow:instructionsForEndUser>## Hello</spiffworkflow:instructionsForEndUser>
|
||||
</bpmn:extensionElements>
|
||||
<bpmn:incoming>Flow_1fktmf7</bpmn:incoming>
|
||||
<bpmn:incoming>Flow_1t9ywmr</bpmn:incoming>
|
||||
<bpmn:incoming>Flow_0q30935</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_09gjylo</bpmn:outgoing>
|
||||
</bpmn:manualTask>
|
||||
<bpmn:sequenceFlow id="Flow_0stlaxe" sourceRef="StartEvent_1" targetRef="top_level_script" />
|
||||
|
@ -21,8 +21,8 @@
|
|||
<bpmn:outgoing>Flow_1fktmf7</bpmn:outgoing>
|
||||
<bpmn:script>set_in_top_level_script = 1</bpmn:script>
|
||||
</bpmn:scriptTask>
|
||||
<bpmn:sequenceFlow id="Flow_1fktmf7" sourceRef="top_level_script" targetRef="manual_task" />
|
||||
<bpmn:sequenceFlow id="Flow_09gjylo" sourceRef="manual_task" targetRef="top_level_subprocess" />
|
||||
<bpmn:sequenceFlow id="Flow_1fktmf7" sourceRef="top_level_script" targetRef="top_level_manual_task_one" />
|
||||
<bpmn:sequenceFlow id="Flow_09gjylo" sourceRef="top_level_manual_task_two" targetRef="top_level_subprocess" />
|
||||
<bpmn:subProcess id="top_level_subprocess">
|
||||
<bpmn:incoming>Flow_09gjylo</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_0yxus36</bpmn:outgoing>
|
||||
|
@ -65,34 +65,43 @@ except:
|
|||
<bpmn:outgoing>Flow_1ygcsbt</bpmn:outgoing>
|
||||
<bpmn:script>set_top_level_process_script_after_gate = 1</bpmn:script>
|
||||
</bpmn:scriptTask>
|
||||
<bpmn:sequenceFlow id="Flow_1t9ywmr" sourceRef="Gateway_0p8naw0" targetRef="manual_task" />
|
||||
<bpmn:sequenceFlow id="Flow_1t9ywmr" sourceRef="Gateway_0p8naw0" targetRef="top_level_manual_task_two" />
|
||||
<bpmn:sequenceFlow id="Flow_0yxus36" sourceRef="top_level_subprocess" targetRef="top_level_call_activity" />
|
||||
<bpmn:sequenceFlow id="Flow_0q30935" sourceRef="top_level_manual_task_one" targetRef="top_level_manual_task_two" />
|
||||
<bpmn:manualTask id="top_level_manual_task_one" name="Top Level Manual Task One">
|
||||
<bpmn:incoming>Flow_1fktmf7</bpmn:incoming>
|
||||
<bpmn:outgoing>Flow_0q30935</bpmn:outgoing>
|
||||
</bpmn:manualTask>
|
||||
</bpmn:process>
|
||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
||||
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="top_level_process">
|
||||
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
|
||||
<dc:Bounds x="179" y="159" width="36" height="36" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Event_0ia26nb_di" bpmnElement="end_event_of_manual_task_model">
|
||||
<dc:Bounds x="1092" y="159" width="36" height="36" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_1rcj16n_di" bpmnElement="manual_task">
|
||||
<dc:Bounds x="400" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_1vokg57_di" bpmnElement="top_level_script">
|
||||
<dc:Bounds x="270" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_19a46sv_di" bpmnElement="top_level_subprocess">
|
||||
<dc:Bounds x="530" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_04hrmow_di" bpmnElement="top_level_call_activity">
|
||||
<dc:Bounds x="680" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Gateway_0p8naw0_di" bpmnElement="Gateway_0p8naw0" isMarkerVisible="true">
|
||||
<dc:Bounds x="835" y="152" width="50" height="50" />
|
||||
<bpmndi:BPMNShape id="Event_0ia26nb_di" bpmnElement="end_event_of_manual_task_model">
|
||||
<dc:Bounds x="1212" y="159" width="36" height="36" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_1yhtryv_di" bpmnElement="top_level_process_script_after_gate">
|
||||
<dc:Bounds x="940" y="137" width="100" height="80" />
|
||||
<dc:Bounds x="1080" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Gateway_0p8naw0_di" bpmnElement="Gateway_0p8naw0" isMarkerVisible="true">
|
||||
<dc:Bounds x="1005" y="152" width="50" height="50" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_04hrmow_di" bpmnElement="top_level_call_activity">
|
||||
<dc:Bounds x="870" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_1rcj16n_di" bpmnElement="top_level_manual_task_two">
|
||||
<dc:Bounds x="610" y="137" width="100" height="80" />
|
||||
<bpmndi:BPMNLabel />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_0ctgju0_di" bpmnElement="top_level_manual_task_one">
|
||||
<dc:Bounds x="450" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNShape id="Activity_19a46sv_di" bpmnElement="top_level_subprocess">
|
||||
<dc:Bounds x="740" y="137" width="100" height="80" />
|
||||
</bpmndi:BPMNShape>
|
||||
<bpmndi:BPMNEdge id="Flow_0stlaxe_di" bpmnElement="Flow_0stlaxe">
|
||||
<di:waypoint x="215" y="177" />
|
||||
|
@ -100,33 +109,37 @@ except:
|
|||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_1fktmf7_di" bpmnElement="Flow_1fktmf7">
|
||||
<di:waypoint x="370" y="177" />
|
||||
<di:waypoint x="400" y="177" />
|
||||
<di:waypoint x="450" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_09gjylo_di" bpmnElement="Flow_09gjylo">
|
||||
<di:waypoint x="500" y="177" />
|
||||
<di:waypoint x="530" y="177" />
|
||||
<di:waypoint x="710" y="177" />
|
||||
<di:waypoint x="740" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_187mcqe_di" bpmnElement="Flow_187mcqe">
|
||||
<di:waypoint x="780" y="177" />
|
||||
<di:waypoint x="835" y="177" />
|
||||
<di:waypoint x="970" y="177" />
|
||||
<di:waypoint x="1005" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_0lw7sda_di" bpmnElement="Flow_0lw7sda">
|
||||
<di:waypoint x="885" y="177" />
|
||||
<di:waypoint x="940" y="177" />
|
||||
<di:waypoint x="1055" y="177" />
|
||||
<di:waypoint x="1080" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_1ygcsbt_di" bpmnElement="Flow_1ygcsbt">
|
||||
<di:waypoint x="1040" y="177" />
|
||||
<di:waypoint x="1092" y="177" />
|
||||
<di:waypoint x="1180" y="177" />
|
||||
<di:waypoint x="1212" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_1t9ywmr_di" bpmnElement="Flow_1t9ywmr">
|
||||
<di:waypoint x="860" y="152" />
|
||||
<di:waypoint x="860" y="100" />
|
||||
<di:waypoint x="450" y="100" />
|
||||
<di:waypoint x="450" y="137" />
|
||||
<di:waypoint x="1030" y="152" />
|
||||
<di:waypoint x="1030" y="100" />
|
||||
<di:waypoint x="660" y="100" />
|
||||
<di:waypoint x="660" y="137" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_0yxus36_di" bpmnElement="Flow_0yxus36">
|
||||
<di:waypoint x="630" y="177" />
|
||||
<di:waypoint x="680" y="177" />
|
||||
<di:waypoint x="840" y="177" />
|
||||
<di:waypoint x="870" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
<bpmndi:BPMNEdge id="Flow_0q30935_di" bpmnElement="Flow_0q30935">
|
||||
<di:waypoint x="550" y="177" />
|
||||
<di:waypoint x="610" y="177" />
|
||||
</bpmndi:BPMNEdge>
|
||||
</bpmndi:BPMNPlane>
|
||||
</bpmndi:BPMNDiagram>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
"""Test_process_instance_processor."""
|
||||
from uuid import UUID
|
||||
import json
|
||||
|
||||
import pytest
|
||||
from flask import g
|
||||
|
@ -305,7 +306,7 @@ class TestProcessInstanceProcessor(BaseTest):
|
|||
processor.resume()
|
||||
processor.do_engine_steps(save=True)
|
||||
human_task_one = process_instance.active_human_tasks[0]
|
||||
spiff_manual_task = processor.bpmn_process_instance.get_task(UUID(human_task_one.task_id))
|
||||
spiff_manual_task = processor.bpmn_process_instance.get_task_from_id(UUID(human_task_one.task_id))
|
||||
ProcessInstanceService.complete_form_task(processor, spiff_manual_task, {}, initiator_user, human_task_one)
|
||||
assert process_instance.status == "complete"
|
||||
|
||||
|
@ -335,34 +336,30 @@ class TestProcessInstanceProcessor(BaseTest):
|
|||
)
|
||||
processor = ProcessInstanceProcessor(process_instance)
|
||||
processor.do_engine_steps(save=True)
|
||||
import pdb; pdb.set_trace()
|
||||
with open("before_reset.json", 'w') as f: f.write(json.dumps(processor.serialize(), indent=2))
|
||||
assert len(process_instance.active_human_tasks) == 1
|
||||
initial_human_task_id = process_instance.active_human_tasks[0].id
|
||||
|
||||
# save again to ensure we go attempt to process the human tasks again
|
||||
processor.save()
|
||||
|
||||
assert len(process_instance.active_human_tasks) == 1
|
||||
assert initial_human_task_id == process_instance.active_human_tasks[0].id
|
||||
|
||||
processor = ProcessInstanceProcessor(process_instance)
|
||||
human_task_one = process_instance.active_human_tasks[0]
|
||||
spiff_manual_task = processor.__class__.get_task_by_bpmn_identifier(
|
||||
human_task_one.task_name, processor.bpmn_process_instance
|
||||
)
|
||||
spiff_manual_task = processor.bpmn_process_instance.get_task_from_id(UUID(human_task_one.task_id))
|
||||
ProcessInstanceService.complete_form_task(processor, spiff_manual_task, {}, initiator_user, human_task_one)
|
||||
|
||||
|
||||
processor.suspend()
|
||||
ProcessInstanceProcessor.reset_process(process_instance, str(spiff_manual_task.parent.id), commit=True)
|
||||
import pdb; pdb.set_trace()
|
||||
ProcessInstanceProcessor.reset_process(process_instance, str(spiff_manual_task.id), commit=True)
|
||||
|
||||
process_instance = ProcessInstanceModel.query.filter_by(id=process_instance.id).first()
|
||||
processor = ProcessInstanceProcessor(process_instance)
|
||||
with open("after_reset.json", 'w') as f: f.write(json.dumps(processor.serialize(), indent=2))
|
||||
processor.resume()
|
||||
processor.do_engine_steps(save=True)
|
||||
import pdb; pdb.set_trace()
|
||||
human_task_one = process_instance.active_human_tasks[0]
|
||||
spiff_manual_task = processor.bpmn_process_instance.get_task(UUID(human_task_one.task_id))
|
||||
spiff_manual_task = processor.bpmn_process_instance.get_task_from_id(UUID(human_task_one.task_id))
|
||||
ProcessInstanceService.complete_form_task(processor, spiff_manual_task, {}, initiator_user, human_task_one)
|
||||
|
||||
import pdb; pdb.set_trace()
|
||||
assert process_instance.status == "complete"
|
||||
|
||||
def test_properly_saves_tasks_when_running(
|
||||
|
|
Loading…
Reference in New Issue