mirror of
https://github.com/sartography/spiffworkflow-backend.git
synced 2025-02-23 12:58:13 +00:00
added method to get data for a process instance in its current state w/ burnettk cullerton
This commit is contained in:
parent
01938b88f5
commit
376912f3a2
@ -78,6 +78,10 @@ def setup_process_instances_for_reports() -> list[ProcessInstanceModel]:
|
||||
)
|
||||
processor = ProcessInstanceProcessor(process_instance)
|
||||
processor.slam_in_data(data)
|
||||
process_instance.status = "complete"
|
||||
db.session.add(process_instance)
|
||||
db.session.commit()
|
||||
|
||||
process_instances.append(process_instance)
|
||||
|
||||
return process_instances
|
||||
|
@ -14,8 +14,9 @@ from marshmallow_enum import EnumField # type: ignore
|
||||
from SpiffWorkflow.navigation import NavItem # type: ignore
|
||||
from SpiffWorkflow.util.deep_merge import DeepMerge # type: ignore
|
||||
from sqlalchemy import ForeignKey
|
||||
from sqlalchemy.orm import deferred, validates
|
||||
from sqlalchemy.orm import deferred
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm import validates
|
||||
|
||||
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
|
||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||
|
@ -303,7 +303,7 @@ class ProcessInstanceReportModel(SpiffworkflowBaseDBModel):
|
||||
def to_serialized(process_instance: ProcessInstanceModel) -> dict:
|
||||
"""To_serialized."""
|
||||
processor = ProcessInstanceProcessor(process_instance)
|
||||
process_instance.data = processor.get_data()
|
||||
process_instance.data = processor.get_current_data()
|
||||
return process_instance.serialized_flat
|
||||
|
||||
process_instance_dicts = map(to_serialized, process_instances)
|
||||
|
@ -745,6 +745,27 @@ class ProcessInstanceProcessor:
|
||||
"""Get_data."""
|
||||
return self.bpmn_process_instance.data # type: ignore
|
||||
|
||||
def get_current_data(self) -> dict[str, Any]:
|
||||
"""Get the current data for the process.
|
||||
|
||||
Return either most recent task data or the process data
|
||||
if the process instance is complete
|
||||
"""
|
||||
if self.process_instance_model.status == "complete":
|
||||
return self.get_data()
|
||||
|
||||
most_recent_task = None
|
||||
for task in self.get_all_ready_or_waiting_tasks():
|
||||
if most_recent_task is None:
|
||||
most_recent_task = task
|
||||
elif most_recent_task.last_state_change < task.last_state_change: # type: ignore
|
||||
most_recent_task = task
|
||||
|
||||
if most_recent_task:
|
||||
return most_recent_task.data # type: ignore
|
||||
|
||||
return {}
|
||||
|
||||
def get_process_instance_id(self) -> int:
|
||||
"""Get_process_instance_id."""
|
||||
return self.process_instance_model.id
|
||||
@ -836,9 +857,10 @@ class ProcessInstanceProcessor:
|
||||
f"Unable to find a task in the process_instance called '{spec_name}'",
|
||||
)
|
||||
|
||||
def terminate(self) -> bool:
|
||||
def terminate(self) -> None:
|
||||
"""Terminate."""
|
||||
self.bpmn_process_instance.cancel()
|
||||
self.save()
|
||||
self.process_instance_model.status = 'terminated'
|
||||
self.process_instance_model.status = "terminated"
|
||||
db.session.add(self.process_instance_model)
|
||||
db.session.commit()
|
||||
|
@ -724,7 +724,7 @@ class TestProcessApi(BaseTest):
|
||||
id=process_instance_id
|
||||
).first()
|
||||
assert process_instance
|
||||
assert process_instance.status == 'terminated'
|
||||
assert process_instance.status == "terminated"
|
||||
|
||||
def test_process_instance_delete(
|
||||
self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
@ -1056,7 +1056,7 @@ class TestProcessApi(BaseTest):
|
||||
)
|
||||
assert type(process_instance_dict["start_in_seconds"]) is int
|
||||
assert process_instance_dict["start_in_seconds"] > 0
|
||||
assert process_instance_dict["status"] == "waiting"
|
||||
assert process_instance_dict["status"] == "complete"
|
||||
|
||||
def test_process_instance_report_show_with_dynamic_filter_and_query_param(
|
||||
self,
|
||||
|
@ -117,7 +117,7 @@ def test_generate_report_with_columns(
|
||||
}
|
||||
results = do_report_with_metadata_and_instances(report_metadata, process_instances)
|
||||
assert len(results) == 1
|
||||
assert results == [{"name": "ray", "status": "waiting"}]
|
||||
assert results == [{"name": "ray", "status": "complete"}]
|
||||
|
||||
|
||||
def do_report_with_metadata_and_instances(
|
||||
|
Loading…
x
Reference in New Issue
Block a user