diff --git a/agate/data_types/number.py b/agate/data_types/number.py index d5fdc158..9c4c9328 100644 --- a/agate/data_types/number.py +++ b/agate/data_types/number.py @@ -70,6 +70,10 @@ def cast(self, d): return Decimal(d) elif t is float: return Decimal(repr(d)) + elif d == False: + return Decimal(0) + elif d == True: + return Decimal(1) elif not isinstance(d, six.string_types): raise CastError('Can not parse value "%s" as Decimal.' % d) diff --git a/tests/test_data_types.py b/tests/test_data_types.py index ab0c7de7..3d05033c 100644 --- a/tests/test_data_types.py +++ b/tests/test_data_types.py @@ -124,7 +124,7 @@ def setUp(self): def test_test(self): self.assertEqual(self.type.test(None), True) self.assertEqual(self.type.test('N/A'), True) - self.assertEqual(self.type.test(True), False) + self.assertEqual(self.type.test(True), True) self.assertEqual(self.type.test('True'), False) self.assertEqual(self.type.test(1), True) self.assertEqual(self.type.test(Decimal('1')), True) @@ -156,6 +156,11 @@ def test_cast_long(self): self.assertEqual(self.type.test(long('141414')), True) self.assertEqual(self.type.cast(long('141414')), Decimal('141414')) + def test_boolean_cast(self): + values = (True, False) + casted = tuple(self.type.cast(v) for v in values) + self.assertSequenceEqual(casted, (Decimal('1'), Decimal('0'))) + def test_currency_cast(self): values = ('$2.70', '-$0.70', u'€14', u'50¢', u'-75¢', u'-$1,287') casted = tuple(self.type.cast(v) for v in values)