initial changes to remove loop reset with spiff w/ burnettk

This commit is contained in:
jasquat 2023-03-08 13:06:25 -05:00
parent f990f68b03
commit f0df36c862
No known key found for this signature in database
5 changed files with 50 additions and 10 deletions

View File

@ -1854,8 +1854,8 @@ lxml = "*"
[package.source]
type = "git"
url = "https://github.com/sartography/SpiffWorkflow"
reference = "main"
resolved_reference = "bee868d38b2c3da680c7a96b6a634d16b90d5861"
reference = "feature/remove-loop-reset"
resolved_reference = "13034aaf12f62aa3914744ca05bc9a3e3b3c3452"
[[package]]
name = "SQLAlchemy"
@ -2234,7 +2234,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools"
[metadata]
lock-version = "1.1"
python-versions = ">=3.9,<3.12"
content-hash = "2fd5138221eabec441b601bb3769be478bed42099e72e20f7b8aaa1c1a888909"
content-hash = "eac3b5aa78efea376a9e23e32f9e6853cc22c17a2a21b41e30800cb7c807d017"
[metadata.files]
alabaster = [

View File

@ -27,7 +27,7 @@ flask-marshmallow = "*"
flask-migrate = "*"
flask-restful = "*"
werkzeug = "*"
SpiffWorkflow = {git = "https://github.com/sartography/SpiffWorkflow", rev = "main"}
SpiffWorkflow = {git = "https://github.com/sartography/SpiffWorkflow", rev = "feature/remove-loop-reset"}
# SpiffWorkflow = {develop = true, path = "../SpiffWorkflow" }
sentry-sdk = "^1.10"
sphinx-autoapi = "^2.0"

View File

@ -889,6 +889,12 @@ paths:
description: If set will return the tasks as they were during a specific step of execution.
schema:
type: integer
- name: most_recent_tasks_only
in: query
required: false
description: If true, this wil return only the most recent tasks.
schema:
type: boolean
get:
tags:
- Process Instances
@ -936,6 +942,12 @@ paths:
description: If set will return the tasks as they were during a specific step of execution.
schema:
type: integer
- name: most_recent_tasks_only
in: query
required: false
description: If true, this wil return only the most recent tasks.
schema:
type: boolean
get:
tags:
- Process Instances

View File

@ -1,5 +1,6 @@
"""APIs for dealing with process groups, process models, and process instances."""
import json
from uuid import UUID
from typing import Any
from typing import Dict
from typing import Optional
@ -505,6 +506,7 @@ def process_instance_task_list_without_task_data_for_me(
process_instance_id: int,
all_tasks: bool = False,
spiff_step: int = 0,
most_recent_tasks_only: bool = False,
) -> flask.wrappers.Response:
"""Process_instance_task_list_without_task_data_for_me."""
process_instance = _find_process_instance_for_me_or_raise(process_instance_id)
@ -513,6 +515,7 @@ def process_instance_task_list_without_task_data_for_me(
process_instance,
all_tasks,
spiff_step,
most_recent_tasks_only,
)
@ -521,6 +524,7 @@ def process_instance_task_list_without_task_data(
process_instance_id: int,
all_tasks: bool = False,
spiff_step: int = 0,
most_recent_tasks_only: bool = False,
) -> flask.wrappers.Response:
"""Process_instance_task_list_without_task_data."""
process_instance = _find_process_instance_by_id_or_raise(process_instance_id)
@ -529,6 +533,7 @@ def process_instance_task_list_without_task_data(
process_instance,
all_tasks,
spiff_step,
most_recent_tasks_only,
)
@ -561,6 +566,8 @@ def process_instance_task_list(
subprocess_state_overrides = {}
for step_detail in step_details:
# if step_detail.bpmn_task_identifier == 'Activity_0iajzy6':
# print(f"step_detail: {step_detail}")
if step_detail.task_id in tasks:
tasks[step_detail.task_id]["state"] = Task.task_state_name_to_int(
step_detail.task_state
@ -583,20 +590,39 @@ def process_instance_task_list(
for spiff_task_id in tasks:
if spiff_task_id not in steps_by_id:
# if tasks[spiff_task_id]['task_spec'] == 'Activity_0iajzy6':
# print(f"tasks[spiff_task_id]: {tasks[spiff_task_id]}")
tasks[spiff_task_id]["data"] = {}
state_to_set = TaskState.FUTURE
if tasks[spiff_task_id]["state"] == TaskState.LIKELY:
# print("WE HERE")
previous_completed_steps_for_bpmn_task_identifier = [s for s in step_details if s.bpmn_task_identifier == tasks[spiff_task_id]['task_spec'] and s.task_state == "COMPLETED"]
# previous_completed_steps_for_bpmn_task_identifier = [s for s in step_details if s.task_state == "COMPLETED"]
# print(f"previous_completed_steps_for_bpmn_task_identifier: {previous_completed_steps_for_bpmn_task_identifier}")
if len(previous_completed_steps_for_bpmn_task_identifier) > 0:
state_to_set = TaskState.COMPLETED
tasks[spiff_task_id]["state"] = subprocess_state_overrides.get(
spiff_task_id, TaskState.FUTURE
spiff_task_id, state_to_set
)
bpmn_process_instance = ProcessInstanceProcessor._serializer.workflow_from_dict(
full_bpmn_process_dict
)
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
step_details[-1].bpmn_task_identifier, bpmn_process_instance
)
if spiff_task is not None and spiff_task.state != TaskState.READY:
last_step_detail_bpmn_task_identifier = step_details[-1].task_id
print(f"last_step_detail_bpmn_task_identifier: {last_step_detail_bpmn_task_identifier}")
uuid = UUID(last_step_detail_bpmn_task_identifier)
spiff_task = processor.bpmn_process_instance.get_task(uuid)
print(f"spiff_task: {spiff_task}")
# # workflow.complete_task_from_id(uuid)
# # spiff_task = processor.__class__.get_task_by_bpmn_identifier(
# # last_step_detail_bpmn_task_identifier, bpmn_process_instance
# # )
if spiff_task is not None: #and spiff_task.state != TaskState.READY:
print("HEY WE HERE")
print(f"spiff_task: {spiff_task}")
spiff_task.complete()
print(f"spiff_task2: {spiff_task}")
spiff_tasks = None
if all_tasks:
@ -619,6 +645,8 @@ def process_instance_task_list(
spiff_tasks_by_process_id_and_task_name: dict[str, SpiffTask] = {}
for spiff_task in spiff_tasks:
row_id = f"{spiff_task.task_spec._wf_spec.name}:{spiff_task.task_spec.name}"
# if spiff_task.task_spec.name == 'Activity_0iajzy6' or spiff_task.task_spec.name == 'Activity_0pv92j7':
# print(f"spiff_task: {spiff_task} - {spiff_task.id}")
if (
row_id not in spiff_tasks_by_process_id_and_task_name
or spiff_task.last_state_change

View File

@ -145,7 +145,7 @@ export default function ProcessInstanceShow({ variant }: OwnProps) {
path: `${apiPath}/${modifiedProcessModelId}/${params.process_instance_id}${queryParams}`,
successCallback: setProcessInstance,
});
let taskParams = '?all_tasks=true';
let taskParams = '?all_tasks=true&most_recent_tasks_only=true';
if (typeof params.spiff_step !== 'undefined') {
taskParams = `${taskParams}&spiff_step=${params.spiff_step}`;
}