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="
},
}
}
请注意,路径的组成部分可以是字典或字典数组。 如果它们是字典,则后续的组成部分名称是字段的键,如果是数组,则清理器会迭代数组中的所有字典,并在数组的所有元素中搜索组成部分。
模块内容¶
类¶
根据规范清理正文。 |
- exception airflow.providers.google.cloud.utils.field_sanitizer.GcpFieldSanitizerException[source]¶
基类:
airflow.exceptions.AirflowException
当清理器在路径中发现意外的字段类型(不是字典或数组)时抛出。