From ac2dd3aa5bed561e0ca708466d2a991207c83b54 Mon Sep 17 00:00:00 2001 From: Kevin Deldycke Date: Wed, 22 Jan 2014 11:53:34 +0100 Subject: [PATCH 1/5] Use validation method to normalize Boolean values. --- cqlengine/columns.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cqlengine/columns.py b/cqlengine/columns.py index 4ba74273..f899f92a 100644 --- a/cqlengine/columns.py +++ b/cqlengine/columns.py @@ -442,11 +442,15 @@ class Boolean(Column): def __str__(self): return 'true' if self.value else 'false' - def to_python(self, value): + def validate(self, value): + """ Always returns a Python boolean. """ return bool(value) + def to_python(self, value): + return self.validate(value) + def to_database(self, value): - return self.Quoter(bool(value)) + return self.Quoter(self.validate(value)) class Float(Column): From 3d2268c6e8f94d7aa19699efb205643661ddb547 Mon Sep 17 00:00:00 2001 From: Kevin Deldycke Date: Wed, 22 Jan 2014 11:54:27 +0100 Subject: [PATCH 2/5] Unquote boolean values when normalizing. --- cqlengine/columns.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cqlengine/columns.py b/cqlengine/columns.py index f899f92a..2452a91c 100644 --- a/cqlengine/columns.py +++ b/cqlengine/columns.py @@ -444,6 +444,8 @@ class Boolean(Column): def validate(self, value): """ Always returns a Python boolean. """ + if isinstance(value, self.Quoter): + value = value.value return bool(value) def to_python(self, value): From b768b6e6b86f7e790f136c5fa83a9b29352a9b0f Mon Sep 17 00:00:00 2001 From: Kevin Deldycke Date: Wed, 22 Jan 2014 11:56:57 +0100 Subject: [PATCH 3/5] Update changelog. --- changelog | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index a908f720..1284fa60 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,10 @@ CHANGELOG -0.11.0 (in progress) +0.11.1 (in progress) + +* Normalize and unquote boolean values. + +0.11.0 * support for USING TIMESTAMP via a .timestamp(timedelta(seconds=30)) syntax - allows for long, timedelta, and datetime From af8662d87efd37b06f0da0b30b06eeeb03711f9c Mon Sep 17 00:00:00 2001 From: Kevin Deldycke Date: Wed, 22 Jan 2014 11:57:51 +0100 Subject: [PATCH 4/5] Add myself to the list of contributors. --- AUTHORS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index a220cb26..70cdaeaf 100644 --- a/AUTHORS +++ b/AUTHORS @@ -6,5 +6,5 @@ Jon Haddad CONTRIBUTORS Eric Scrivner - test environment, connection pooling - +Kevin Deldycke From 74bc38e7e73f3a4a03203052c1fc0b5dc2f3f8d3 Mon Sep 17 00:00:00 2001 From: Kevin Deldycke Date: Thu, 23 Jan 2014 10:46:49 +0100 Subject: [PATCH 5/5] Unit test boolean value quoting. --- cqlengine/tests/columns/test_value_io.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cqlengine/tests/columns/test_value_io.py b/cqlengine/tests/columns/test_value_io.py index 54d8f5d5..c4958f40 100644 --- a/cqlengine/tests/columns/test_value_io.py +++ b/cqlengine/tests/columns/test_value_io.py @@ -144,6 +144,19 @@ class TestBooleanIO(BaseColumnIOTest): pkey_val = True data_val = False + def comparator_converter(self, val): + return val.value if isinstance(val, columns.Boolean.Quoter) else val + +class TestBooleanQuoter(BaseColumnIOTest): + + column = columns.Boolean + + pkey_val = True + data_val = columns.Boolean.Quoter(False) + + def comparator_converter(self, val): + return val.value if isinstance(val, columns.Boolean.Quoter) else val + class TestFloatIO(BaseColumnIOTest): column = columns.Float