airflow.providers.google.cloud.utils.field_sanitizer

用於透過 Google Cloud API 傳送的 body 欄位之清理器。

此清理器會移除 body 中指定的欄位。

背景

在某些情況下,當 Google Cloud 運算需要修改現有資源(例如執行個體或執行個體範本)時,我們需要清理透過 Google Cloud API 傳回的資源 body。這種情況發生在我們首先從 Google Cloud 擷取資訊,修改 body,然後更新現有資源或使用修改後的 body 建立新資源時。通常,當您從 Google Cloud 擷取資源時,會取得一些額外的欄位,這些欄位是僅供輸出的,如果我們想要將 body 用作後續建立/插入類型運算的輸入,則需要刪除這些欄位。

欄位規格

欄位規格是一個字串陣列,表示要移除的欄位名稱。欄位可以是直接欄位名稱(從 body 中移除),也可以是要刪除的路徑完整規格 - 以「.」分隔。

>>> 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

根據規格清理 body。

exception airflow.providers.google.cloud.utils.field_sanitizer.GcpFieldSanitizerException[原始碼]

基底類別: airflow.exceptions.AirflowException

當清理器在路徑中找到非預期的欄位類型(字典或陣列以外)時擲出。

class airflow.providers.google.cloud.utils.field_sanitizer.GcpBodyFieldSanitizer(sanitize_specs)[原始碼]

基底類別: airflow.utils.log.logging_mixin.LoggingMixin

根據規格清理 body。

參數

sanitize_specs (list[str]) – 字串陣列,指定要移除的欄位

sanitize(body)[原始碼]

根據規格清理 body。

此條目是否有幫助?