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

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