From 3ae0d633b26f9efc3a4fbd8da24d6737802d898e Mon Sep 17 00:00:00 2001 From: Greg Doermann Date: Thu, 31 Jul 2014 10:15:06 -0600 Subject: [PATCH] Changed DEFAULT_TTL to __default_ttl__ and added tests. --- cqlengine/models.py | 8 ++--- cqlengine/query.py | 2 +- cqlengine/tests/test_ttl.py | 62 +++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 5 deletions(-) diff --git a/cqlengine/models.py b/cqlengine/models.py index 66e956ad..09612b2e 100644 --- a/cqlengine/models.py +++ b/cqlengine/models.py @@ -258,7 +258,7 @@ class BaseModel(object): __queryset__ = ModelQuerySet __dmlquery__ = DMLQuery - #__ttl__ = None # this doesn't seem to be used + __default_ttl__ = None # default ttl value to use __consistency__ = None # can be set per query # Additional table properties @@ -278,7 +278,7 @@ class BaseModel(object): def __init__(self, **values): self._values = {} - self._ttl = getattr(self, 'DEFAULT_TTL', None) + self._ttl = self.__default_ttl__ self._timestamp = None for name, column in self._columns.items(): @@ -535,7 +535,7 @@ class BaseModel(object): v.reset_previous_value() self._is_persisted = True - self._ttl = getattr(self, 'DEFAULT_TTL', None) + self._ttl = self.__default_ttl__ self._timestamp = None return self @@ -573,7 +573,7 @@ class BaseModel(object): v.reset_previous_value() self._is_persisted = True - self._ttl = getattr(self, 'DEFAULT_TTL', None) + self._ttl = self.__default_ttl__ self._timestamp = None return self diff --git a/cqlengine/query.py b/cqlengine/query.py index f847b85b..0f039f93 100644 --- a/cqlengine/query.py +++ b/cqlengine/query.py @@ -219,7 +219,7 @@ class AbstractQuerySet(object): self._result_idx = None self._batch = None - self._ttl = getattr(self, 'DEFAULT_TTL', None) + self._ttl = getattr(model, '__default_ttl__', None) self._consistency = None self._timestamp = None diff --git a/cqlengine/tests/test_ttl.py b/cqlengine/tests/test_ttl.py index bb5e1bb4..66fa8334 100644 --- a/cqlengine/tests/test_ttl.py +++ b/cqlengine/tests/test_ttl.py @@ -27,6 +27,28 @@ class BaseTTLTest(BaseCassEngTestCase): drop_table(TestTTLModel) +class TestDefaultTTLModel(Model): + __keyspace__ = 'test' + __default_ttl__ = 20 + id = columns.UUID(primary_key=True, default=lambda:uuid4()) + count = columns.Integer() + text = columns.Text(required=False) + + +class BaseDefaultTTLTest(BaseCassEngTestCase): + + @classmethod + def setUpClass(cls): + super(BaseDefaultTTLTest, cls).setUpClass() + sync_table(TestDefaultTTLModel) + sync_table(TestTTLModel) + + @classmethod + def tearDownClass(cls): + super(BaseDefaultTTLTest, cls).tearDownClass() + drop_table(TestDefaultTTLModel) + drop_table(TestTTLModel) + class TTLQueryTests(BaseTTLTest): @@ -117,5 +139,45 @@ class TTLBlindUpdateTest(BaseTTLTest): self.assertIn("USING TTL", query) +class TTLDefaultTest(BaseDefaultTTLTest): + def test_default_ttl_not_set(self): + session = get_session() + o = TestTTLModel.create(text="some text") + tid = o.id + self.assertIsNone(o._ttl) + + with mock.patch.object(session, 'execute') as m: + TestTTLModel.objects(id=tid).update(text="aligators") + + query = m.call_args[0][0].query_string + self.assertNotIn("USING TTL", query) + + def test_default_ttl_set(self): + session = get_session() + o = TestDefaultTTLModel.create(text="some text on ttl") + tid = o.id + + self.assertEqual(o._ttl, TestDefaultTTLModel.__default_ttl__) + + with mock.patch.object(session, 'execute') as m: + TestDefaultTTLModel.objects(id=tid).update(text="aligators expired") + + query = m.call_args[0][0].query_string + self.assertIn("USING TTL", query) + + def test_override_default_ttl(self): + session = get_session() + o = TestDefaultTTLModel.create(text="some text on ttl") + tid = o.id + + self.assertEqual(o._ttl, TestDefaultTTLModel.__default_ttl__) + o.ttl(3600) + self.assertEqual(o._ttl, 3600) + + with mock.patch.object(session, 'execute') as m: + TestDefaultTTLModel.objects(id=tid).ttl(None).update(text="aligators expired") + + query = m.call_args[0][0].query_string + self.assertNotIn("USING TTL", query) \ No newline at end of file