def manage_datasets()

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,
    )