[SQL-CVS] r546 - in trunk/SQLObject: sqlobject tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2005-01-15 11:55:39
|
Author: phd Date: 2005-01-15 11:55:33 +0000 (Sat, 15 Jan 2005) New Revision: 546 Modified: trunk/SQLObject/sqlobject/col.py trunk/SQLObject/tests/test_sqlobject.py Log: Added FloatValidator and a test for it. Modified: trunk/SQLObject/sqlobject/col.py =================================================================== --- trunk/SQLObject/sqlobject/col.py 2005-01-14 17:17:46 UTC (rev 545) +++ trunk/SQLObject/sqlobject/col.py 2005-01-15 11:55:33 UTC (rev 546) @@ -528,13 +528,44 @@ class BoolCol(Col): baseClass = SOBoolCol + +class FloatValidator(validators.Validator): + + def fromPython(self, value, state): + if value is None: + return None + if not isinstance(value, (int, long, float, sqlbuilder.SQLExpression)): + raise validators.InvalidField("expected a float in the FloatCol '%s', got %s instead" % \ + (self.name, type(value)), value, state) + return value + + def toPython(self, value, state): + if value is None: + return None + if isinstance(value, (int, long, float, sqlbuilder.SQLExpression)): + return value + try: + return float(value) + except: + raise validators.InvalidField("expected a float in the FloatCol '%s', got %s instead" % \ + (self.name, type(value)), value, state) + class SOFloatCol(SOCol): + validatorClass = FloatValidator # can be overriden in descendants # 3-03 @@: support precision (e.g., DECIMAL) + def __init__(self, **kw): + SOCol.__init__(self, **kw) + self.validator = validators.All.join(self.createValidator(), self.validator) + def autoConstraints(self): return [consts.isFloat] + def createValidator(self): + """Create a validator for the column. Can be overriden in descendants.""" + return self.validatorClass(name=self.name) + def _sqlType(self): return 'FLOAT' @@ -544,6 +575,7 @@ class FloatCol(Col): baseClass = SOFloatCol + class SOKeyCol(SOCol): # 3-03 @@: this should have a simplified constructor Modified: trunk/SQLObject/tests/test_sqlobject.py =================================================================== --- trunk/SQLObject/tests/test_sqlobject.py 2005-01-14 17:17:46 UTC (rev 545) +++ trunk/SQLObject/tests/test_sqlobject.py 2005-01-15 11:55:33 UTC (rev 546) @@ -890,6 +890,7 @@ name = StringCol(validator=validators.PlainText(), default='x', dbName='name_col') name2 = StringCol(validator=validators.ConfirmType(str), default='y') name3 = IntCol(validator=validators.Wrapper(fromPython=int), default=100) + name4 = FloatCol(default=2.718) class ValidationTest(SQLObjectTest): @@ -905,6 +906,10 @@ t = SOValidation(name2='hey') self.assertRaises(validators.InvalidField, setattr, t, 'name2', 1) + self.assertRaises(validators.InvalidField, setattr, t, + 'name3', '1') + self.assertRaises(validators.InvalidField, setattr, t, + 'name4', '1') t.name2 = 'you' def testWrapType(self): |