55
66from typing import Dict
77
8- from flask import render_template , request
8+ from flask import render_template , request , redirect , url_for , flash
99from flask_babel import lazy_gettext
1010from 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
1214import json
1315
1416from . import bp
1820
1921
2022class 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 )
5257def 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" ])
0 commit comments