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.graph import Graph from app.sql.models.page import Page, PageForm from app.sql.models.tile import Tile from app.controllers.crud_controller import CrudView class PageView(CrudView): model = Page form = PageForm def where(self, query, args): graph_id = args.get('graph_id', default=None) if graph_id is not None: query = query.filter(Page.graph_id == int(graph_id)) return query def on_create(self, session, form, item): item.settings = form['settings'] item.graph_id = int(form['graph_id']) def on_update(self, session, form, item): item.settings = form['settings'] def on_destroy(self, session, item): session.query(Tile).filter(Tile.page_id == item.id).delete(synchronize_session=False) @route('/sort/', methods=['POST']) def set_sort_order(self, page_id): page = session.query(Page).get(page_id) if not page: session.close() return jsonify({ 'status': 'error', 'error': 'page not found' }) print(request.json) result = { 'status': 'ok', # 'res': page.toFullJSON() if hasattr(page, 'toFullJSON') else page.toJSON(), } session.close() return jsonify(result) @route('/name//', methods=['GET']) def get_name(self, graph_path: str, page_path: str): """ Fetch a single {model}. """ session = Session() graph = session.query(Graph).filter(Graph.path == graph_path).first() if not graph: session.close() return jsonify({ 'status': 'error', 'error': 'graph not found' }) page = session.query(Page).filter(Page.graph_id == graph.id, Page.path == page_path).first() if not page: session.close() return jsonify({ 'status': 'error', 'error': 'page not found' }) result = { 'status': 'ok', 'res': page.toFullJSON() if hasattr(page, 'toFullJSON') else page.toJSON(), } session.close() return jsonify(result)