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'] def splice(self): """Add or remove time""" session = Session() try: start_ts = float(args.get('start_ts')) except: print("Annotation splice: duration is invalid") session.close() return try: duration = float(args.get('duration')) except: print("Annotation splice: duration is invalid") session.close() return query = session.query(self.model) query = query.filter(Annotation.start_ts > form['start_ts']) items = query.all() print(f"{len(items)} annotations would be updated") for item in items: item.start_ts += duration # session.add(item) # session.commit() res = { 'status': 'ok', 'items': len(items), } session.close() return jsonify(res)