diff --git a/atst/forms/new_project.py b/atst/forms/new_project.py index 1552a1ab..9af3ac0c 100644 --- a/atst/forms/new_project.py +++ b/atst/forms/new_project.py @@ -1,9 +1,22 @@ from flask_wtf import Form -from wtforms.fields import StringField, TextAreaField +from wtforms.fields import StringField, TextAreaField, FieldList +from wtforms.validators import Required +from atst.forms.validators import ListItemRequired class NewProjectForm(Form): - name = StringField(label="Project Name") - description = TextAreaField(label="Description") - environment_name = StringField(label="Environment Name") + EMPTY_ENVIRONMENT_NAMES = ["", None] + + name = StringField(label="Project Name", validators=[Required()]) + description = TextAreaField(label="Description", validators=[Required()]) + environment_names = FieldList( + StringField(label="Environment Name"), + validators=[ListItemRequired(message="Provide at least one environment name.")], + ) + + @property + def data(self): + _data = super(Form, self).data + _data["environment_names"] = [n for n in _data["environment_names"] if n not in self.EMPTY_ENVIRONMENT_NAMES] + return _data diff --git a/atst/forms/validators.py b/atst/forms/validators.py index 241a5401..85173383 100644 --- a/atst/forms/validators.py +++ b/atst/forms/validators.py @@ -51,3 +51,14 @@ def Alphabet(message="Please enter only letters."): raise ValidationError(message) return _alphabet + + +def ListItemRequired(message="Please provide at least one.", empty_values=("", None)): + def _list_item_required(form, field): + non_empty_values = [v for v in field.data if v not in empty_values] + if len(non_empty_values) == 0: + raise ValidationError(message) + + return _list_item_required + +