mirror of
https://github.com/sartography/spiffworkflow-backend.git
synced 2025-02-24 05:18:22 +00:00
fixed calling subprocesses with forms w/ burnettk
This commit is contained in:
parent
32ed8790ce
commit
036055dc59
@ -27,7 +27,6 @@ from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||
)
|
||||
from spiffworkflow_backend.models.active_task import ActiveTaskModel
|
||||
from spiffworkflow_backend.models.file import FileSchema
|
||||
from spiffworkflow_backend.models.file import FileType
|
||||
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
|
||||
from spiffworkflow_backend.models.message_model import MessageModel
|
||||
from spiffworkflow_backend.models.message_triggerable_process_model import (
|
||||
@ -279,7 +278,7 @@ def process_model_file_delete(
|
||||
|
||||
def add_file(process_group_id: str, process_model_id: str) -> flask.wrappers.Response:
|
||||
"""Add_file."""
|
||||
process_model_service = ProcessModelService()
|
||||
ProcessModelService()
|
||||
process_model = get_process_model(process_model_id, process_group_id)
|
||||
request_file = get_file_from_request()
|
||||
if not request_file.filename:
|
||||
@ -331,6 +330,7 @@ def process_instance_run(
|
||||
try:
|
||||
processor.do_engine_steps()
|
||||
except ApiError as e:
|
||||
ErrorHandlingService().handle_error(processor, e)
|
||||
raise e
|
||||
except Exception as e:
|
||||
ErrorHandlingService().handle_error(processor, e)
|
||||
@ -775,7 +775,10 @@ def task_show(process_instance_id: int, task_id: str) -> flask.wrappers.Response
|
||||
task.process_model_display_name = process_model.display_name
|
||||
|
||||
process_model_with_form = process_model
|
||||
if task.process_name != process_model.primary_process_id:
|
||||
all_processes = SpecFileService.get_all_bpmn_process_identifiers_for_process_model(
|
||||
process_model
|
||||
)
|
||||
if task.process_name not in all_processes:
|
||||
bpmn_file_full_path = (
|
||||
ProcessInstanceProcessor.bpmn_file_full_path_from_bpmn_process_identifier(
|
||||
task.process_name
|
||||
|
@ -72,7 +72,9 @@ from spiffworkflow_backend.services.process_model_service import ProcessModelSer
|
||||
from spiffworkflow_backend.services.spec_file_service import SpecFileService
|
||||
from spiffworkflow_backend.services.user_service import UserService
|
||||
|
||||
# from crc.services.user_file_service import UserFileService
|
||||
|
||||
class ProcessInstanceProcessorError(Exception):
|
||||
"""ProcessInstanceProcessorError."""
|
||||
|
||||
|
||||
class CustomBpmnScriptEngine(PythonScriptEngine): # type: ignore
|
||||
@ -98,8 +100,7 @@ class CustomBpmnScriptEngine(PythonScriptEngine): # type: ignore
|
||||
return super()._evaluate(expression, context)
|
||||
except Exception as exception:
|
||||
if task is None:
|
||||
raise ApiError(
|
||||
"error_evaluating_expression",
|
||||
raise ProcessInstanceProcessorError(
|
||||
"Error evaluating expression: "
|
||||
"'%s', exception: %s" % (expression, str(exception)),
|
||||
) from exception
|
||||
|
@ -239,6 +239,54 @@ class SpecFileService(FileSystemService):
|
||||
retval = True
|
||||
return retval
|
||||
|
||||
@staticmethod
|
||||
def append_identifier_of_process_to_array(
|
||||
process_element: _Element, process_identifiers: list[str]
|
||||
) -> None:
|
||||
"""Append_identifier_of_process_to_array."""
|
||||
process_id_key = "id"
|
||||
if "name" in process_element.attrib:
|
||||
process_id_key = "name"
|
||||
|
||||
process_identifiers.append(process_element.attrib[process_id_key])
|
||||
|
||||
@staticmethod
|
||||
def get_all_bpmn_process_identifiers_for_process_model(
|
||||
process_model_info: ProcessModelInfo,
|
||||
) -> list[str]:
|
||||
"""Get_all_bpmn_process_identifiers_for_process_model."""
|
||||
if process_model_info.primary_file_name is None:
|
||||
return []
|
||||
|
||||
binary_data = SpecFileService.get_data(
|
||||
process_model_info, process_model_info.primary_file_name
|
||||
)
|
||||
|
||||
et_root: EtreeElement = SpecFileService.get_etree_element_from_binary_data(
|
||||
binary_data, process_model_info.primary_file_name
|
||||
)
|
||||
process_identifiers: list[str] = []
|
||||
for child in et_root:
|
||||
if child.tag.endswith("process") and child.attrib.get(
|
||||
"isExecutable", False
|
||||
):
|
||||
subprocesses = child.xpath(
|
||||
"//bpmn:subProcess",
|
||||
namespaces={"bpmn": "http://www.omg.org/spec/BPMN/20100524/MODEL"},
|
||||
)
|
||||
for subprocess in subprocesses:
|
||||
SpecFileService.append_identifier_of_process_to_array(
|
||||
subprocess, process_identifiers
|
||||
)
|
||||
|
||||
SpecFileService.append_identifier_of_process_to_array(
|
||||
child, process_identifiers
|
||||
)
|
||||
|
||||
if len(process_identifiers) == 0:
|
||||
raise ValidationException("No executable process tag found")
|
||||
return process_identifiers
|
||||
|
||||
@staticmethod
|
||||
def get_executable_process_elements(et_root: _Element) -> list[_Element]:
|
||||
"""Get_executable_process_elements."""
|
||||
|
@ -1227,16 +1227,11 @@ class TestProcessApi(BaseTest):
|
||||
assert response.status_code == 400
|
||||
|
||||
api_error = json.loads(response.get_data(as_text=True))
|
||||
assert api_error["code"] == "unknown_exception"
|
||||
assert "An unknown error occurred." in api_error["message"]
|
||||
assert api_error["code"] == "task_error"
|
||||
assert (
|
||||
'Original error: ApiError: Activity_CauseError: TypeError:can only concatenate str (not "int") to str.'
|
||||
'Activity_CauseError: TypeError:can only concatenate str (not "int") to str'
|
||||
in api_error["message"]
|
||||
)
|
||||
assert (
|
||||
"Error in task 'Cause Error' (Activity_CauseError)." in api_error["message"]
|
||||
)
|
||||
assert "Error is on line 1. In file error.bpmn." in api_error["message"]
|
||||
|
||||
process = (
|
||||
db.session.query(ProcessInstanceModel)
|
||||
|
Loading…
x
Reference in New Issue
Block a user