summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-17 23:21:43 +0000
committerGerrit Code Review <review@openstack.org>2013-06-17 23:21:43 +0000
commitb57b6d76328e22db56600e02ae531b6f68ad9f53 (patch)
treebbf8b570e33596620205bb3bce17d27274ce98ff
parent73dfbeba11aab5337b72f2af9515eed5dae093e9 (diff)
parente91c3d141c957485dcb66c73e84b41b775e4268b (diff)
downloadnova-b57b6d76328e22db56600e02ae531b6f68ad9f53.tar.gz
nova-b57b6d76328e22db56600e02ae531b6f68ad9f53.tar.xz
nova-b57b6d76328e22db56600e02ae531b6f68ad9f53.zip
Merge "Make NovaObject support extra attributes in items()"
-rw-r--r--nova/objects/base.py6
-rw-r--r--nova/objects/instance.py2
-rw-r--r--nova/tests/objects/test_instance.py9
3 files changed, 15 insertions, 2 deletions
diff --git a/nova/objects/base.py b/nova/objects/base.py
index ec1ada6aa..398e70ce9 100644
--- a/nova/objects/base.py
+++ b/nova/objects/base.py
@@ -182,6 +182,7 @@ class NovaObject(object):
'deleted_at': obj_utils.datetime_or_str_or_none,
'deleted': bool,
}
+ obj_extra_fields = []
def __init__(self):
self._changed_fields = set()
@@ -330,8 +331,9 @@ class NovaObject(object):
NOTE(danms): May be removed in the future.
"""
- for name in self.fields:
- if hasattr(self, get_attrname(name)):
+ for name in self.fields.keys() + self.obj_extra_fields:
+ if (hasattr(self, get_attrname(name)) or
+ name in self.obj_extra_fields):
yield name, getattr(self, name)
items = lambda self: list(self.iteritems())
diff --git a/nova/objects/instance.py b/nova/objects/instance.py
index cd08c4c4f..c1b765f29 100644
--- a/nova/objects/instance.py
+++ b/nova/objects/instance.py
@@ -110,6 +110,8 @@ class Instance(base.NovaObject):
}
+ obj_extra_fields = ['name']
+
@property
def name(self):
try:
diff --git a/nova/tests/objects/test_instance.py b/nova/tests/objects/test_instance.py
index efd0bcdf9..fa0a536fd 100644
--- a/nova/tests/objects/test_instance.py
+++ b/nova/tests/objects/test_instance.py
@@ -213,6 +213,15 @@ class _TestInstanceObject(object):
inst.info_cache.network_info = 'bar'
inst.save()
+ def test_iteritems_with_extra_attrs(self):
+ self.stubs.Set(instance.Instance, 'name', 'foo')
+ inst = instance.Instance()
+ inst.uuid = 'fake-uuid'
+ self.assertEqual(inst.items(),
+ {'uuid': 'fake-uuid',
+ 'name': 'foo',
+ }.items())
+
class TestInstanceObject(test_objects._LocalTest,
_TestInstanceObject):