fix optional and required validations in user forms

This commit is contained in:
dandds 2018-10-16 16:32:49 -04:00
parent a7ef93dad4
commit d60b798af0
2 changed files with 38 additions and 36 deletions

View File

@ -1,7 +1,8 @@
import pendulum import pendulum
from copy import deepcopy
from wtforms.fields.html5 import DateField, EmailField, TelField from wtforms.fields.html5 import DateField, EmailField, TelField
from wtforms.fields import RadioField, StringField from wtforms.fields import RadioField, StringField
from wtforms.validators import Email, Required from wtforms.validators import Email, Required, Optional
from .fields import SelectField from .fields import SelectField
from .forms import ValidatedForm from .forms import ValidatedForm
@ -10,12 +11,12 @@ from .data import SERVICE_BRANCHES
from .validators import Alphabet, DateRange, PhoneNumber from .validators import Alphabet, DateRange, PhoneNumber
USER_FIELDS = { USER_FIELDS = {
"first_name": StringField("First Name", validators=[Required(), Alphabet()]), "first_name": StringField("First Name", validators=[Alphabet()]),
"last_name": StringField("Last Name", validators=[Required(), Alphabet()]), "last_name": StringField("Last Name", validators=[Alphabet()]),
"email": EmailField( "email": EmailField(
"E-mail Address", "E-mail Address",
description="Enter your preferred contact e-mail address", description="Enter your preferred contact e-mail address",
validators=[Required(), Email()], validators=[Email()],
), ),
"phone_number": TelField( "phone_number": TelField(
"Phone Number", "Phone Number",
@ -59,12 +60,27 @@ USER_FIELDS = {
} }
def inherit_field(unbound_field, required=True):
kwargs = deepcopy(unbound_field.kwargs)
if not "validators" in kwargs:
kwargs["validators"] = []
if required:
kwargs["validators"].append(Required())
else:
kwargs["validators"].append(Optional())
return unbound_field.field_class(*unbound_field.args, **kwargs)
class EditUserForm(ValidatedForm): class EditUserForm(ValidatedForm):
first_name = USER_FIELDS["first_name"] first_name = inherit_field(USER_FIELDS["first_name"])
last_name = USER_FIELDS["last_name"] last_name = inherit_field(USER_FIELDS["last_name"])
email = USER_FIELDS["email"] email = inherit_field(USER_FIELDS["email"])
phone_number = USER_FIELDS["phone_number"] phone_number = inherit_field(USER_FIELDS["phone_number"], required=False)
service_branch = USER_FIELDS["service_branch"] service_branch = inherit_field(USER_FIELDS["service_branch"], required=False)
citizenship = USER_FIELDS["citizenship"] citizenship = inherit_field(USER_FIELDS["citizenship"], required=False)
designation = USER_FIELDS["designation"] designation = inherit_field(USER_FIELDS["designation"], required=False)
date_latest_training = USER_FIELDS["date_latest_training"] date_latest_training = inherit_field(
USER_FIELDS["date_latest_training"], required=False
)

View File

@ -1,18 +1,18 @@
import pendulum import pendulum
from wtforms.fields.html5 import DateField, EmailField, IntegerField, TelField from wtforms.fields.html5 import DateField, EmailField, IntegerField
from wtforms.fields import BooleanField, RadioField, StringField, TextAreaField from wtforms.fields import BooleanField, RadioField, StringField, TextAreaField
from wtforms.validators import Email, Length, Optional, InputRequired, DataRequired from wtforms.validators import Email, Length, Optional, InputRequired, DataRequired
from .fields import SelectField from .fields import SelectField
from .forms import ValidatedForm from .forms import ValidatedForm
from .edit_user import USER_FIELDS from .edit_user import USER_FIELDS, inherit_field
from .data import ( from .data import (
SERVICE_BRANCHES, SERVICE_BRANCHES,
ASSISTANCE_ORG_TYPES, ASSISTANCE_ORG_TYPES,
DATA_TRANSFER_AMOUNTS, DATA_TRANSFER_AMOUNTS,
COMPLETION_DATE_RANGES, COMPLETION_DATE_RANGES,
) )
from .validators import Alphabet, DateRange, PhoneNumber, IsNumber from .validators import DateRange, IsNumber
from atst.domain.requests import Requests from atst.domain.requests import Requests
@ -162,36 +162,22 @@ class DetailsOfUseForm(ValidatedForm):
) )
def inherit_field(unbound_field, append_validators=[]):
if "validators" in unbound_field.kwargs:
unbound_field.kwargs["validators"] += append_validators
return unbound_field.field_class(*unbound_field.args, **unbound_field.kwargs)
class InformationAboutYouForm(ValidatedForm): class InformationAboutYouForm(ValidatedForm):
fname_request = USER_FIELDS["first_name"] fname_request = inherit_field(USER_FIELDS["first_name"])
lname_request = USER_FIELDS["last_name"] lname_request = inherit_field(USER_FIELDS["last_name"])
email_request = EmailField("E-mail Address", validators=[InputRequired(), Email()]) email_request = EmailField("E-mail Address", validators=[InputRequired(), Email()])
phone_number = inherit_field( phone_number = inherit_field(USER_FIELDS["phone_number"])
USER_FIELDS["phone_number"], append_validators=[InputRequired()]
)
service_branch = USER_FIELDS["service_branch"] service_branch = inherit_field(USER_FIELDS["service_branch"])
citizenship = inherit_field( citizenship = inherit_field(USER_FIELDS["citizenship"])
USER_FIELDS["citizenship"], append_validators=[InputRequired()]
)
designation = inherit_field( designation = inherit_field(USER_FIELDS["designation"])
USER_FIELDS["designation"], append_validators=[InputRequired()]
)
date_latest_training = inherit_field( date_latest_training = inherit_field(USER_FIELDS["date_latest_training"])
USER_FIELDS["date_latest_training"], append_validators=[InputRequired()]
)
class WorkspaceOwnerForm(ValidatedForm): class WorkspaceOwnerForm(ValidatedForm):