From 3ee88ecf93ffaad8eb753021b1e811a27c8d513f Mon Sep 17 00:00:00 2001 From: Blake Eggleston Date: Wed, 14 Aug 2013 15:48:24 -0700 Subject: [PATCH] setting counter column default instantiation value to 0 (not None) --- cqlengine/columns.py | 9 +++++++++ cqlengine/tests/columns/test_counter_column.py | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cqlengine/columns.py b/cqlengine/columns.py index 56221c2d..9940f1aa 100644 --- a/cqlengine/columns.py +++ b/cqlengine/columns.py @@ -246,9 +246,18 @@ class Integer(Column): return self.validate(value) +class CounterValueManager(BaseValueManager): + def __init__(self, instance, column, value): + super(CounterValueManager, self).__init__(instance, column, value) + self.value = self.value or 0 + self.previous_value = self.previous_value or 0 + + class Counter(Integer): db_type = 'counter' + value_manager = CounterValueManager + def __init__(self, index=False, db_field=None, diff --git a/cqlengine/tests/columns/test_counter_column.py b/cqlengine/tests/columns/test_counter_column.py index f92cb4f4..f8dc0096 100644 --- a/cqlengine/tests/columns/test_counter_column.py +++ b/cqlengine/tests/columns/test_counter_column.py @@ -59,6 +59,15 @@ class TestCounterColumn(BaseCassEngTestCase): def test_update_from_none(self): """ Tests that updating from None uses a create statement """ + instance = TestCounterModel() + instance.counter += 1 + instance.save() + + new = TestCounterModel.get(partition=instance.partition) + assert new.counter == 1 + + def test_new_instance_defaults_to_zero(self): + """ Tests that instantiating a new model instance will set the counter column to zero """ + instance = TestCounterModel() + assert instance.counter == 0 - def test_multiple_inserts(self): - """ Tests inserting over existing data works as expected """