mot*_*ail 5 python google-cloud-platform
我正在尝试使用 UpdateProjectRequest 从项目中删除标签。
它说它需要一个“update_mask”,但我不知道如何创建这个掩码。它是 google.protobuf.field_mask_pb2.FieldMask
我尝试过的是:
from google.cloud import resourcemanager_v3
from google.protobuf import field_mask_pb2
def sample_update_project(project_id):
client = resourcemanager_v3.ProjectsClient()
update_mask = field_mask_pb2.FieldMask(paths=["labels.newkey:None"])
resourcemanager_v3.Project=f"projects/{project_id}"
operation = client.update_project(update_mask=update_mask)
print("Waiting for operation to complete...")
response = operation.result()
print(response)
Run Code Online (Sandbox Code Playgroud)
谢谢
正如您已经提到的,当您想要删除所有标签时,需要对标签字段进行更新掩码。查看本文档,请注意,如果提供了请求,则不应设置该请求。此外,您还会找到一个可能对您有帮助的代码示例。
此外,filed_mask_pb2如果您要使用FieldMask 更新数据,则应该导入,如下所示:
from google.protobuf import field_mask_pb2
Run Code Online (Sandbox Code Playgroud)
考虑到主要问题,可以使用以下两种方法之一来删除标签:
使用读取-修改-写入模式完全删除标签,这会同时删除键和值。为此,请执行以下步骤:
要保留密钥并删除值,请将值设置为null,但检查您的代码,您当前正在使用None。
另外,请考虑以下文档:创建和管理标签和方法:projects.patch
更新
再次处理您的主要问题,这是一个已经过测试的代码,可以根据您的要求删除标签:
import googleapiclient.discovery
def sample_update_project_old(project_id):
manager = googleapiclient.discovery.build('cloudresourcemanager', 'v1')
request = manager.projects().get(projectId=project_id)
project = request.execute()
del project['labels']['key'] # replace 'key' with your actual key value
request = manager.projects().update(projectId=project_id, body=project)
project = request.execute()
sample_update_project_old("your-project-id")
Run Code Online (Sandbox Code Playgroud)