diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-05-14 17:15:20 -0400 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2019-05-14 17:15:20 -0400 |
| commit | 62af4cf1e56a27db3d4a1dc33a759c83790a963e (patch) | |
| tree | 56a4b5919e86faf84223e51055cdab45a62229b4 /app/admin | |
| parent | resource bugfix for firefox (diff) | |
| download | AnnotateChange-62af4cf1e56a27db3d4a1dc33a759c83790a963e.tar.gz AnnotateChange-62af4cf1e56a27db3d4a1dc33a759c83790a963e.zip | |
Add support for viewing annotations
Diffstat (limited to 'app/admin')
| -rw-r--r-- | app/admin/forms.py | 6 | ||||
| -rw-r--r-- | app/admin/routes.py | 54 |
2 files changed, 59 insertions, 1 deletions
diff --git a/app/admin/forms.py b/app/admin/forms.py index 39ee1ab..1f13626 100644 --- a/app/admin/forms.py +++ b/app/admin/forms.py @@ -68,6 +68,12 @@ class AdminManageDatasetsForm(FlaskForm): dataset = SelectField("Dataset", coerce=int, validators=[InputRequired()]) delete = SubmitField("Delete") + class AdminManageUsersForm(FlaskForm): user = SelectField("User", coerce=int, validators=[InputRequired()]) delete = SubmitField("Delete") + + +class AdminSelectDatasetForm(FlaskForm): + dataset = SelectField("Dataset", coerce=int, validators=[InputRequired()]) + submit = SubmitField("Show") diff --git a/app/admin/routes.py b/app/admin/routes.py index 58d23aa..bed31e2 100644 --- a/app/admin/routes.py +++ b/app/admin/routes.py @@ -16,9 +16,11 @@ from app.admin.forms import ( AdminAddDatasetForm, AdminManageDatasetsForm, AdminManageUsersForm, + AdminSelectDatasetForm, ) from app.models import User, Dataset, Task, Annotation from app.utils.tasks import generate_auto_assign_tasks +from app.main.datasets import load_data_for_chart @bp.route("/manage/tasks", methods=("GET", "POST")) @@ -229,9 +231,22 @@ def add_dataset(): return render_template("admin/add.html", title="Add Dataset", form=form) -@bp.route("/annotations", methods=("GET",)) +@bp.route("/annotations", methods=("GET", "POST")) @admin_required def view_annotations(): + dataset_list = [(d.id, d.name) for d in Dataset.query.all()] + form = AdminSelectDatasetForm() + 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 does not exist.", "error") + return redirect(url_for("admin.view_annotations")) + return redirect( + url_for("admin.view_annotations_by_dataset", dset_id=dataset.id) + ) + annotations = ( Annotation.query.join(Task, Annotation.task) .join(User, Task.user) @@ -243,6 +258,43 @@ def view_annotations(): "admin/annotations.html", title="View Annotations", annotations=annotations, + form=form, + ) + + +@bp.route("/annotations_by_dataset/<int:dset_id>", methods=("GET",)) +@admin_required +def view_annotations_by_dataset(dset_id): + dataset = Dataset.query.filter_by(id=dset_id).first() + annotations = ( + Annotation.query.join(Task, Annotation.task) + .join(User, Task.user) + .join(Dataset, Task.dataset) + .order_by(Dataset.name, User.username, Annotation.cp_index) + .all() + ) + + annotations = [a for a in annotations if a.task.dataset.id == dset_id] + + anno_clean = [] + user_counter = {} + counter = 1 + for ann in annotations: + if ann.task.user.id in user_counter: + uid = user_counter[ann.task.user.id] + else: + uid = user_counter.setdefault( + ann.task.user.id, "user-%i" % counter + ) + counter += 1 + anno_clean.append(dict(user=uid, index=ann.cp_index)) + + data = load_data_for_chart(dataset.name) + data["annotations"] = anno_clean + return render_template( + "admin/annotations_by_dataset.html", + title="View Annotations for dataset", + data=data, ) |
