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('//', 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)