cr-connect-workflow/crc/api/workflow.py

57 lines
1.8 KiB
Python
Raw Normal View History

import uuid
from crc import session
from crc.models.workflow import WorkflowModel, WorkflowModelSchema, WorkflowSpecModelSchema, WorkflowSpecModel, \
Task, TaskSchema
from crc.workflow_processor import WorkflowProcessor
def all_specifications():
schema = WorkflowSpecModelSchema(many=True)
return schema.dump(session.query(WorkflowSpecModel).all())
def add_workflow_specification(body):
workflow_spec = WorkflowSpecModelSchema().load(body, session=session)
session.add(workflow_spec)
session.commit()
return WorkflowSpecModelSchema().dump(workflow_spec)
def get_workflow(workflow_id):
schema = WorkflowModelSchema()
workflow = session.query(WorkflowModel).filter_by(id=workflow_id).first()
return schema.dump(workflow)
2019-12-30 18:15:39 +00:00
def delete(workflow_id):
session.query(WorkflowModel).filter_by(id=workflow_id).delete()
session.commit()
def get_tasks(workflow_id):
workflow = session.query(WorkflowModel).filter_by(id=workflow_id).first()
processor = WorkflowProcessor(workflow.workflow_spec_id, workflow.bpmn_workflow_json)
spiff_tasks = processor.get_ready_user_tasks()
tasks = []
for st in spiff_tasks:
tasks.append(Task.from_spiff(st))
return TaskSchema(many=True).dump(tasks)
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)
def update_task(workflow_id, task_id, body):
workflow = session.query(WorkflowModel).filter_by(id=workflow_id).first()
2020-01-07 18:23:46 +00:00
processor = WorkflowProcessor(workflow.workflow_spec_id, workflow.bpmn_workflow_json)
task_id = uuid.UUID(task_id)
task = processor.bpmn_workflow.get_task(task_id)
task.data = body
processor.complete_task(task)
workflow.bpmn_workflow_json = processor.serialize()
session.add(workflow)
session.commit()