def obj_to_primitive(self, target_version=None, version_manifest=None): """Simple base-case dehydration. This calls to_primitive() for each item in fields. """ if target_version is None: target_version = self.VERSION if (vutils.convert_version_to_tuple(target_version) > vutils.convert_version_to_tuple(self.VERSION)): raise exception.InvalidTargetVersion(version=target_version) primitive = dict() for name, field in self.fields.items(): if self.obj_attr_is_set(name): primitive[name] = field.to_primitive(self, name, getattr(self, name)) # NOTE(danms): If we know we're being asked for a different version, # then do the compat step. However, even if we think we're not, # we may have sub-objects that need it, so if we have a manifest we # have to traverse this object just in case. Previously, we # required a parent version bump for any child, so the target # check was enough. if target_version != self.VERSION or version_manifest: self.obj_make_compatible_from_manifest(primitive, target_version, version_manifest) obj = { self._obj_primitive_key('name'): self.obj_name(), self._obj_primitive_key('namespace'): (self.OBJ_PROJECT_NAMESPACE), self._obj_primitive_key('version'): target_version, self._obj_primitive_key('data'): primitive } if self.obj_what_changed(): obj[self._obj_primitive_key('changes')] = list( self.obj_what_changed()) return obj
def test_serialize_entity_invalid_pin(self, mock_version): mock_version.side_effect = object_exception.InvalidTargetVersion( version='1.6') serializer = base.IronicObjectSerializer(is_server=True) obj = MyObj(self.context) self.assertRaises(object_exception.InvalidTargetVersion, serializer.serialize_entity, self.context, obj) mock_version.assert_called_once_with()