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]

根據規範淨化請求體。

此條目是否有用?