diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-03-27 15:03:33 +0000 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-03-27 15:03:33 +0000 |
| commit | 750220190948c8698a7a81c90e03dae0af410a1a (patch) | |
| tree | 1fd813dcd101dad486b1e4309fdaf6165deec97c | |
| parent | Validate name of dataset (diff) | |
| download | AnnotateChange-750220190948c8698a7a81c90e03dae0af410a1a.tar.gz AnnotateChange-750220190948c8698a7a81c90e03dae0af410a1a.zip | |
Add ability for admin to delete datasets
| -rw-r--r-- | app/admin/forms.py | 5 | ||||
| -rw-r--r-- | app/admin/routes.py | 29 | ||||
| -rw-r--r-- | app/templates/admin/manage_datasets.html | 40 |
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 %} |
