You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.6 KiB
Python
64 lines
1.6 KiB
Python
from flask import (Blueprint, jsonify)
|
|
from exquisite_branch.db import get_db
|
|
|
|
bp = Blueprint('api', __name__, url_prefix='/api/v1')
|
|
|
|
|
|
def makeTree(entries):
|
|
if len(entries) > 1:
|
|
last = entries.pop()
|
|
if last['parent'] != 'NEWS':
|
|
parent_index = next(
|
|
(index for (index, entry) in enumerate(entries) if entry['id'] == last['parent']),
|
|
None)
|
|
entries[parent_index].setdefault('branches', []).append(last)
|
|
makeTree(entries)
|
|
return entries
|
|
|
|
|
|
@bp.route('/trees/')
|
|
def list():
|
|
db = get_db()
|
|
trees = db.execute('SELECT * FROM trees').fetchall()
|
|
t = []
|
|
for tree in trees:
|
|
t.append(tree['slug'])
|
|
response = jsonify(t)
|
|
response.headers.add("Access-Control-Allow-Origin", "*")
|
|
return response
|
|
|
|
|
|
@bp.route('tree/<tree>/')
|
|
def tree(tree=None):
|
|
db = get_db()
|
|
|
|
tree_info = db.execute('SELECT * FROM trees WHERE slug = ?', (tree,)).fetchone()
|
|
entries = db.execute(
|
|
"SELECT content, id, parent, username FROM branches WHERE tree = ?",
|
|
(tree,)
|
|
).fetchall()
|
|
|
|
r = {
|
|
"id": tree_info['id'],
|
|
"slug": tree_info['slug'],
|
|
"name": tree_info['name'],
|
|
}
|
|
|
|
# convert sqlite entries to list of normal dict
|
|
branches = []
|
|
for entry in entries:
|
|
branches.append({**entry})
|
|
|
|
# make tree:
|
|
# while list is not empty
|
|
# start from the last one
|
|
# insert it in its parent if not NEW
|
|
# remove it from the list
|
|
|
|
r['branches'] = makeTree(branches)
|
|
response = jsonify(r)
|
|
response.headers.add("Access-Control-Allow-Origin", "*")
|
|
|
|
return response
|
|
|