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.

103 lines
3.0 KiB
Python

from flask import (Blueprint, redirect, render_template, request, url_for)
from exquisite_branch.db import get_db
from werkzeug.exceptions import abort
from werkzeug.utils import secure_filename
from shortuuid import uuid
bp = Blueprint('write', __name__, url_prefix='/write')
@bp.route('/<tree>/<parent>', methods=('GET', 'POST'))
def write(tree=None, parent=None):
db = get_db()
if request.method == 'POST':
content = request.form.get('content')
id = request.form.get('id')
username = request.form.get('username')
if request.is_json:
data = request.get_json()
content = data['content']
id = data['id']
username = data['username']
db.execute(
'INSERT INTO branches (content, parent, id, username, tree) VALUES (?, ?, ?, ?, ?)',
(content, parent, id, username, tree)
)
db.commit()
print(url_for('share.share', tree=tree, id=id))
return redirect(url_for('share.share', tree=tree, id=id))
id = uuid()
previous = db.execute(
"SELECT content, id, parent FROM branches"
" WHERE id = ? AND tree = ?",
(parent, tree)
).fetchone()
if previous is None:
abort(404, f"Previous with id {parent} doesn't exist")
return render_template('write.html', tree=tree, parent=parent, content=previous['content'], id=id)
@bp.route('/last', methods=('GET', 'POST'))
def last():
id = uuid()
db = get_db()
previous = db.execute(
'SELECT * FROM branches ORDER BY id DESC LIMIT 1'
).fetchone()
parent = previous['id']
tree = previous['tree']
if request.method == 'POST':
content = request.form['content']
id = request.form['id']
username = request.form['username']
db.execute(
'INSERT INTO branches (content, parent, id, username, tree) VALUES (?, ?, ?, ?, ?)',
(content, parent, id, username, tree)
)
db.commit()
return redirect(url_for('share.share', tree=tree, id=id))
return render_template('write.html', tree=tree, parent=parent, content=previous['content'], id=id)
@bp.route('/', methods=('GET', 'POST'))
def new():
db = get_db()
id = uuid()
parent = 'NEW'
if request.method == 'POST':
content = request.form['content']
id = request.form['id']
username = request.form['username']
tree_name = request.form['tree_name']
if tree_name == '':
return redirect(url_for('write.new'))
tree = secure_filename(tree_name)
db.execute(
'INSERT INTO trees (name, slug) VALUES (?, ?)',
(tree_name, tree)
)
db.execute(
'INSERT INTO branches (content, parent, id, username, tree) VALUES (?, ?, ?, ?, ?)',
(content, parent, id, username, tree)
)
db.commit()
return redirect(url_for('share.share', tree=tree, id=id))
return render_template('write.html', parent=parent, id=id)