def addValidators(field, column, validators=None, getDBSes=None, model=None): if validators is None: validators = field.validators if not hasattr(field, 'extattrs'): field.extattrs = {} extattrs = field.extattrs if column.nullable: validators.append(Optional()) elif not isinstance(column.type, types.Boolean): validators.append(InputRequired()) field.label = RequiredLabel(field.label.field_id, field.label.text) if column.unique and getDBSes is not None and model is not None: validators.append(Unique(getDBSes, model, column)) if isinstance(column.type, types.String) and column.type.length: validators.append(Length(max=column.type.length)) extattrs['maxlength'] = column.type.length elif isinstance(column.type, (types.Integer, types.SmallInteger, types.BigInteger, types.Float, types.Numeric)): extattrs['maxlength'] = 15 if not any(isinstance(v, NumberRange) for v in validators): # arbitary decision to forbid negatives unless otherwise allowed # TODO support HTML5 input[number] max and min? validators.append(NumberRange(min=0)) for vtor in validators: flags = getattr(vtor, 'field_flags', ()) for flag in flags: setattr(field.flags, flag, True)
def _parse_rules(self, field_name, rules): field_type = None validators = [] for rule in rules: rule_name = rule rule_params = {} if isinstance(rule, tuple): rule_name, rule_params = rule if rule_name in self._DATA_TYPES: # Parse data type if not field_type: field_type = self._DATA_TYPES[rule_name] else: raise RuleException( 'Multiple data types defined for field: "{}"'.format( field_name)) else: # Parse validator validator = self._RULES_MAP.get(rule_name, None) if not validator: raise RuleException( 'Undefined rule: "{}"'.format(rule_name)) if isinstance(validator, types.FunctionType): validators.append(validator) else: validators.append(validator(**rule_params)) field_type = StringField if not field_type else field_type return (field_type, validators)
def email_address(label='Email address', gov_user=True): validators = [ Length(min=5, max=255), DataRequired(message='Can’t be empty'), ValidEmail() ] if gov_user: validators.append(ValidGovEmail()) return EmailField(label, validators)
def email_address(label='Email address', gov_user=True): validators = [ Length(min=5, max=255), DataRequired(message='Can’t be empty'), Email(message='Enter a valid email address') ] if gov_user: validators.append(ValidGovEmail()) return EmailField(label, validators)
def email_address(label=_l('Email address'), gov_user=True, required=True): if(label == "email address"): label = _l("email address") elif (label == "phone number"): label = _l("phone number") validators = [ ValidEmail(), ] if gov_user: validators.append(ValidGovEmail()) if required: validators.append(DataRequired(message=_l('Can’t be empty'))) return EmailField(label, validators, render_kw={'spellcheck': 'false'})
def __init__(self, label=None, validators=None, **kwargs): validators = validators or [] validators.append(validate_set) super(SetField, self).__init__(label=label, validators=validators, **kwargs)
def __init__(self, *args, validators=[], **kwargs): validators.append(EmptyOrValidatorValidator(wtforms.validators.Regexp('#([0-9a-f]{6})'))) super().__init__(*args, validators=validators, **kwargs) self.widget = ColorWidget() self.data_default = {'red': None, 'green': None, 'blue': None} self.data = self.data_default