airflow.providers.google.cloud.utils.field_sanitizer¶
用于净化通过 Google Cloud API 发送的请求体字段的净化器。
该净化器会移除请求体中指定的字段。
背景¶
在某些情况下,当 Google Cloud 操作需要修改现有资源(例如实例或实例模板)时,我们需要净化通过 Google Cloud API 返回的资源的请求体。这种情况发生在我们需要先从 Google Cloud 检索信息,然后修改请求体,再更新现有资源或使用修改后的请求体创建新资源时。通常,从 Google Cloud 检索资源时会获得一些额外的仅输出(Output-only)字段,如果想将该请求体用作后续创建/插入类型操作的输入,就需要删除这些字段。
字段规范¶
字段规范是一个字符串数组,表示要移除的字段名称。字段可以是直接从请求体中移除的字段名称,也可以是要删除的路径的完整规范,用 ‘.’ 分隔。
>>> FIELDS_TO_SANITIZE = [
>>> "kind",
>>> "properties.disks.kind",
>>> "properties.metadata.kind",
>>>]
>>> body = {
>>> "kind": "compute#instanceTemplate",
>>> "name": "instance",
>>> "properties": {
>>> "disks": [
>>> {
>>> "name": "a",
>>> "kind": "compute#attachedDisk",
>>> "type": "PERSISTENT",
>>> "mode": "READ_WRITE",
>>> },
>>> {
>>> "name": "b",
>>> "kind": "compute#attachedDisk",
>>> "type": "PERSISTENT",
>>> "mode": "READ_WRITE",
>>> }
>>> ],
>>> "metadata": {
>>> "kind": "compute#metadata",
>>> "fingerprint": "GDPUYxlwHe4="
>>> },
>>> }
>>> }
>>> sanitizer = GcpBodyFieldSanitizer(FIELDS_TO_SANITIZE)
>>> sanitizer.sanitize(body)
>>> json.dumps(body, indent=2)
{
"name": "instance",
"properties": {
"disks": [
{
"name": "a",
"type": "PERSISTENT",
"mode": "READ_WRITE",
},
{
"name": "b",
"type": "PERSISTENT",
"mode": "READ_WRITE",
}
],
"metadata": {
"fingerprint": "GDPUYxlwHe4="
},
}
}
请注意,路径的组成部分可以是字典或字典数组。如果是字典,后续组成部分是字段的键名;如果是数组,净化器会遍历数组中的所有字典,并在数组的所有元素中查找组成部分。
异常¶
当净化器在路径中发现非预期的字段类型(字典或数组以外)时抛出。 |
类¶
根据规范净化请求体。 |
模块内容¶
- 异常 airflow.providers.google.cloud.utils.field_sanitizer.GcpFieldSanitizerException[source]¶
Bases:
airflow.exceptions.AirflowException
当净化器在路径中发现非预期的字段类型(字典或数组以外)时抛出。