summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-06-29 08:37:08 +0000
committerGerrit Code Review <review@openstack.org>2014-06-29 08:37:08 +0000
commit9c423b43e6096c533f6bf442be93da6b635af0dd (patch)
tree7afc852f8aadcf5258f5b2797d22a6a35792613e
parent5e2e96aca049cde2717441a5a4ea8027d9eec52a (diff)
parent167ffb66f40b86ab9f8880543d5346b52a51ac9e (diff)
downloadoslo-db-9c423b43e6096c533f6bf442be93da6b635af0dd.tar.gz
Merge "Add __contains__ to ModelBase to fully behave like a dict"
-rw-r--r--oslo/db/sqlalchemy/models.py3
-rw-r--r--tests/sqlalchemy/test_models.py11
2 files changed, 14 insertions, 0 deletions
diff --git a/oslo/db/sqlalchemy/models.py b/oslo/db/sqlalchemy/models.py
index f30e9e3..682211d 100644
--- a/oslo/db/sqlalchemy/models.py
+++ b/oslo/db/sqlalchemy/models.py
@@ -54,6 +54,9 @@ class ModelBase(six.Iterator):
def __getitem__(self, key):
return getattr(self, key)
+ def __contains__(self, key):
+ return hasattr(self, key)
+
def get(self, key, default=None):
return getattr(self, key, default)
diff --git a/tests/sqlalchemy/test_models.py b/tests/sqlalchemy/test_models.py
index 8c23da8..ea15532 100644
--- a/tests/sqlalchemy/test_models.py
+++ b/tests/sqlalchemy/test_models.py
@@ -30,6 +30,7 @@ class ModelBaseTest(test_base.DbTestCase):
def test_modelbase_has_dict_methods(self):
dict_methods = ('__getitem__',
'__setitem__',
+ '__contains__',
'__iter__',
'get',
'next',
@@ -51,6 +52,16 @@ class ModelBaseTest(test_base.DbTestCase):
for key in h.keys():
self.assertEqual(mb[key], h[key])
+ def test_modelbase_contains(self):
+ mb = models.ModelBase()
+ h = {'a': '1', 'b': '2'}
+ mb.update(h)
+ for key in h.keys():
+ # Test 'in' syntax (instead of using .assertIn)
+ self.assertTrue(key in mb)
+
+ self.assertFalse('non-existent-key' in mb)
+
def test_modelbase_iteritems(self):
self.skipTest("Requires DB")
mb = models.ModelBase()