summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openstack/common/db/sqlalchemy/models.py7
-rw-r--r--tests/unit/db/sqlalchemy/test_models.py22
2 files changed, 27 insertions, 2 deletions
diff --git a/openstack/common/db/sqlalchemy/models.py b/openstack/common/db/sqlalchemy/models.py
index f674da2..e019eed 100644
--- a/openstack/common/db/sqlalchemy/models.py
+++ b/openstack/common/db/sqlalchemy/models.py
@@ -33,8 +33,6 @@ from openstack.common import timeutils
class ModelBase(object):
"""Base class for models."""
__table_initialized__ = False
- created_at = Column(DateTime, default=timeutils.utcnow)
- updated_at = Column(DateTime, onupdate=timeutils.utcnow)
metadata = None
def save(self, session=None):
@@ -92,6 +90,11 @@ class ModelBase(object):
return local.iteritems()
+class TimestampMixin(object):
+ created_at = Column(DateTime, default=timeutils.utcnow)
+ updated_at = Column(DateTime, onupdate=timeutils.utcnow)
+
+
class SoftDeleteMixin(object):
deleted_at = Column(DateTime)
deleted = Column(Integer, default=0)
diff --git a/tests/unit/db/sqlalchemy/test_models.py b/tests/unit/db/sqlalchemy/test_models.py
index cd1a664..04905a6 100644
--- a/tests/unit/db/sqlalchemy/test_models.py
+++ b/tests/unit/db/sqlalchemy/test_models.py
@@ -28,6 +28,7 @@ class ModelBaseTest(test_utils.BaseTestCase):
'get',
'next',
'update',
+ 'save',
'iteritems')
for method in dict_methods:
self.assertTrue(hasattr(models.ModelBase, method))
@@ -70,3 +71,24 @@ class ModelBaseTest(test_utils.BaseTestCase):
found_items += 1
self.assertEqual(min_items, found_items)
+
+
+class TimestampMixinTest(test_utils.BaseTestCase):
+
+ def test_timestampmixin_attr(self):
+
+ class TestModel(models.ModelBase, models.TimestampMixin):
+ pass
+
+ dict_methods = ('__getitem__',
+ '__setitem__',
+ '__iter__',
+ 'get',
+ 'next',
+ 'update',
+ 'save',
+ 'iteritems',
+ 'created_at',
+ 'updated_at')
+ for method in dict_methods:
+ self.assertTrue(hasattr(TestModel, method))