We now only return the ready user tasks, not all tasks, and even then the ready user tasks don't come back with the forms and details, just the bare minimum. Speeds things up considerably, and most of this information wasn't used anyway.

This commit is contained in:
Dan Funk 2020-05-14 17:13:47 -04:00
parent 6d4348d644
commit b63ee8159e
4 changed files with 14 additions and 24 deletions

View File

@ -84,8 +84,8 @@ def delete_workflow_specification(spec_id):
def __get_workflow_api_model(processor: WorkflowProcessor):
spiff_tasks = processor.get_all_user_tasks()
user_tasks = [WorkflowService.spiff_task_to_api_task(t, add_docs_and_forms=True) for t in spiff_tasks]
spiff_tasks = processor.get_ready_user_tasks()
user_tasks = [WorkflowService.spiff_task_to_api_task(t, add_docs_and_forms=False) for t in spiff_tasks]
workflow_api = WorkflowApi(
id=processor.get_workflow_id(),
status=processor.get_status(),

View File

@ -118,8 +118,14 @@ class WorkflowService(object):
for field in task.form.fields:
WorkflowService.process_options(spiff_task, field)
task.documentation = WorkflowService._process_documentation(spiff_task)
# All ready tasks should have a valid name, and this can be computed for
# some tasks, particularly multi-instance tasks that all have the same spec
# but need different labels.
if spiff_task.state == SpiffTask.READY:
task.props = WorkflowService._process_properties(spiff_task, props)
return task
@staticmethod

View File

@ -1,16 +1,11 @@
import datetime
import glob
import glob
import os
import xml.etree.ElementTree as ElementTree
from crc import app, db, session
from crc.models.file import FileType, FileModel, FileDataModel, CONTENT_TYPES
from crc.models.study import StudyModel
from crc.models.user import UserModel
from crc.models.file import CONTENT_TYPES
from crc.models.workflow import WorkflowSpecModel, WorkflowSpecCategoryModel
from crc.services.file_service import FileService
from crc.services.workflow_processor import WorkflowProcessor
from crc.models.protocol_builder import ProtocolBuilderStatus
class ExampleDataLoader:
@ -19,7 +14,7 @@ class ExampleDataLoader:
session.flush() # Clear out any transactions before deleting it all to avoid spurious errors.
for table in reversed(db.metadata.sorted_tables):
session.execute(table.delete())
session.flush()
session.flush()
def load_all(self):

View File

@ -101,7 +101,7 @@ class TestTasksApi(BaseTest):
# get the first form in the two form workflow.
workflow_api = self.get_workflow_api(workflow)
self.assertEqual('two_forms', workflow_api.workflow_spec_id)
self.assertEqual(2, len(workflow_api.user_tasks))
self.assertEqual(1, len(workflow_api.user_tasks))
self.assertIsNotNone(workflow_api.next_task['form'])
self.assertEqual("UserTask", workflow_api.next_task['type'])
self.assertEqual("StepOne", workflow_api.next_task['name'])
@ -334,7 +334,7 @@ class TestTasksApi(BaseTest):
workflow = self.create_workflow('subprocess')
tasks = self.get_workflow_api(workflow).user_tasks
self.assertEquals(2, len(tasks))
self.assertEquals(1, len(tasks))
self.assertEquals("UserTask", tasks[0].type)
self.assertEquals("Activity_A", tasks[0].name)
self.assertEquals("My Sub Process", tasks[0].process_name)
@ -412,19 +412,8 @@ class TestTasksApi(BaseTest):
for i in random.sample(range(9), 9):
self.complete_form(workflow, tasks[i], {"investigator":{"email": "dhf8r@virginia.edu"}})
tasks = self.get_workflow_api(workflow).user_tasks
#tasks = self.get_workflow_api(workflow).user_tasks
workflow = self.get_workflow_api(workflow)
self.assertEquals(WorkflowStatus.complete, workflow.status)
# def test_parent_task_set_on_tasks(self):
# self.load_example_data()
# workflow = self.create_workflow('exclusive_gateway')
#
# # Start the workflow.
# workflow = self.get_workflow_api(workflow)
# self.assertEquals(None, workflow.previous_task)
# self.complete_form(workflow, workflow.next_task, {"has_bananas": True})
# workflow = self.get_workflow_api(workflow)
# self.assertEquals('Task_Num_Bananas', workflow.next_task['name'])
# self.assertEquals('has_bananas', workflow.previous_task['name'])