from flask import request, jsonify, redirect from flask_classful import route from werkzeug.datastructures import MultiDict from app.sql.common import db, Session from app.sql.models.annotation import Annotation, AnnotationForm from app.controllers.crud_controller import CrudView class AnnotationView(CrudView): model = Annotation form = AnnotationForm default_sort = "start_ts" def on_create(self, session, form, item): if 'paragraph_id' in form: item.paragraph_id = form['paragraph_id'] if 'start_ts' in form: item.start_ts = form['start_ts'] if 'settings' in form: item.settings = form['settings'] def on_update(self, session, form, item): if 'paragraph_id' in form: item.paragraph_id = form['paragraph_id'] if 'start_ts' in form: item.start_ts = form['start_ts'] if 'settings' in form: item.settings = form['settings'] @route('/splice', methods=['POST']) def splice(self): """Add or remove time""" session = Session() try: start_ts = float(request.json['start_ts']) except: print("Annotation splice: start_ts is invalid") session.close() return { 'status': 'error', 'error': 'start_ts is invalid '} try: duration = float(request.json['duration']) except: print("Annotation splice: duration is invalid") session.close() return { 'status': 'error', 'error': 'duration is invalid '} query = session.query(self.model) query = query.filter(Annotation.start_ts > start_ts) items = query.all() print(f"{len(items)} annotations would be updated") print(f"start_ts: {start_ts}") print(f"duration: {duration}") for item in items: item.start_ts += duration session.add(item) session.commit() res = { 'status': 'ok', 'count': len(items), } session.close() return jsonify(res)