Source code for sqlobject.tests.test_validation

from sqlobject import BoolCol, FloatCol, IntCol, PickleCol, SQLObject, \
    StringCol, UnicodeCol
from sqlobject.col import validators
from sqlobject.compat import PY2
from sqlobject.tests.dbtest import raises, setupClass

if not PY2:
    # alias for python 3 compatability
    long = int

########################################
# Validation/conversion
########################################


[docs]class SOTestValidator(validators.Validator):
[docs] def to_python(self, value, state): if value: self.save_value.append(value) return 1 return value
[docs] def from_python(self, value, state): if value: self.save_value.append(value) return 2 return value
validator1 = SOTestValidator(save_value=[]) validator2 = SOTestValidator(save_value=[])
[docs]class SOValidation(SQLObject): name = StringCol(validator=validators.PlainText(), default='x', dbName='name_col') name2 = StringCol(validator2=validators.ConfirmType(type=str), default='y') name3 = IntCol(validator=validators.Wrapper(fromPython=int), default=100) name4 = FloatCol(default=2.718) name5 = PickleCol(default=None) name6 = BoolCol(default=None) name7 = UnicodeCol(default=None) name8 = IntCol(default=None) name9 = IntCol(validator=validator1, validator2=validator2, default=0)
[docs]class SOValidationTest(object): def __init__(self, value): self.value = value
if PY2:
[docs] class SOValidationTestUnicode(SOValidationTest): def __unicode__(self): return self.value
[docs]class SOValidationTestInt(SOValidationTest): def __int__(self): return self.value
[docs]class SOValidationTestBool(SOValidationTest): def __nonzero__(self): return self.value __bool__ = __nonzero__
[docs]class SOValidationTestFloat(SOValidationTest): def __float__(self): return self.value
[docs]class TestValidation:
[docs] def setup_method(self, meth): setupClass(SOValidation)
[docs] def test_validate(self): t = SOValidation(name='hey') raises(validators.Invalid, setattr, t, 'name', '!!!') t.name = 'you' assert t.name == 'you'
[docs] def test_confirmType(self): t = SOValidation(name2='hey') raises(validators.Invalid, setattr, t, 'name2', 1) raises(validators.Invalid, setattr, t, 'name3', '1') raises(validators.Invalid, setattr, t, 'name4', '1') if t._connection.dbName != 'postgres' or \ t._connection.driver not in ('odbc', 'pyodbc', 'pypyodbc'): raises(validators.Invalid, setattr, t, 'name6', '1') raises(validators.Invalid, setattr, t, 'name7', 1) t.name2 = 'you' assert t.name2 == 'you' for name, cls, value in ( ('name4', SOValidationTestFloat, 1.1), ('name6', SOValidationTestBool, True), ('name8', SOValidationTestInt, 1)): setattr(t, name, cls(value)) assert getattr(t, name) == value if PY2: for name, cls, value in ( ('name7', SOValidationTestUnicode, u'test'),): setattr(t, name, cls(value)) assert getattr(t, name) == value
[docs] def test_wrapType(self): t = SOValidation(name3=1) raises(validators.Invalid, setattr, t, 'name3', 'x') t.name3 = long(1) assert t.name3 == 1 t.name3 = 0 assert t.name3 == 0
[docs] def test_emptyValue(self): t = SOValidation(name5={}) assert t.name5 == {}
[docs] def test_validator2(self): SOValidation(name9=1) SOValidation(name9=2) assert validator1.save_value == [2, 2, 2, 2, 2, 2] assert validator2.save_value == [1, 1, 1, 2, 1, 1]