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 d45b9d1ff5
commit 65aeca98bc
5 changed files with 50 additions and 10 deletions

View File

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

View File

@ -27,7 +27,7 @@ flask-marshmallow = "*"
flask-migrate = "*" flask-migrate = "*"
flask-restful = "*" flask-restful = "*"
werkzeug = "*" 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" } # SpiffWorkflow = {develop = true, path = "../SpiffWorkflow" }
sentry-sdk = "^1.10" sentry-sdk = "^1.10"
sphinx-autoapi = "^2.0" 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. description: If set will return the tasks as they were during a specific step of execution.
schema: schema:
type: integer 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: get:
tags: tags:
- Process Instances - Process Instances
@ -936,6 +942,12 @@ paths:
description: If set will return the tasks as they were during a specific step of execution. description: If set will return the tasks as they were during a specific step of execution.
schema: schema:
type: integer 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: get:
tags: tags:
- Process Instances - Process Instances

View File

@ -1,5 +1,6 @@
"""APIs for dealing with process groups, process models, and process instances.""" """APIs for dealing with process groups, process models, and process instances."""
import json import json
from uuid import UUID
from typing import Any from typing import Any
from typing import Dict from typing import Dict
from typing import Optional from typing import Optional
@ -505,6 +506,7 @@ def process_instance_task_list_without_task_data_for_me(
process_instance_id: int, process_instance_id: int,
all_tasks: bool = False, all_tasks: bool = False,
spiff_step: int = 0, spiff_step: int = 0,
most_recent_tasks_only: bool = False,
) -> flask.wrappers.Response: ) -> flask.wrappers.Response:
"""Process_instance_task_list_without_task_data_for_me.""" """Process_instance_task_list_without_task_data_for_me."""
process_instance = _find_process_instance_for_me_or_raise(process_instance_id) 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, process_instance,
all_tasks, all_tasks,
spiff_step, spiff_step,
most_recent_tasks_only,
) )
@ -521,6 +524,7 @@ def process_instance_task_list_without_task_data(
process_instance_id: int, process_instance_id: int,
all_tasks: bool = False, all_tasks: bool = False,
spiff_step: int = 0, spiff_step: int = 0,
most_recent_tasks_only: bool = False,
) -> flask.wrappers.Response: ) -> flask.wrappers.Response:
"""Process_instance_task_list_without_task_data.""" """Process_instance_task_list_without_task_data."""
process_instance = _find_process_instance_by_id_or_raise(process_instance_id) 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, process_instance,
all_tasks, all_tasks,
spiff_step, spiff_step,
most_recent_tasks_only,
) )
@ -561,6 +566,8 @@ def process_instance_task_list(
subprocess_state_overrides = {} subprocess_state_overrides = {}
for step_detail in step_details: 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: if step_detail.task_id in tasks:
tasks[step_detail.task_id]["state"] = Task.task_state_name_to_int( tasks[step_detail.task_id]["state"] = Task.task_state_name_to_int(
step_detail.task_state step_detail.task_state
@ -583,20 +590,39 @@ def process_instance_task_list(
for spiff_task_id in tasks: for spiff_task_id in tasks:
if spiff_task_id not in steps_by_id: 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"] = {} 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( 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( bpmn_process_instance = ProcessInstanceProcessor._serializer.workflow_from_dict(
full_bpmn_process_dict full_bpmn_process_dict
) )
spiff_task = processor.__class__.get_task_by_bpmn_identifier( last_step_detail_bpmn_task_identifier = step_details[-1].task_id
step_details[-1].bpmn_task_identifier, bpmn_process_instance print(f"last_step_detail_bpmn_task_identifier: {last_step_detail_bpmn_task_identifier}")
) uuid = UUID(last_step_detail_bpmn_task_identifier)
if spiff_task is not None and spiff_task.state != TaskState.READY: 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() spiff_task.complete()
print(f"spiff_task2: {spiff_task}")
spiff_tasks = None spiff_tasks = None
if all_tasks: if all_tasks:
@ -619,6 +645,8 @@ def process_instance_task_list(
spiff_tasks_by_process_id_and_task_name: dict[str, SpiffTask] = {} spiff_tasks_by_process_id_and_task_name: dict[str, SpiffTask] = {}
for spiff_task in spiff_tasks: for spiff_task in spiff_tasks:
row_id = f"{spiff_task.task_spec._wf_spec.name}:{spiff_task.task_spec.name}" 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 ( if (
row_id not in spiff_tasks_by_process_id_and_task_name row_id not in spiff_tasks_by_process_id_and_task_name
or spiff_task.last_state_change 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}`, path: `${apiPath}/${modifiedProcessModelId}/${params.process_instance_id}${queryParams}`,
successCallback: setProcessInstance, successCallback: setProcessInstance,
}); });
let taskParams = '?all_tasks=true'; let taskParams = '?all_tasks=true&most_recent_tasks_only=true';
if (typeof params.spiff_step !== 'undefined') { if (typeof params.spiff_step !== 'undefined') {
taskParams = `${taskParams}&spiff_step=${params.spiff_step}`; taskParams = `${taskParams}&spiff_step=${params.spiff_step}`;
} }