aboutsummaryrefslogtreecommitdiff
path: root/app/admin/forms.py
blob: 30070d239e57c4db36c1f0078f6684af2933ae54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# -*- coding: utf-8 -*-

import os

from flask import current_app
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileRequired

from wtforms import SubmitField, SelectField
from wtforms.validators import ValidationError, InputRequired

from werkzeug.utils import secure_filename

from app.models import Dataset
from app.admin.datasets import validate_dataset, get_name_from_dataset


class AdminManageTaskForm(FlaskForm):
    username = SelectField(
        "Username", coerce=int, validators=[InputRequired()]
    )
    dataset = SelectField("Dataset", coerce=int, validators=[InputRequired()])
    assign = SubmitField("Assign")
    delete = SubmitField("Delete")


class AdminAddDatasetForm(FlaskForm):
    file_ = FileField("File", validators=[FileRequired()])
    submit = SubmitField("Upload")

    def validate_file_(self, field):
        filename = secure_filename(field.data.filename)
        if not "." in filename:
            raise ValidationError("The file should be a '.json' file.")
        if not filename.rsplit(".", 1)[1].lower() == "json":
            raise ValidationError("The file should be a '.json' file.")

        temp_filename = os.path.join(
            current_app.instance_path, current_app.config["TEMP_DIR"], filename
        )

        field.data.save(temp_filename)
        error = validate_dataset(temp_filename)
        if not error is None:
            os.unlink(temp_filename)
            raise ValidationError("Error validating dataset: %s" % error)

        name = get_name_from_dataset(temp_filename)
        dataset = Dataset.query.filter_by(name=name).first()
        if dataset is not None:
            os.unlink(temp_filename)
            raise ValidationError(
                "A dataset with the name '%s' already exists." % name
            )


class AdminManageDatasetsForm(FlaskForm):
    dataset = SelectField("Dataset", coerce=int, validators=[InputRequired()])
    delete = SubmitField("Delete")