import threading from flask import Blueprint, jsonify from model import db from model.Workflow import Workflow from util.flask import not_found_json_response from workflow.worker import do_workflow blueprint = Blueprint("api_workflow", __name__, url_prefix="/api/workflow") @blueprint.get("/") def get_workflow_list(): workflows = Workflow.query.all() return jsonify([d.to_dict() for d in workflows]) @blueprint.get("/") def get_workflow_info(workflow_id): workflow = Workflow.query.get(workflow_id) if workflow is None: return not_found_json_response(id=workflow_id) return jsonify(workflow.to_dict()) @blueprint.put("/") def modify_workflow_info(workflow_id): workflow = Workflow.query.get(workflow_id) if workflow is None: return not_found_json_response(id=workflow_id) return jsonify(workflow) @blueprint.delete("/") def delete_workflow(workflow_id): workflow = Workflow.query.get(workflow_id) if workflow is not None: db.session.delete(workflow) db.session.commit() return jsonify({ "id": workflow_id, "old_data": workflow.to_json() if workflow is not None else {} }) @blueprint.post("//edit") def start_editing(workflow_id): workflow = Workflow.query.get(workflow_id) if workflow is None: return not_found_json_response(id=workflow_id) workflow.editing = True db.session.commit() return jsonify(workflow.to_dict()) @blueprint.delete("//edit") def done_editing(workflow_id): workflow = Workflow.query.get(workflow_id) if workflow is None: return not_found_json_response(id=workflow_id) workflow.editing = False db.session.commit() return jsonify(workflow.to_dict()) @blueprint.post("//do") def start_workflow(workflow_id): workflow = Workflow.query.get(workflow_id) if workflow is None: return not_found_json_response(id=workflow_id) if len(workflow.video_clips) > 0: for video_clip in workflow.video_clips: if len(video_clip.danmaku_clips) > 0: threading.Thread(target=do_workflow, args=( video_clip.full_path, video_clip.danmaku_clips[0].full_path, *[clip.full_path for clip in video_clip.danmaku_clips[1:]] )).start() return jsonify(workflow.to_dict())