Merge "objects: Remove tenant_id from to_dict() when project_id is not set."
This commit is contained in:
commit
57364544aa
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue