Author: phd
Date: 2010-07-12 08:52:52 -0600 (Mon, 12 Jul 2010)
New Revision: 4202
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/sqlobject/col.py
SQLObject/trunk/sqlobject/tests/test_validation.py
Log:
BoolCol accepts an instance of a class that implements __nonzero__.
Modified: SQLObject/trunk/docs/News.txt
===================================================================
--- SQLObject/trunk/docs/News.txt 2010-07-12 14:47:39 UTC (rev 4201)
+++ SQLObject/trunk/docs/News.txt 2010-07-12 14:52:52 UTC (rev 4202)
@@ -17,10 +17,11 @@
pickled and unpickled.
* Validators became stricter: StringCol and UnicodeCol now accept only str
- or unicode; BoolCol accepts only bool or int; IntCol accepts int, long or
- an instance of a class that implements __int__ or __long__; FloatCol
- accepts float, int, long or an instance of a class that implements
- __float__, __int__ or __long__.
+ or unicode; BoolCol accepts only bool or int or an instance of a class
+ that implements __nonzero__; IntCol accepts int, long or an instance of a
+ class that implements __int__ or __long__; FloatCol accepts float, int,
+ long or an instance of a class that implements __float__, __int__ or
+ __long__.
* Added a connection class for rdbhost.com (commercial Postgres-over-Web
service).
Modified: SQLObject/trunk/sqlobject/col.py
===================================================================
--- SQLObject/trunk/sqlobject/col.py 2010-07-12 14:47:39 UTC (rev 4201)
+++ SQLObject/trunk/sqlobject/col.py 2010-07-12 14:52:52 UTC (rev 4202)
@@ -662,6 +662,8 @@
return value
if isinstance(value, (int, long)):
return bool(value)
+ if hasattr(value, '__nonzero__'):
+ return bool(value)
raise validators.Invalid("expected a bool or an int in the BoolCol '%s', got %s %r instead" % \
(self.name, type(value), value), value, state)
Modified: SQLObject/trunk/sqlobject/tests/test_validation.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_validation.py 2010-07-12 14:47:39 UTC (rev 4201)
+++ SQLObject/trunk/sqlobject/tests/test_validation.py 2010-07-12 14:52:52 UTC (rev 4202)
@@ -13,6 +13,7 @@
name3 = IntCol(validator=validators.Wrapper(fromPython=int), default=100)
name4 = FloatCol(default=2.718)
name5 = PickleCol(default=None)
+ name6 = BoolCol(default=None)
class TestValidation:
@@ -21,24 +22,22 @@
def test_validate(self):
t = SOValidation(name='hey')
- raises(validators.Invalid, setattr, t,
- 'name', '!!!')
+ raises(validators.Invalid, setattr, t, 'name', '!!!')
t.name = 'you'
+ assert t.name == 'you'
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')
+ raises(validators.Invalid, setattr, t, 'name2', 1)
+ raises(validators.Invalid, setattr, t, 'name3', '1')
+ raises(validators.Invalid, setattr, t, 'name4', '1')
+ raises(validators.Invalid, setattr, t, 'name6', '1')
t.name2 = 'you'
+ assert t.name2 == 'you'
def test_wrapType(self):
t = SOValidation(name3=1)
- raises(validators.Invalid, setattr, t,
- 'name3', 'x')
+ raises(validators.Invalid, setattr, t, 'name3', 'x')
t.name3 = 1L
assert t.name3 == 1
t.name3 = 0
|