class loginform(FlaskForm): username = StringField( 'username', validators=[input_required(), length(min=4, max=40)]) password = PasswordField( 'password', validators=[input_required(), length(min=8, max=40)])
class addphotoform(Form): name = wtfields.StringField(validators=[validators.input_required()]) description = wtfields.StringField() privacy = wtfields.StringField(validators=[ validators.input_required(), validators.AnyOf(['private', 'public', 'link']) ])
def metaform(name, inputs): class MetaForm(Form): pass MetaForm.__name__ = name default = [] for name, _type, default, _range, allowed_values in inputs: if _range: _min, _max = _range[0], _range[2] step = range_input_type[_type] if len(_range) == 3: step = _range[1] RangeField = rangeField(step, _min, _max, default) setattr(MetaForm, name, RangeField(name, validators=[validators.input_required()], default=types[_type](default))) elif allowed_values: choices = [] default_index = 0 for value in allowed_values: choices.append((value, value)) if default == value: default_index = value setattr(MetaForm, name, SelectField(name, choices=choices, validators=[validators.input_required()], default=default_index)) elif _type in single_input_type.keys(): _SingleField = single_input_type[_type] setattr(MetaForm, name, _SingleField(name, validators=[validators.input_required()], default=default)) return MetaForm
class SignupForm(FlaskForm): name = StringField( "Adınız", validators=[ validators.input_required(message="İsminizi giriniz.."), validators.length(min=4, max=20) ]) username = StringField( "Kullanıcı Adı", validators=[ validators.input_required( message="Lütfen geçerli bir kullanıcı adı giriniz.."), validators.length(min=4, max=20) ]) email = StringField( "E-posta Adresi", validators=[ validators.Email( message="Uygun formatta bir e-posta adresi giriniz..") ]) password = PasswordField("Şifre", validators=[ validators.input_required(), validators.equal_to( fieldname="confirm", message="Şifre uyuşmuyor.."), validators.length(min=4, max=20) ]) confirm = PasswordField("Şifreyi Doğrula")
def test_input_required(self): self.assertEqual( input_required()(self.form, DummyField('foobar', raw_data=['foobar'])), None) self.assertRaises(StopValidation, input_required(), self.form, DummyField('', raw_data=[''])) self.assertEqual(input_required().field_flags, ('required', ))
class RegisterForm(Form): name = StringField('Name', validators=[ validators.input_required(), validators.length(min=3, max=30) ]) email = StringField('Email', validators=[ validators.input_required(), validators.length(min=5, max=50) ]) username = StringField('Username', validators=[ validators.input_required(), validators.length(min=5, max=20) ]) password = PasswordField('Password', validators=[ validators.input_required(), validators.equal_to( 'confirmPassword', message='password does not match') ]) confirmPassword = PasswordField('Confrim Password', validators=[validators.input_required()])
class RegistrationForm(FlaskForm): username = StringField('Username', validators=[ validators.input_required(), ]) email = StringField('Email', validators=[ validators.input_required(), validators.email(), ]) password = PasswordField('Password', validators=[ validators.input_required(), validators.length(min=8, max=30) ]) password2 = PasswordField('Repeat Password', validators=[ validators.input_required(), validators.equal_to('password'), ]) submit = SubmitField('Register') def validate_username(self, username): user = User.query.filter_by(username=username.data).first() if user is not None: raise ValidationError('This username is already in use.') def validate_email(self, email): user = User.query.filter_by(email=email.data).first() if user is not None: raise ValidationError('This email is already in use.')
class NewGraveForm(Form): """Klasa wtforms do walidacji danych dotyczących grobu.""" def name_validator(self, field): if not re.match(r'^[A-Za-z -]+$', field.data): raise ValidationError( 'Pole może zawierać tylko litery, spacje i myślniki!') def date_past(self, field): today = datetime.datetime.today() if field.data > datetime.datetime.date(today): raise ValidationError('Data musi być starsza od dzisiejszej daty!') def death_after(self, field): if field.data < self.birth_date.data: raise ValidationError( 'Data urodzenia nie może przekroczyć daty śmierci!') name = StringField( 'Imię', [input_required(message='Pole wymagane!'), name_validator], render_kw={'required': True}) surname = StringField( 'Nazwisko', [input_required(message='Pole wymagane!'), name_validator], render_kw={'required': True}) birth_date = DateField('Data urodzenia', [date_past], format='%Y-%m-%d', render_kw={'required': True}) death_date = DateField('Data śmierci', [Optional(), date_past, death_after], format='%Y-%m-%d')
class SignUpForm(FlaskForm): first_name = StringField( 'First Name:', validators=[input_required('This field is required.'), length(3, 127)]) last_name = StringField( 'Last Name:', validators=[input_required('This field is required'), length(3, 127)]) password = PasswordField( 'Password:'******'This field is required.'), length(7, 127)]) password_confirm = PasswordField( 'Repeat Password:'******'This field is required.'), equal_to('password', 'Your passwords should probably be the same'), length(7, 127) ]) email = EmailField( 'Email:', validators=[input_required('This field is required.'), length(7, 127)]) email_confirm = BooleanField( 'Sign me up for an occasional email about current and future plans', default=True) submit = SubmitField("Sign Up")
class RecordForm(BaseForm): id = StringField( label='Record id', render_kw={'readonly': ''}, ) doi = StringField( label='DOI (Digital Object Identifier)', validators=[regexp('^$|' + DOI_REGEX)], ) sid = StringField( label='SID (Secondary Identifier)', validators=[regexp('^$|' + SID_REGEX)], ) collection_id = SelectField( label='Collection', validators=[input_required()], ) schema_id = SelectField( label='Schema', validators=[input_required()], ) metadata = JSONTextField( label='Metadata', validators=[input_required(), json_object], render_kw={'rows': 24}, ) def validate_sid(self, field): if not self.doi.data and not field.data: raise ValidationError('SID is required if there is no DOI.')
class Crit(Hidden): """Critique for each of the standards STILL NEED TO CREATE Change radio fields to select and add inputtext other """ name = StringField(u'Name', widget=TextInput(), validators=[validators.input_required(message=NO_INPUT_ERROR), validators.length(max=MAX_LENGTH)]) school = StringField(u'School', widget=TextInput(), validators=[validators.input_required(message=NO_INPUT_ERROR), validators.length(max=MAX_LENGTH)]) materials = RadioField(u'Source of Materials', choices=[('Own','Own'), ('Commercial','Commercial'), ('Subject','Subject Association'), ('TKI','TKI / NZQA'), ('Other','Other')]) check1 = BooleanField(u'The assessment material has been reviewed against the current standard clarification and/or external moderation feedback. (Where the material has been previously critiqued and the standard is unchanged, no further critiquing is required)', widget=CheckboxInput()) check2 = BooleanField(u'Student instructions contain registered standard number, version, title, level & credits', widget=CheckboxInput()) check3 = BooleanField(u'Student instructions are clear and language is appropriate' ,widget=CheckboxInput()) check4 = BooleanField(u'The assessment is consistent with learning/context/curriculum at the appropriate level',widget=CheckboxInput()) check5 = BooleanField(u'The assessment allows students to achieve all requirements of the standard for all grades',widget=CheckboxInput()) check6 = BooleanField(u'Instructions are consistent with explanatory notes/range statements in the standard',widget=CheckboxInput()) check7 = BooleanField(u'Assessment schedule is consistent with the standard and clarifications documents',widget=CheckboxInput()) check8 = BooleanField(u'Judgement/ sufficiency statement clearly describe performance levels for each grade, e.g. quality & length',widget=CheckboxInput()) check9 = BooleanField(u'Evidence statements allow for a range of acceptable answers from students with specific examples for each grade (N/A/M/E)',widget=CheckboxInput()) finished = BooleanField(u""" By clicking the button to the left you are signing that <b>you</b> have finished the <b><u>critique process</u></b>. <br><small>If you are not finished, click submit process button below to save what you have entered so far. You can sign off the process at a later date</small>""",widget=CheckboxInput())
class CertificateForm(Form): cert_title = StringField('인증 서비스명(한글)', validators=[validators.input_required()]) cert_pass = PasswordField('인증키 비밀번호', validators=[validators.input_required()]) country_name = StringField('Country Name', validators=[validators.optional()], description='2자리 국가코드') province_name = StringField('State or Province Name', validators=[validators.optional()], description='시/도') locality_name = StringField('Locality Name', validators=[validators.optional()], description='구/군/시') organization_name = StringField('Organization Name', validators=[validators.optional()], description='회사명') organizational_unit_name = StringField('Organizational Unit Name', validators=[validators.optional()], description='부서명') common_name = StringField('Common Name', validators=[validators.optional()], description='도메인명') email_address = StringField('Email Address', validators=[validators.optional()], description='담당자 이메일') cert_days = StringField('인증서 유효기간(일단위)', validators=[validators.input_required()])
class ProfileForm(Form): user = StringField(u'user', validators=[ validators.input_required(messages.required), my_validators.user_exists(new_user=False) ]) email = StringField(u'email', validators=[ validators.input_required(messages.required), my_validators.mail_exists(new_user=False) ]) password = StringField(u'password', validators=[ validators.equal_to( 'confirm_password', message='Passwords deben ser iguales') ]) confirm_password = StringField(u'confirm_password') periodicity = SelectField( u'periodicity', choices=[(Periodicidad.diaria.value, Periodicidad.diaria.value), (Periodicidad.semanal.value, Periodicidad.semanal.value), (Periodicidad.mensual.value, Periodicidad.mensual.value)]) def set_values(self, user): self.user.data = user.user self.email.data = user.email self.periodicity.data = user.perfil.periodicidad
class EndRideForm(FlaskForm): """ End ride form for the user to fill out. """ longitude = DecimalField( label='Longitude', validators=[ input_required(), number_range(min=-180, max=180, message="Longitude must be between -180 and 180.") ]) latitude = DecimalField( label='Latitude', validators=[ input_required(), number_range(min=-90, max=90, message="Latitude must be between -90 and 90.") ]) battery = IntegerField( label='Battery (percent)', validators=[ input_required(), number_range( min=0, max=100, message="Battery (percent) must be between 0 and 100.") ]) submit = SubmitField('End ride')
class RegForm(DynamicForm): first_name = StringField(u'First Name', validators=[input_required()], widget=BS3TextFieldWidget()) last_name = StringField(u'Last Name', validators=[input_required()], widget=BS3TextFieldWidget()) aadhaar = StringField( u'Aadhaar', [input_required(), length(min == 12), length(max=12)], widget=BS3TextFieldWidget()) gender = SelectField('Gender', choices=[('M', 'Male'), ('F', 'Female'), ('T', 'Transgender')]) dob = DateField("Date of Birth", format='%Y-%m-%d', validators=[input_required()]) email = StringField("Email", validators=[DataRequired(), validators.Email()], widget=BS3TextFieldWidget()) number = IntegerField('Mobile', validators=[DataRequired([DataRequired()])]) password = PasswordField( ' Password', [DataRequired(), EqualTo('confirm', message='Passwords must match')]) confirm = PasswordField('Repeat Password') accept_tos = BooleanField('I Agree', [DataRequired()]) submit = SubmitField("Register")
class ParticipantEditBaseForm(WTSecureForm): # participant_id = TextField( # _('Participant ID'), # validators=[validators.input_required()] # ) name = TextField( _('Name') ) gender = SelectField( _('Gender'), choices=Participant.GENDER ) role = SelectField( _('Role'), choices=_make_choices( participant_roles.find().scalar('id', 'name') ), validators=[validators.input_required()] ) supervisor = TextField( _('Supervisor') ) location = TextField( _('Location'), validators=[validators.input_required()] ) # partners are not required partner = SelectField( _('Partner'), choices=_make_choices( participant_partners.find().scalar('id', 'name') ), ) phone = StringField(_('Phone')) password = StringField(_('Password'))
class CommentForm(Form): parent_comment = IntegerField() content = StringField(validators=[ input_required(message='内容不能为空'), Length(max=80, min=2, message='评论内容最大长度为2~80') ]) article = IntegerField(validators=[input_required(message='文章不能为空')])
class BookForm(Form): author = StringField('author', validators=[validators.input_required()]) name = StringField('name', validators=[validators.input_required()]) edition = StringField('edition', validators=[validators.input_required()]) year = IntegerField('year', validators=[validators.input_required()]) user = StringField('edition', validators=[validators.input_required()]) translator = StringField('translator', validators=[validators.optional()])
class RegisterForm(Form): telephone = StringField(validators=[ input_required(message='手机号码不能为空'), Length(min=11, max=11, message='请输入正确的手机号码') ]) # telePassCode = StringField(validators=[input_required('请输入手机验证码'),Length(min=4,max=4,message='验证码错误')]) ##没钱做不出来 阿里大鱼 username = StringField(validators=[ input_required(message='用户名不能为空'), Length(min=6, max=18, message='用户名长度为6~18') ]) password = StringField(validators=[input_required(message='密码不能为空')]) repeatPassword = StringField( validators=[input_required(message='请确认密码'), EqualTo('password')]) passCode = StringField(validators=[ input_required(message='请输入验证码'), Length(min=4, max=4, message='请输入图形验证码') ]) def validate_telephone(self, field): data = field.data res = re.findall(r'^1\d{10}$', data) if res and res[0] != data: raise ValidationError('请输入正确的手机号码') def validate_username(self, field): data = field.data res = re.findall('[\w|\d]+', data) if res and res[0] != data: raise ValidationError('用户名和密码只能包含数字字母下划线') def validate_password(self, field): self.validate_username(field)
class Users(Form): firstname = StringField(u'Firstname', validators=[ validators.input_required(), validators.Length(min=3, max=250) ]) lastname = StringField(u'Lastname', validators=[ validators.input_required(), validators.Length(min=3, max=250) ]) username = StringField(u'Username', validators=[ validators.input_required(), validators.Length(min=3, max=250) ]) email = StringField(u'Email', validators=[ validators.input_required(), validators.Length(min=3, max=250) ]) password = PasswordField('Password', [ validators.DataRequired(), validators.EqualTo('confirm', message='Passwords do not match') ]) confirm = PasswordField('Confirm Password')
class ContactForm (FlaskForm): first_name= StringField("First Name", validators=[input_required()]) last_name= StringField("Last Name", validators=[input_required()]) phone= StringField("Phone Number", validators=[input_required()]) email=StringField("Email Address", validators=[input_required()]) comment=StringField("Comment", validators=[input_required()]) submit = SubmitField()
class VehicleForm(FlaskForm): """ Register a new vehicle. """ vehicle_type = SelectField(label='Type', choices=[('scooter', 'Scooter')]) longitude = DecimalField( label='Longitude', validators=[ input_required(), number_range(min=-180, max=180, message="Longitude must be between -180 and 180.") ]) latitude = DecimalField( label='Latitude', validators=[ input_required(), number_range(min=-90, max=90, message="Latitude must be between -90 and 90.") ]) battery = IntegerField( label='Battery (percent)', validators=[ input_required(), number_range( min=0, max=100, message="Battery (percent) must be between 0 and 100.") ]) submit = SubmitField('Add vehicle')
class RegistrationForm(Form): """Creates a registration form with validations for users to sign up""" first_name = StringField(u'First Name', validators=[ validators.Length(min=3, max=20), validators.input_required() ]) last_name = StringField(u'Last Name', validators=[ validators.Length(min=3, max=20), validators.input_required() ]) email = StringField(u'Email', validators=[ validators.Length(min=10, max=30), validators.input_required(), validators.Email() ]) password = PasswordField('Password', [ validators.DataRequired(), validators.Length(min=8, max=25), validators.EqualTo('confirm', message='Passwords do not match') ]) confirm = PasswordField('Confirm Password')
class RequestForm(FlaskForm): email= StringField("Email Address", validators=[input_required()]) first_name= StringField("First Name", validators=[input_required()]) last_name=last_name= StringField("Last Name", validators=[input_required()]) card_select= SelectField(u'Reading request choice', choices=[('35', '3 card reading'), ('50', '5 card reading')]) comment= StringField('Comment', validators=[input_required()]) submit = SubmitField()
class EscritorioForm(FlaskForm): cnpj = StringField( 'CNPJ', validators=[ input_required(message="Informe apenas os números do CNPJ"), Length(min=14, max=14, message="O CNPJ deve conter 14 caracteres") ]) n_oab = StringField( 'Nº OAB', validators=[ input_required(message="Informe nº OAB no formato UF123456"), Length(min=8, max=8, message="Número inválido, use o formato formato UF123456") ]) email = StringField('Email', validators=[Email(message="Insira um e-mail válido")]) senha = PasswordField( 'Senha', validators=[ input_required("Campo obrigatório"), Length(min=8, message="A senha deve conter pelo menos 8 caracteres") ]) confirmar_senha = PasswordField('Confirmação de senha', validators=[ input_required('Campo obrigatório'), EqualTo( fieldname='senha', message="As senhas não coincidem") ]) registrar_escritorio = SubmitField('Registrar Escritório')
class UserForm(Form): name = StringField(label='이름', validators=[input_required()]) who = HiddenField(validators=[input_required()], default='users') service = HiddenField(validators=[input_required()], default='soran')
class AddForm(Form): name = StringField('name', validators=[validators.input_required()]) description = StringField('description', validators=[validators.input_required()]) price = IntegerField('price', validators=[validators.input_required()]) image_src = FileField('image_src', validators=[validators.input_required()])
class LoginForm(Form): email = StringField(validators=[ Email(message='请输入有效的邮箱地址'), input_required(message='邮箱不能为空') ]) # TODO:密码长度限制 password = StringField(validators=[input_required('密码不能为空')])
class LoginForm(Form): username = StringField(u'Usuario', validators=[validators.input_required()], render_kw={"placeholder": "Ingresar usuario"}) password = PasswordField(u'Contraseña', validators=[validators.input_required()], render_kw={"placeholder": "Ingresar contraseña"})
class AddressForm(Form): street_line1 = StringField(u'StreetLine 1', validators=[validators.input_required()]) street_line2 = StringField(u'StreetLine 2') city = StringField(u'City', validators=[validators.input_required()]) state = ModelSelectField(u'State', validators=[validators.input_required()]) zip_code = StringField(u'Zip Code', validators=[validators.input_required()]) country = ModelSelectField(u'Country', validators=[validators.input_required()])
class MyForm(FlaskForm): firstname = StringField(u'First_Name', validators=[ validators.input_required(), validators.Length(min=3, max=50) ]) lastname = StringField(u'Last_Name', validators=[ validators.input_required(), validators.Length(min=3, max=50) ]) email = StringField(u'Email', validators=[ validators.input_required(), validators.Length(min=3, max=50) ]) stack = StringField(u'Stack', validators=[ validators.input_required(), validators.Length(min=3, max=50) ]) image = FileField('Image') description = TextAreaField(u'Description', validators=[ validators.input_required(), validators.Length(min=3, max=50) ]) submit = SubmitField('post')
def test_input_required(self): self.assertEqual(input_required()(self.form, DummyField('foobar', raw_data=['foobar'])), None) self.assertRaises(StopValidation, input_required(), self.form, DummyField('', raw_data=[''])) self.assertEqual(input_required().field_flags, ('required', )) # Check message and custom message grab = lambda **k: grab_stop_message(input_required(**k), self.form, DummyField('', raw_data=[''])) self.assertEqual(grab(), 'This field is required.') self.assertEqual(grab(message='foo'), 'foo')
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._instances = Instances(self._supervisor.get_db()) hosts_names = [host.get_name() for host in self._supervisor.get_hosts()] apps_images = [app.get_image() for app in self._supervisor.get_apps()] self.host.validators = [validators.input_required(), validators.any_of(hosts_names)] self.image.validators = [validators.input_required(), validators.any_of(apps_images)]
def convert(self, model, prop, field_args): """ Returns a form field for a single model property. :param model: The ``db.Model`` class that contains the property. :param prop: The model property: a ``db.Property`` instance. :param field_args: Optional keyword arguments to construct the field. """ prop_type_name = type(prop).__name__ #check for generic property if(prop_type_name == "GenericProperty"): #try to get type from field args generic_type = field_args.get("type") if generic_type: prop_type_name = field_args.get("type") #if no type is found, the generic property uses string set in convert_GenericProperty kwargs = { 'label': prop._code_name.replace('_', ' ').title(), 'default': prop._default, 'validators': [], } if field_args: kwargs.update(field_args) if prop._required and prop_type_name not in self.NO_AUTO_REQUIRED: # Use input_required instead of required to allow falsey values like 0. kwargs['validators'].append(validators.input_required()) if kwargs.get('choices'): # Use choices in a select field. # kwargs['choices'] = [(v, v) for v in kwargs.get('choices')] choices = [] # Allow two ways of providing choices. With key-value tuples and with simple strings. for c in kwargs.get('choices'): if type(c) is tuple: choices.append((c[0], c[1])) elif type(c) is str: choices.append((c, c)) kwargs['choices'] = choices return f.SelectField(**kwargs) if prop._choices: # Use choices in a select field. kwargs['choices'] = [(v, v) for v in prop._choices] return f.SelectField(**kwargs) else: converter = self.converters.get(prop_type_name, None) if converter is not None: return converter(model, prop, kwargs) else: return self.fallback_converter(model, prop, kwargs)
def submission_create(form_id): form = services.forms.get_or_404(pk=form_id, form_type='INCIDENT') edit_form_class = generate_submission_edit_form_class(form) page_title = _('Add Submission') template_name = 'frontend/incident_add.html' if request.method == 'GET': submission_form = edit_form_class() return render_template( template_name, page_title=page_title, form=form, submission_form=submission_form ) else: submission_form = edit_form_class(request.form) # a small hack since we're not using modelforms, # these fields are required for creating a new incident submission_form.contributor.validators = [validators.input_required()] submission_form.location.validators = [validators.input_required()] if not submission_form.validate(): # really should redisplay the form again print submission_form.errors return redirect(url_for( 'submissions.submission_list', form_id=unicode(form.pk))) submission = services.submissions.new() submission_form.populate_obj(submission) # properly populate all fields submission.created = datetime.utcnow() submission.deployment = g.deployment submission.event = g.event submission.form = form submission.submission_type = 'O' submission.contributor = submission_form.contributor.data submission.location = submission_form.location.data submission.save() return redirect( url_for('submissions.submission_list', form_id=unicode(form.pk)))
def get_field(self, column): if column.__class__ not in self.column_field: raise ValueError("%s -> field not found!" % column.__class__) field_cls = self.column_field[column.__class__] args, field_kwargs = [], {} field_kwargs["validators"] = [] if "allow_none" in column.__dict__: allow_none = column.__dict__["allow_none"] if not allow_none: field_kwargs["validators"].append(input_required()) if "default" in column.__dict__: field_kwargs["default"] = column.__dict__["default"] return field_cls(*args, **field_kwargs)
def scaffold_form(self): form_class = super(PubView, self).scaffold_form() form_class.pub_type = TextField(label='酒吧类型', validators=[validators.input_required()], description=u'酒吧类型') return form_class
def scaffold_form(self): form_class = super(PubView, self).scaffold_form() form_class.pub_type = TextField(label=u"酒吧类型", validators=[validators.input_required()], description=u"酒吧类型") form_class.picture = TextField(label=u"酒吧图片", description=u"酒吧图片,按control键可以选择多张图片") return form_class
'FloatField', 'IntegerField', 'StringField', 'ComputedStringField', 'BaseFormMixin', 'BaseForm', 'SecureBaseForm', 'json_to_form', 'body_to_multidict', 'HideFields', 'GetBindingMap', ] DATA_REQUIRED = validators.data_required() INPUT_REQUIRED = validators.input_required() REQUIRED = DATA_REQUIRED def json_to_form(form_dict, sep=u'_', pre=u'', _ls=u'-'): """Convert a json dictionary to match the flat form fieldnames.""" flat = [] for key, val in form_dict.iteritems(): key_name = pre + key if pre else key if isinstance(val, dict): leaf = json_to_form(val, sep=sep, pre=key_name + sep) flat += leaf elif isinstance(val, list) and (len(val) and isinstance(val[0], dict)): for i, row in enumerate(val): row_key = _ls.join([key_name, str(i)]) leaf = json_to_form(row, sep=sep, pre=row_key + _ls)
def InputRequired(cls,message=None): ''' Validates that input was provided for this field. ''' return validators.input_required(message)
def generate_participant_import_mapping_form( deployment, headers, *args, **kwargs ): default_choices = [['', _('Select column')]] + [(v, v) for v in headers] attributes = { '_headers': headers, 'participant_id': SelectField( _('Participant ID'), choices=default_choices, validators=[validators.input_required()] ), 'name': SelectField( _('Name'), choices=default_choices ), 'partner_org': SelectField( _('Partner'), choices=default_choices ), 'role': SelectField( _('Role'), choices=default_choices, ), 'location_id': SelectField( _('Location ID'), choices=default_choices, ), 'supervisor_id': SelectField( _('Supervisor'), choices=default_choices, ), 'gender': SelectField( _('Gender'), choices=default_choices ), 'email': SelectField( _('Email'), choices=default_choices, ), 'password': SelectField( _('Password'), choices=default_choices, ), 'phone': TextField( _('Phone prefix') ), 'group': TextField( _('Group prefix') ) } for field in deployment.participant_extra_fields: attributes[field.name] = SelectField( _('%(label)s', label=field.label), choices=default_choices ) def validate_phone(self, field): if field.data: subset = [h for h in self._headers if h.startswith(field.data)] if not subset: raise ValidationError(_('Invalid phone prefix')) def validate_group(self, field): if field.data: subset = {h for h in self._headers if h.startswith(field.data)} if not subset: raise ValidationError(_('Invalid group prefix')) attributes['validate_phone'] = validate_phone attributes['validate_group'] = validate_group ParticipantImportMappingForm = type( 'ParticipantImportMappingForm', (WTSecureForm,), attributes ) return ParticipantImportMappingForm(*args, **kwargs)
def test_input_required(self): self.assertEqual(input_required()(self.form, DummyField('foobar', raw_data=['foobar'])), None) self.assertRaises(StopValidation, input_required(), self.form, DummyField('', raw_data=[''])) self.assertEqual(input_required().field_flags, ('required', ))