summaryrefslogtreecommitdiff
path: root/cli/app/controllers/graph_controller.py
blob: 7efda73042a7b6027fbfb90fa1781b08e29ef462 (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
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

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 {model}.
    """
    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)