in data_annotation_platform/app/admin/routes.py [0:0]
def manage_datasets():
dataset_list = [(d.id, d.name) for d in Dataset.query.all()]
dataset_list.sort(key=lambda x: x[1])
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"))
dataset_dir = os.path.join(
current_app.instance_path, current_app.config["DATASET_DIR"]
)
filename = os.path.join(dataset_dir, dataset.name + ".json")
if not os.path.exists(filename):
flash("Internal error: dataset file doesn't exist!", "error")
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()
if os.path.exists(filename):
os.unlink(filename)
flash("Dataset deleted successfully.", "success")
return redirect(url_for("admin.manage_datasets"))
overview = []
for dataset in Dataset.query.all():
tasks = Task.query.filter_by(dataset_id=dataset.id).all()
n_complete = len([t for t in tasks if t.done])
desired = current_app.config["TASKS_NUM_PER_DATASET"]
if len(tasks) == 0:
perc = float("nan")
else:
perc = n_complete / desired * 100
entry = {
"id": dataset.id,
"name": dataset.name,
"demo": dataset.is_demo,
"assigned": len(tasks),
"completed": n_complete,
"percentage": perc,
}
overview.append(entry)
overview.sort(key=lambda x: x["name"])
return render_template(
"admin/manage_datasets.html",
title="Manage Datasets",
overview=overview,
form=form,
)