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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
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('/<int:page_id>/sort/', methods=['POST'])
def set_sort_order(self, page_id):
session = Session()
page = session.query(Page).get(page_id)
if not page:
session.close()
return jsonify({
'status': 'error',
'error': 'page not found'
})
for i, tile_id in enumerate(request.json):
tile = session.query(Tile).get(tile_id)
tile.sort_order = i
session.add(tile)
session.commit()
result = {
'status': 'ok',
# 'res': page.toFullJSON() if hasattr(page, 'toFullJSON') else page.toJSON(),
}
session.close()
return jsonify(result)
@route('/name/<graph_path>/<page_path>', 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)
|