def validate_str(): str_validator = Validator(str, { C.islower(): "String must be lower", length(C) >= 4: "String is too short", C[-1].upper() == 'T': "Last char must be 'T'" }) for s in "Lorem ipsum dolor sit amet consectetur adipiscing elit".split(): try: str_validator.validate(s) except ValidationError as e: print("%-20sFAIL: %s" % (s, e.message)) else: print("%-20sOK" % s)
def validate_str(): str_validator = Validator( str, { C.islower(): "String must be lower", length(C) >= 4: "String is too short", C[-1].upper() == 'T': "Last char must be 'T'" }) for s in "Lorem ipsum dolor sit amet consectetur adipiscing elit".split(): try: str_validator.validate(s) except ValidationError as e: print("%-20sFAIL: %s" % (s, e.message)) else: print("%-20sOK" % s)
class MyForm(Form): number = IntegerField('Even integer', [Con(C % 2 == 0, 'Integer must be even.')]) date = DateField( 'Date in future [DD-MM-YYYY]', [Con(lambda date: date > date.today(), 'Date must be in future.')], format="%d-%m-%Y") first_name = TextField('First name', [validators.required(), name_validator]) last_name = TextField('Last name', [validators.required(), name_validator]) zip_code = TextField( 'Zip Code', Validator( striped_str, { length(C) == len('XX-XXX'): 'zip code must be XX-XXX', C[0:2].isdigit(): 'First part isn\'t a number.', C[2] == '-': 'prefix is not \'-\'.', C[3:5].isdigit(): 'Last part isn\'t a number.' }))
from firevalidator.utils import striped_str, length, in_range from firevalidator.wtform import Validator, C, Con from collections import defaultdict from flask import Flask, request from jinja2 import Template from datetime import date from wtforms import Form, DateField, IntegerField, TextField from wtforms import validators app = Flask(__name__) app.debug = True name_validator = Validator(striped_str, { length(C) <= 20: '{field.label} is too big.', lambda s: ' ' not in s: '{field.label} cannot contains spaces.' }) class MyForm(Form): number = IntegerField('Even integer', [Con(C % 2 == 0, 'Integer must be even.')]) date = DateField('Date in future [DD-MM-YYYY]', [Con(lambda date: date > date.today(), 'Date must be in future.')], format="%d-%m-%Y") first_name = TextField('First name', [validators.required(), name_validator]) last_name = TextField('Last name', [validators.required(), name_validator]) zip_code = TextField('Zip Code', Validator(striped_str, { length(C) == len('XX-XXX'): 'zip code must be XX-XXX', C[0:2].isdigit(): 'First part isn\'t a number.',
class TestValidator(TestCase): int_validator = Validator( int, { C >= 5: "Number is too small", C % 2: "Number must be odd", C < 10: "Number is too big", }) postal_validator = Validator( lambda s: s.split('-'), { length(C) == 2: 'Invalid format', C[0].isdigit(): 'First part isn\'t a number', C[1].isdigit(): 'Second part isn\'t a number', length(C[0]) == 2: 'First number hasn\'t equals two chars', length(C[1]) == 3: 'Second number hasn\'t equals three chars' }, lambda l: '-'.join(l)) weird_validator = Validator(int, float, str) def test_valid_int(self): for i in ('5', 5, 7.0, '9'): x = self.int_validator.validate(i) self.assertIsInstance(x, int) def test_invalid_int(self): with self.assertRaises(ValidationError) as cm: self.int_validator.validate('4') self.assertEqual(cm.exception.message, "Number is too small") with self.assertRaises(ValidationError) as cm: self.int_validator.validate('6') self.assertEqual(cm.exception.message, "Number must be odd") with self.assertRaises(ValidationError) as cm: self.int_validator.validate(11) self.assertEqual(cm.exception.message, "Number is too big") def test_valid_postal(self): for s in ('23-123', '05-333', '69-666'): x = self.postal_validator.validate(s) self.assertIsInstance(x, str) def test_invalid_postal(self): with self.assertRaises(ValidationError) as cm: self.postal_validator.validate('XX.123') self.assertEqual(cm.exception.message, 'Invalid format') with self.assertRaises(ValidationError) as cm: self.postal_validator.validate('XX-123') self.assertEqual(cm.exception.message, 'First part isn\'t a number') with self.assertRaises(ValidationError) as cm: self.postal_validator.validate('12-XXX') self.assertEqual(cm.exception.message, 'Second part isn\'t a number') with self.assertRaises(ValidationError) as cm: self.postal_validator.validate('123-123') self.assertEqual(cm.exception.message, 'First number hasn\'t equals two chars') with self.assertRaises(ValidationError) as cm: self.postal_validator.validate('12-12') self.assertEqual(cm.exception.message, 'Second number hasn\'t equals three chars') def test_valid_weird(self): self.assertEqual(self.weird_validator.validate(5), '5.0') self.assertEqual(self.weird_validator.validate(5.5), '5.0') self.assertEqual(self.weird_validator.validate('5'), '5.0') def test_invalid_weird(self): self.assertNotEqual(self.weird_validator.validate(5), 5.0) self.assertNotEqual(self.weird_validator.validate(5.5), '5')
<input type='submit' /> </form> </body> </html> """) validators = { 'int': Validator(int, { C % 2 == 0: 'Integer must be even', in_range(C, 0, 10): 'Integer must be between 0 and 10' }), 'date': Validator(lambda s: datetime.strptime(s, "%d-%m-%Y"), { lambda date: date > datetime.now(): 'Date must be in future' }), 'first_name': Validator(striped_str, { length(C) <= 20: 'First name is too big', C: 'First name is required', lambda s: ' ' not in s: 'First name cannot contains spaces' }), 'last_name': Validator(striped_str, { length(C) <= 20: 'Last name is too big', C: 'Last name is required', lambda s: ' 'not in s: 'Last name cannot contains spaces' }), 'zip_code': Validator(striped_str, { length(C) == len('XX-XXX'): 'zip code must be XX-XXX', C[0:2].isdigit(): 'First part isn\'t a number', C[2] == '-': 'prefix is not \'-\'', C[3:5].isdigit(): 'Last part isn\'t a number' }) }
from django.forms import IntegerField, Form, CharField, DateField from firevalidator.utils import striped_str, length, in_range from firevalidator.django import Validator, C, Con int_validators = [Con(C % 2 == 0, 'Integer must be even.')] date_validators = [Con(C > C.today(), 'Date must be in future.')] name_validators = Validator( striped_str, { lambda s: ' ' not in s: 'field cannot contains spaces.', length(C) <= 20: 'field is too big.', C[0].upper() == C[0]: 'first letter must be big.' }) zip_validators = Validator( striped_str, { length(C) == len('XX-XXX'): 'zip code must be XX-XXX', C[0:2].isdigit(): 'First part isn\'t a number.', C[2] == '-': 'prefix is not \'-\'.', C[3:5].isdigit(): 'Last part isn\'t a number.' }) class MyForm(Form): number = IntegerField(label='Even integer', validators=int_validators) date = DateField(label='Date in future [DD-MM-YYYY]', input_formats=['%d-%m-%Y'], validators=date_validators) first_name = CharField(label='First name') << name_validators last_name = CharField(label='Last name') << name_validators zip_code = CharField(label='Zip Code') << zip_validators
""") validators = { 'int': Validator( int, { C % 2 == 0: 'Integer must be even', in_range(C, 0, 10): 'Integer must be between 0 and 10' }), 'date': Validator(lambda s: datetime.strptime(s, "%d-%m-%Y"), {lambda date: date > datetime.now(): 'Date must be in future'}), 'first_name': Validator( striped_str, { length(C) <= 20: 'First name is too big', C: 'First name is required', lambda s: ' ' not in s: 'First name cannot contains spaces' }), 'last_name': Validator( striped_str, { length(C) <= 20: 'Last name is too big', C: 'Last name is required', lambda s: ' ' not in s: 'Last name cannot contains spaces' }), 'zip_code': Validator( striped_str, { length(C) == len('XX-XXX'): 'zip code must be XX-XXX', C[0:2].isdigit(): 'First part isn\'t a number',
from django.forms import IntegerField, Form, CharField, DateField from firevalidator.utils import striped_str, length, in_range from firevalidator.django import Validator, C, Con int_validators = [Con(C % 2 == 0, 'Integer must be even.')] date_validators = [Con(C > C.today(), 'Date must be in future.')] name_validators = Validator(striped_str, { lambda s: ' ' not in s: 'field cannot contains spaces.', length(C) <= 20: 'field is too big.', C[0].upper() == C[0]: 'first letter must be big.' }) zip_validators = Validator(striped_str, { length(C) == len('XX-XXX'): 'zip code must be XX-XXX', C[0:2].isdigit(): 'First part isn\'t a number.', C[2] == '-': 'prefix is not \'-\'.', C[3:5].isdigit(): 'Last part isn\'t a number.' }) class MyForm(Form): number = IntegerField(label='Even integer', validators=int_validators) date = DateField(label='Date in future [DD-MM-YYYY]', input_formats=['%d-%m-%Y'], validators=date_validators) first_name = CharField(label='First name') << name_validators last_name = CharField(label='Last name') << name_validators zip_code = CharField(label='Zip Code') << zip_validators
from firevalidator.utils import striped_str, length, in_range from firevalidator.wtform import Validator, C, Con from collections import defaultdict from flask import Flask, request from jinja2 import Template from datetime import date from wtforms import Form, DateField, IntegerField, TextField from wtforms import validators app = Flask(__name__) app.debug = True name_validator = Validator( striped_str, { length(C) <= 20: '{field.label} is too big.', lambda s: ' ' not in s: '{field.label} cannot contains spaces.' }) class MyForm(Form): number = IntegerField('Even integer', [Con(C % 2 == 0, 'Integer must be even.')]) date = DateField( 'Date in future [DD-MM-YYYY]', [Con(lambda date: date > date.today(), 'Date must be in future.')], format="%d-%m-%Y") first_name = TextField('First name', [validators.required(), name_validator]) last_name = TextField('Last name', [validators.required(), name_validator]) zip_code = TextField( 'Zip Code',