diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-03-19 14:51:04 +0000 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-03-19 14:51:04 +0000 |
| commit | 20cc8eab24191902394316519f4889e55bdec1c6 (patch) | |
| tree | 60c408804444a265f0eaac34519e8f8c9537ff26 /app/admin/routes.py | |
| parent | Add instance directories (diff) | |
| download | AnnotateChange-20cc8eab24191902394316519f4889e55bdec1c6.tar.gz AnnotateChange-20cc8eab24191902394316519f4889e55bdec1c6.zip | |
Allow admin to add datasets
Diffstat (limited to 'app/admin/routes.py')
| -rw-r--r-- | app/admin/routes.py | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/app/admin/routes.py b/app/admin/routes.py index e667445..8d40665 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -1,11 +1,16 @@ # -*- coding: utf-8 -*- -from flask import render_template, flash, redirect, url_for +import os + +from flask import render_template, flash, redirect, url_for, current_app + +from werkzeug.utils import secure_filename from app import db from app.admin import bp +from app.admin.datasets import get_name_from_dataset, md5sum from app.admin.decorators import admin_required -from app.admin.forms import AdminAssignTaskForm +from app.admin.forms import AdminAssignTaskForm, AdminAddDatasetForm from app.models import User, Dataset, Task @@ -39,6 +44,42 @@ def assign(): "admin/assign.html", title="Assign Task", form=form, tasks=tasks ) + +@bp.route("/add", methods=("GET", "POST")) +@admin_required +def add_dataset(): + tmp_dir = os.path.join( + current_app.instance_path, current_app.config["TEMP_DIR"] + ) + dataset_dir = os.path.join( + current_app.instance_path, current_app.config["DATASET_DIR"] + ) + form = AdminAddDatasetForm() + if form.validate_on_submit(): + temp_filename = os.path.join( + tmp_dir, secure_filename(form.file_.data.filename) + ) + if not os.path.exists(temp_filename): + flash("Internal error: temporary dataset disappeared.") + return redirect(url_for("admin.add_dataset")) + name = get_name_from_dataset(temp_filename) + target_filename = os.path.join(dataset_dir, name + ".json") + if os.path.exists(target_filename): + flash("Internal error: file already exists!") + return redirect(url_for("admin.add_dataset")) + os.rename(temp_filename, target_filename) + if not os.path.exists(target_filename): + flash("Internal error: file moving failed") + return redirect(url_for("admin.add_dataset")) + + dataset = Dataset(name=name, md5sum=md5sum(target_filename)) + db.session.add(dataset) + db.session.commit() + flash("Dataset %r added successfully.", name) + return redirect(url_for("admin.add_dataset")) + return render_template("admin/add.html", title="Add Dataset", form=form) + + @bp.route("/", methods=("GET",)) @admin_required def index(): |
