Skip to content

Commit 1a96ac4

Browse files
committed
Add manual naming and explicit overriding of content detection datasets
1 parent a8ff4be commit 1a96ac4

2 files changed

Lines changed: 29 additions & 15 deletions

File tree

app/blueprints/admin/content_detection.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55

66
from typing import Dict
77

8-
from flask import render_template, request
8+
from flask import render_template, request, redirect, url_for, flash
99
from flask_babel import lazy_gettext
1010
from flask_wtf import FlaskForm
11-
from wtforms import SubmitField, FileField
11+
from wtforms import SubmitField, FileField, StringField
12+
from wtforms.validators import Optional
13+
from wtforms_sqlalchemy.fields import QuerySelectField
1214
import json
1315

1416
from . import bp
@@ -18,16 +20,19 @@
1820

1921

2022
class UploadDatasetForm(FlaskForm):
23+
name_select = QuerySelectField(lazy_gettext("Dataset"), allow_blank=True,
24+
blank_text=lazy_gettext("Create New"),
25+
query_factory=lambda: ContentDetectionDataset.query.order_by(ContentDetectionDataset.name),
26+
get_pk=lambda d: d.id, get_label=lambda d: d.name)
27+
new_name = StringField(lazy_gettext("New dataset name"), validators=[Optional()])
2128
file_upload = FileField(lazy_gettext("File Upload"))
2229
submit = SubmitField(lazy_gettext("Update"))
2330

2431

25-
def handle_update(data):
26-
pack_name = data["pack_name"]
27-
28-
ContentDetectionDataset.query.filter_by(name=pack_name).delete()
32+
def handle_update(name, data):
33+
ContentDetectionDataset.query.filter_by(name=name).delete()
2934
dataset = ContentDetectionDataset()
30-
dataset.name = pack_name
35+
dataset.name = name
3136
db.session.add(dataset)
3237

3338
for entry in data["entries"]:
@@ -50,14 +55,22 @@ def handle_update(data):
5055
@bp.route("/admin/content_detection/datasets/", methods=["GET", "POST"])
5156
@rank_required(UserRank.EDITOR)
5257
def cd_datasets():
58+
datasets = ContentDetectionDataset.query.order_by(ContentDetectionDataset.name).all()
59+
5360
form = UploadDatasetForm()
5461

5562
if form.validate_on_submit():
56-
json_data = request.files[form.file_upload.name].read()
57-
data = json.loads(json_data)
58-
handle_update(data)
59-
60-
return render_template("admin/content_detection/datasets.html", form=form, datasets=ContentDetectionDataset.query.all())
63+
selected = form.name_select.data
64+
name = selected.name if selected is not None else form.new_name.data
65+
if name:
66+
json_data = request.files[form.file_upload.name].read()
67+
data = json.loads(json_data)
68+
handle_update(name, data)
69+
return redirect(url_for("admin.cd_datasets"))
70+
else:
71+
flash("Please enter a name for the new dataset", "danger")
72+
73+
return render_template("admin/content_detection/datasets.html", form=form, datasets=datasets)
6174

6275

6376
@bp.route("/admin/content_detection/matches/", methods=["GET"])

app/templates/admin/content_detection/datasets.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ <h1>{{ self.title() }}</h1>
1111

1212
<div class="list-group">
1313
{% for set in datasets %}
14-
<div class="list-group-item"
15-
href="{{ url_for('admin.create_edit_tag', name=set.name) }}">
16-
{{ set.name }}
14+
<div class="list-group-item">
15+
{{ set.name }} &mdash; updated {{ set.updated_at.strftime("%Y-%m-%d %H:%M") }}
1716
</div>
1817
{% else %}
1918
<div class="list-group-item">None</div>
@@ -23,6 +22,8 @@ <h1>{{ self.title() }}</h1>
2322
<h2>Add / update</h2>
2423
<form method="POST" action="" enctype="multipart/form-data">
2524
{{ form.hidden_tag() }}
25+
{{ render_field(form.name_select) }}
26+
{{ render_field(form.new_name, class_="", placeholder="Only used when creating a new dataset") }}
2627
{{ render_field(form.file_upload, class_="", accept=".json") }}
2728
{{ render_submit_field(form.submit) }}
2829
</form>

0 commit comments

Comments
 (0)