From 3d8f2b6dd2140c1a4a1989f41cf95ebdc6635075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20CORBASSON?= Date: Mon, 3 Feb 2020 13:26:11 +0100 Subject: [PATCH 1/3] Allow the conversion of booleans to numbers --- agate/data_types/number.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/agate/data_types/number.py b/agate/data_types/number.py index d5fdc158..6da4e547 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 t == False: + return Decimal(0) + elif t == True: + return Decimal(1) elif not isinstance(d, six.string_types): raise CastError('Can not parse value "%s" as Decimal.' % d) From 0de77e6abcb90f714eef51abc593814f54878bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20CORBASSON?= Date: Wed, 5 Feb 2020 18:58:16 +0100 Subject: [PATCH 2/3] Fix typo --- agate/data_types/number.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agate/data_types/number.py b/agate/data_types/number.py index 6da4e547..9c4c9328 100644 --- a/agate/data_types/number.py +++ b/agate/data_types/number.py @@ -70,9 +70,9 @@ def cast(self, d): return Decimal(d) elif t is float: return Decimal(repr(d)) - elif t == False: + elif d == False: return Decimal(0) - elif t == True: + elif d == True: return Decimal(1) elif not isinstance(d, six.string_types): raise CastError('Can not parse value "%s" as Decimal.' % d) From c0ada4fd3f6316f4464843f1a3ffe52b493d33ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20CORBASSON?= Date: Wed, 5 Feb 2020 19:00:24 +0100 Subject: [PATCH 3/3] Add a test for agate.Number().cast(bool) --- tests/test_data_types.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_data_types.py b/tests/test_data_types.py index 2a51bc42..032cc9dc 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)