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, GraphForm from app.sql.models.page import Page from app.sql.models.tile import Tile from app.controllers.crud_controller import CrudView from app.site.export import export_site class GraphView(CrudView): model = Graph form = GraphForm def on_create(self, session, form, item): item.settings = form['settings'] def on_update(self, session, form, item): item.settings = form['settings'] def on_destroy(self, session, item): for item in item.pages: session.query(Tile).filter(Tile.page_id == item.id).delete(synchronize_session=False) session.query(Page).filter(Page.graph_id == item.id).delete(synchronize_session=False) @route('/name/', methods=['GET']) def get_name(self, graph_path: str): """ Fetch a single graph. """ session = Session() item = session.query(self.model).filter(self.model.path == graph_path).first() if not item: session.close() return jsonify({ 'status': 'error', 'error': 'item not found' }) result = { 'status': 'ok', 'res': item.toFullJSON() if hasattr(item, 'toFullJSON') else item.toJSON(), } session.close() return jsonify(result) @route('/export/', methods=['GET']) def export(self, graph_path: str): export_site(opt_graph_path=graph_path) result = { 'status': 'ok', } return jsonify(result)