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="
        },
    }
}

请注意,路径的组成部分可以是字典或字典数组。如果是字典,后续组成部分是字段的键名;如果是数组,净化器会遍历数组中的所有字典,并在数组的所有元素中查找组成部分。

异常

GcpFieldSanitizerException

当净化器在路径中发现非预期的字段类型(字典或数组以外)时抛出。

GcpBodyFieldSanitizer

根据规范净化请求体。

模块内容

异常 airflow.providers.google.cloud.utils.field_sanitizer.GcpFieldSanitizerException[source]

Bases: airflow.exceptions.AirflowException

当净化器在路径中发现非预期的字段类型(字典或数组以外)时抛出。

airflow.providers.google.cloud.utils.field_sanitizer.GcpBodyFieldSanitizer(sanitize_specs)[source]

Bases: airflow.utils.log.logging_mixin.LoggingMixin

根据规范净化请求体。

参数:

sanitize_specs (list[str]) – 指定要移除哪些字段的字符串数组

sanitize(body)[source]

根据规范净化请求体。

此条目是否有用?