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當淨化器在路徑中發現非預期的欄位型別(字典或陣列以外)時丟擲。