Example #1
0
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)
Example #2
0
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)
Example #3
0
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.'
            }))
Example #4
0
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.',
Example #5
0
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')
Example #6
0
        <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'
    })
}
Example #7
0
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
Example #8
0
""")

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',
Example #9
0
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
Example #10
0
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',