summaryrefslogtreecommitdiff
path: root/cli/app/controllers/graph_controller.py
blob: fcca50a875e925809b290b470e06efecdb781b0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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_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/<graph_path>', 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/<graph_path>', methods=['GET'])
  def export(self, graph_path: str):
    export_site(opt_graph_path=graph_path)
    result = {
      'status': 'ok',
    }
    return jsonify(result)