Python Protobuf:如何将gRPC响应传入另一个请求的spec字段
解决Python gRPC/Protobuf中UpdateClusterRequest.spec字段赋值问题
问题原因
根据你的Proto定义,UpdateClusterRequest.spec是ClusterTemplate类型,而template_response.revisions[0].template正好是该类型的实例。你之前的尝试都用了不匹配的方法:
extend仅适用于**重复字段(repeated)**的添加操作,不适合单个消息字段- Python Protobuf不支持直接用
=给消息字段赋值,需要用专门的合并方法 MergeFromString需要传入序列化后的字节数据,而非消息对象本身
正确解决方案
使用Protobuf消息的MergeFrom()方法,将源消息的内容完整合并到目标字段中:
template_response = get_template_revisions(client_stub, payload_project_id, metadata_okta_token_and_env) grpc_logger.debug(template_response.revisions[0].template.app) request = app_pb2.UpdateClusterRequest() # 将template的内容合并到spec字段 request.spec.MergeFrom(template_response.revisions[0].template) response = client_stub.get_grpc_app_stub(grpc_stub_method).UpdateCluster(request=request, metadata=metadata_okta_token_and_env)
补充说明
如果template_response.revisions[0].template是完整的ClusterTemplate实例,MergeFrom()会自动将其所有嵌套字段(包括app下的子字段)完整复制到request.spec中,完全满足你的需求。
内容的提问来源于stack exchange,提问作者New2Python
相关产品推荐
相关产品推荐

