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):
|