Merge "objects: Remove tenant_id from to_dict() when project_id is not set."

This commit is contained in:
Jenkins 2016-10-21 16:54:16 +00:00 committed by Gerrit Code Review
commit 57364544aa
2 changed files with 18 additions and 1 deletions

View File

@ -150,6 +150,10 @@ class NeutronObject(obj_base.VersionedObject,
# is included in self.items()
if name in self.fields and name not in self.synthetic_fields:
value = self.fields[name].to_primitive(self, name, value)
if name == 'tenant_id':
if ('project_id' in self.fields and
not self.obj_attr_is_set('project_id')):
continue
dict_[name] = value
for field_name, value in self._synthetic_fields_items():
field = self.fields[field_name]
@ -252,7 +256,8 @@ class DeclarativeObject(abc.ABCMeta):
obj_extra_fields_set = set(cls.obj_extra_fields)
obj_extra_fields_set.add('tenant_id')
cls.obj_extra_fields = list(obj_extra_fields_set)
setattr(cls, 'tenant_id', property(lambda x: x.project_id))
setattr(cls, 'tenant_id',
property(lambda x: x.get('project_id', None)))
fields_no_update_set = set(cls.fields_no_update)
for base in itertools.chain([cls], bases):

View File

@ -809,6 +809,18 @@ class BaseObjectIfaceTestCase(_BaseObjectTestCase, test_base.BaseTestCase):
field = obj.fields[k]
self.assertEqual(v, field.to_primitive(obj, k, getattr(obj, k)))
def test_to_dict_with_unset_project_id(self):
if 'project_id' not in self._test_class.fields:
self.skipTest(
'Test class %r has no project_id in fields' % self._test_class)
obj_data = copy.copy(self.obj_fields[0])
obj_data.pop('project_id')
obj = self._test_class(self.context, **obj_data)
dict_ = obj.to_dict()
self.assertNotIn('project_id', dict_)
self.assertNotIn('tenant_id', dict_)
def test_fields_no_update(self):
obj = self._test_class(self.context, **self.obj_fields[0])
for field in self._test_class.fields_no_update: