Adds task counts

This commit is contained in:
Aaron Louie 2020-03-10 15:46:14 -04:00
parent e91d7aff2f
commit f1b6718068
3 changed files with 42 additions and 8 deletions

View File

@ -749,6 +749,12 @@ components:
type: string
is_latest_spec:
type: boolean
num_tasks_total:
type: integer
num_tasks_complete:
type: integer
num_tasks_incomplete:
type: integer
example:
id: 291234

View File

@ -61,7 +61,6 @@ def delete_workflow_specification(spec_id):
session.query(WorkflowModel).filter_by(workflow_spec_id=spec_id).delete()
session.query(WorkflowSpecModel).filter_by(id=spec_id).delete()
session.commit()
@ -94,6 +93,7 @@ def delete(workflow_id):
session.query(WorkflowModel).filter_by(id=workflow_id).delete()
session.commit()
def get_task(workflow_id, task_id):
workflow = session.query(WorkflowModel).filter_by(id=workflow_id).first()
return workflow.bpmn_workflow().get_task(task_id)
@ -111,5 +111,6 @@ def update_task(workflow_id, task_id, body):
workflow_model.bpmn_workflow_json = processor.serialize()
session.add(workflow_model)
session.commit()
return WorkflowApiSchema().dump(__get_workflow_api_model(processor)
)
return WorkflowApiSchema().dump(__get_workflow_api_model(processor))

View File

@ -108,17 +108,44 @@ class WorkflowApi(object):
class WorkflowApiSchema(ma.Schema):
class Meta:
model = WorkflowApi
fields = ["id", "status",
"user_tasks", "last_task", "next_task",
"workflow_spec_id",
"spec_version", "is_latest_spec"]
fields = ["id", "status", "user_tasks", "last_task", "next_task",
"workflow_spec_id", "spec_version", "is_latest_spec",
"num_tasks_total", "num_tasks_complete", "num_tasks_incomplete"]
unknown = INCLUDE
status = EnumField(WorkflowStatus)
user_tasks = marshmallow.fields.List(marshmallow.fields.Nested(TaskSchema, dump_only=True))
last_task = marshmallow.fields.Nested(TaskSchema, dump_only=True)
next_task = marshmallow.fields.Nested(TaskSchema, dump_only=True, required=False)
num_tasks_total = marshmallow.fields.Method('get_num_tasks_total')
num_tasks_complete = marshmallow.fields.Method('get_num_tasks_complete')
num_tasks_incomplete = marshmallow.fields.Method('get_num_tasks_incomplete')
@marshmallow.post_load
def make_workflow(self, data, **kwargs):
return WorkflowApi(**data)
keys = [
'id',
'status',
'user_tasks',
'last_task',
'next_task',
'workflow_spec_id',
'spec_version',
'is_latest_spec'
]
filtered_fields = {key: data[key] for key in keys}
return WorkflowApi(**filtered_fields)
def get_num_tasks_total(self, obj):
tasks = list(obj.user_tasks)
return len(tasks)
def get_num_tasks_complete(self, obj):
complete_states = ['CANCELLED', 'COMPLETED']
tasks = list(obj.user_tasks)
return sum(1 for t in tasks if t.state in complete_states)
def get_num_tasks_incomplete(self, obj):
incomplete_states = ['MAYBE', 'LIKELY', 'FUTURE', 'WAITING', 'READY']
tasks = list(obj.user_tasks)
return sum(1 for t in tasks if t.state in incomplete_states)