airflow.providers.google.cloud.utils.field_sanitizer

通过 Google Cloud API 发送的正文字段的清理器。

清理器从正文中删除指定的字段。

背景

在某些情况下,当 Google Cloud 操作需要修改现有资源(例如实例或实例模板)时,我们需要清理通过 Google Cloud API 返回的资源正文。这种情况发生在我们首先从 Google Cloud 检索信息,修改正文,然后更新现有资源或使用修改后的正文创建新资源时。通常,当你从 Google Cloud 检索资源时,你会得到一些额外的字段,这些字段是只输出的,如果我们想将正文用作后续创建/插入类型操作的输入,我们需要删除这些字段。

字段规范

字段规范是一个字符串数组,表示要删除的字段的名称。该字段可以是直接从正文中删除的字段名称,也可以是要删除的完整路径规范 - 用“.”分隔。

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

请注意,路径的组成部分可以是字典或字典数组。 如果它们是字典,则后续的组成部分名称是字段的键,如果是数组,则清理器会迭代数组中的所有字典,并在数组的所有元素中搜索组成部分。

模块内容

GcpBodyFieldSanitizer

根据规范清理正文。

exception airflow.providers.google.cloud.utils.field_sanitizer.GcpFieldSanitizerException[source]

基类: airflow.exceptions.AirflowException

当清理器在路径中发现意外的字段类型(不是字典或数组)时抛出。

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

基类: airflow.utils.log.logging_mixin.LoggingMixin

根据规范清理正文。

参数

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

sanitize(body)[source]

根据规范清理正文。

这个条目有帮助吗?