aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2019-03-27 15:03:33 +0000
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2019-03-27 15:03:33 +0000
commit750220190948c8698a7a81c90e03dae0af410a1a (patch)
tree1fd813dcd101dad486b1e4309fdaf6165deec97c
parentValidate name of dataset (diff)
downloadAnnotateChange-750220190948c8698a7a81c90e03dae0af410a1a.tar.gz
AnnotateChange-750220190948c8698a7a81c90e03dae0af410a1a.zip
Add ability for admin to delete datasets
-rw-r--r--app/admin/forms.py5
-rw-r--r--app/admin/routes.py29
-rw-r--r--app/templates/admin/manage_datasets.html40
3 files changed, 72 insertions, 2 deletions
diff --git a/app/admin/forms.py b/app/admin/forms.py
index 0c35933..30070d2 100644
--- a/app/admin/forms.py
+++ b/app/admin/forms.py
@@ -52,3 +52,8 @@ class AdminAddDatasetForm(FlaskForm):
raise ValidationError(
"A dataset with the name '%s' already exists." % name
)
+
+
+class AdminManageDatasetsForm(FlaskForm):
+ dataset = SelectField("Dataset", coerce=int, validators=[InputRequired()])
+ delete = SubmitField("Delete")
diff --git a/app/admin/routes.py b/app/admin/routes.py
index bec6cd3..f8d72d2 100644
--- a/app/admin/routes.py
+++ b/app/admin/routes.py
@@ -10,7 +10,11 @@ from app import db
from app.admin import bp
from app.admin.datasets import get_name_from_dataset, md5sum
from app.decorators import admin_required
-from app.admin.forms import AdminManageTaskForm, AdminAddDatasetForm
+from app.admin.forms import (
+ AdminManageTaskForm,
+ AdminAddDatasetForm,
+ AdminManageDatasetsForm,
+)
from app.models import User, Dataset, Task, Annotation
@@ -85,9 +89,29 @@ def manage_users():
)
-@bp.route("/manage/datasets", methods=("GET",))
+@bp.route("/manage/datasets", methods=("GET", "POST"))
@admin_required
def manage_datasets():
+ dataset_list = [(d.id, d.name) for d in Dataset.query.all()]
+
+ form = AdminManageDatasetsForm()
+ form.dataset.choices = dataset_list
+
+ if form.validate_on_submit():
+ dataset = Dataset.query.filter_by(id=form.dataset.data).first()
+ if dataset is None:
+ flash("Dataset doesn't exist.", "error")
+ return redirect(url_for("admin.manage_datasets"))
+
+ tasks = Task.query.filter_by(dataset_id=dataset.id).all()
+ for task in tasks:
+ for ann in Annotation.query.filter_by(task_id=task.id).all():
+ db.session.delete(ann)
+ db.session.delete(task)
+ db.session.delete(dataset)
+ db.session.commit()
+ flash("Dataset deleted successfully.", "success")
+
overview = []
for dataset in Dataset.query.all():
tasks = Task.query.filter_by(dataset_id=dataset.id).all()
@@ -105,6 +129,7 @@ def manage_datasets():
"admin/manage_datasets.html",
title="Manage Datasets",
overview=overview,
+ form=form,
)
diff --git a/app/templates/admin/manage_datasets.html b/app/templates/admin/manage_datasets.html
index 20d6d9e..f14fe81 100644
--- a/app/templates/admin/manage_datasets.html
+++ b/app/templates/admin/manage_datasets.html
@@ -2,6 +2,39 @@
{% block app_content %}
<h1>Manage Datasets</h1>
+
+<div class="col-lg-3">
+ <div class="row">
+ <form class="form" action="" method="POST">
+ {{ form.hidden_tag() }}
+ {{ form.dataset }}
+ {{ form.delete(hidden='true', id='form-submit') }}
+ <!-- Button trigger modal -->
+ <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteModal">
+ Delete
+ </button>
+ </form>
+ </div>
+</div>
+
+<!-- Modal -->
+<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
+ <div class="modal-dialog modal-dialog-centered" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title" id="deleteModalLabel">Delete Dataset</h5>
+ </div>
+ <div class="modal-body">
+ You are about to delete the dataset <span id="dataset-name"></span> <b>and</b> all associated tasks and annotations. Are you sure?
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-success success" id="modal-confirm">Confirm</button>
+ </div>
+ </div>
+ </div>
+</div>
+
<br>
<h1>Task Completion Overview</h1>
<article class="overview">
@@ -25,4 +58,11 @@
</tr>
</table>
</article>
+
+<script>
+var conf = document.getElementById("modal-confirm");
+conf.onclick = function() {
+ document.getElementById("form-submit").click();
+};
+</script>
{% endblock %}