my-video-workflow/controller/api/danmaku_clip_blueprint.py

57 lines
2.0 KiB
Python

import os
from flask import Blueprint, jsonify, request
from model.DanmakuClip import DanmakuClip
from util.flask import not_found_json_response, error_json_response
from model import db
blueprint = Blueprint("api_danmaku_clip", __name__, url_prefix="/api/danmaku_clip")
@blueprint.get("/<int:danmaku_clip_id>")
def get_danmaku_clip_info(danmaku_clip_id):
danmaku_clip = DanmakuClip.query.get(danmaku_clip_id)
if danmaku_clip is None:
return not_found_json_response(id=danmaku_clip_id)
return jsonify(danmaku_clip.to_json())
@blueprint.put("/<int:danmaku_clip_id>")
def modify_danmaku_clip_info(danmaku_clip_id):
danmaku_clip = DanmakuClip.query.get(danmaku_clip_id)
if danmaku_clip is None:
return not_found_json_response(id=danmaku_clip_id)
payload = request.json
if "workflow_id" in payload:
try:
workflow_id = int(payload["workflow_id"])
danmaku_clip.workflow_id = workflow_id
except ValueError:
return error_json_response("workflow_id is not a int", workflow_id=payload["workflow_id"])
if "base_path" in payload:
if not os.path.isdir(payload["base_path"]):
return error_json_response("base_path is not a dir", base_path=payload["base_path"])
danmaku_clip.base_path = payload["base_path"]
if "file" in payload:
if os.path.isabs(payload["file"]):
danmaku_clip.base_path = ""
danmaku_clip.file = payload["file"]
# file exist check
if not os.path.isfile(danmaku_clip.full_path):
return error_json_response("file not exist", full_path=danmaku_clip.full_path)
db.session.commit()
return jsonify(danmaku_clip.to_json())
@blueprint.delete("/<int:danmaku_clip_id>")
def delete_video_clip(danmaku_clip_id):
danmaku_clip = DanmakuClip.query.get(danmaku_clip_id)
if danmaku_clip is not None:
db.session.delete(danmaku_clip)
db.session.commit()
return jsonify({
"id": danmaku_clip_id,
"old_data": danmaku_clip
})