From 3ee866595dd0fe4a87c29f06aeca14a059085fde Mon Sep 17 00:00:00 2001 From: jasquat Date: Mon, 13 Mar 2023 10:59:18 -0400 Subject: [PATCH] load tasks all at once when instantiating a process instance w/ burnettk --- .../src/spiffworkflow_backend/__init__.py | 1 + .../services/process_instance_processor.py | 33 ++++++++++++++++--- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py index 24020538..3266ae76 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py @@ -146,6 +146,7 @@ def create_app() -> flask.app.Flask: encryption_lib = app.config.get("SPIFFWORKFLOW_BACKEND_ENCRYPTION_LIB") if encryption_lib == "cryptography": from cryptography.fernet import Fernet + app_secret_key = app.config.get("SECRET_KEY") app_secret_key_bytes = app_secret_key.encode() base64_key = base64.b64encode(app_secret_key_bytes) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py index 3d7b1a20..dec1e993 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py @@ -605,7 +605,9 @@ class ProcessInstanceProcessor: ] = task_definition.properties_json @classmethod - def _get_bpmn_process_dict(cls, bpmn_process: BpmnProcessModel) -> dict: + def _get_bpmn_process_dict( + cls, bpmn_process: BpmnProcessModel, get_tasks: bool = False + ) -> dict: json_data = JsonDataModel.query.filter_by( hash=bpmn_process.json_data_hash ).first() @@ -645,17 +647,38 @@ class ProcessInstanceProcessor: bpmn_process = process_instance_model.bpmn_process if bpmn_process is not None: - bpmn_process_dict = cls._get_bpmn_process_dict(bpmn_process) - spiff_bpmn_process_dict.update(bpmn_process_dict) + single_bpmn_process_dict = cls._get_bpmn_process_dict( + bpmn_process, get_tasks=True + ) + spiff_bpmn_process_dict.update(single_bpmn_process_dict) bpmn_subprocesses = BpmnProcessModel.query.filter_by( parent_process_id=bpmn_process.id ).all() + bpmn_subprocess_ids = {} for bpmn_subprocess in bpmn_subprocesses: - bpmn_process_dict = cls._get_bpmn_process_dict(bpmn_subprocess) + bpmn_subprocess_ids[bpmn_subprocess.id] = bpmn_subprocess.guid + single_bpmn_process_dict = cls._get_bpmn_process_dict( + bpmn_subprocess + ) spiff_bpmn_process_dict["subprocesses"][ bpmn_subprocess.guid - ] = bpmn_process_dict + ] = single_bpmn_process_dict + + tasks = TaskModel.query.filter( + TaskModel.bpmn_process_id.in_(bpmn_subprocess_ids.keys()) # type: ignore + ).all() + for task in tasks: + bpmn_subprocess_guid = bpmn_subprocess_ids[task.bpmn_process_id] + json_data = JsonDataModel.query.filter_by( + hash=task.json_data_hash + ).first() + spiff_bpmn_process_dict["subprocesses"][bpmn_subprocess_guid][ + "tasks" + ][task.guid] = task.properties_json + spiff_bpmn_process_dict["subprocesses"][bpmn_subprocess_guid][ + "tasks" + ][task.guid]["data"] = json_data.data return spiff_bpmn_process_dict