import os from pathlib import Path from flask import Flask, redirect, render_template, url_for from flask_wtf import FlaskForm from flask_wtf.csrf import CSRFProtect from flask_wtf.file import FileAllowed, FileField, FileRequired from temp_index import make_cards from werkzeug.utils import secure_filename from wtforms import RadioField, StringField from wtforms.validators import DataRequired app = Flask(__name__) app.config["SECRET_KEY"] = "foo" app.config["WTF_CSRF_SECRET_KEY"] = "bar" CWD = Path().resolve() class UploadForm(FlaskForm): metadata = FileField( "Metadata file", validators=[FileAllowed(["db"], "Metadata databases only"), FileRequired()], ) title = RadioField("title", choices=[("side a", "side a"), ("side b", "side b")]) author = RadioField("author", choices=[("side a", "side a"), ("side b", "side b")]) tags = RadioField("tags", choices=[("side a", "side a"), ("side b", "side b")]) comments = RadioField( "comments", choices=[("side a", "side a"), ("side b", "side b")] ) timestamp = RadioField( "timestamp", choices=[("side a", "side a"), ("side b", "side b")] ) @app.route("/") def home(): upload_form = UploadForm() return render_template("index.html", upload_form=upload_form) @app.route("/upload", methods=["POST"]) def upload(): upload_form = UploadForm() if upload_form.validate_on_submit(): f = upload_form.metadata.data filename = secure_filename(f.filename) metadata_fpath = os.path.join(CWD, "metadatum", filename) f.save(metadata_fpath) # FIXME: fix naming of files pdf = os.path.join(CWD, "static", "generated", "{}.pdf".format(filename)) metadata = "sqlite:///{}".format(os.path.join(CWD, "metadatum", filename)) # FIXME: remove hardcoding, feed fields in make_cards( pdf, metadata, ["title", "timestamp", "comments", "authors"], ["tags"] ) pdf_url = url_for("static", filename="generated/{}.pdf".format(filename)) return render_template("index.html", upload_form=upload_form, pdf=pdf_url) return render_template("index.html", upload_form=upload_form)