如何在 json 模板中传递气流 ts_nodash

how to pass airflow ts_nodash in a json template

我需要一个来自 Ariflow dag 的 API 调用。

下面是我在代码中使用的示例json_string:

    def api_call_func(**context):
        source_file_name = context["dag_run"].conf["source_file_names"]
    json_data = { "filenames":[
                 {"FileName":[f'Source_credit_{{{{ ts_nodash }}}}']}
                  ]
                }

        json_string = json.dumps(json_data, 
                        skipkeys = True, 
                        allow_nan = True)
        requests.post(url = API_URL, data = json_string)

    api_task = PythonOperator(
    task_id='api_task',
    provide_context=True,
    python_callable=api_call_func,
    dag=dag,
    )

但它会导致以下响应:

<filenames>
         <FileName>f'Source_credit_{{ ts_nodash }}</FileName>
</filenames>

以下是当前日期时间所需的响应:

<filenames>
         <FileName>f'Source_credit_20210408010223</FileName> 
</filenames>

如何在json中传递ts_nodash宏? 或者如何在 json?

中传递 dag 的执行日期时间

仅当包含模板的字符串作为参数传递给运算符的模板化参数时,才会处理模板。例如,op_args PythonOperator 的参数。

在您的例子中,ts_nodash 的值作为参数由 PythonOperator 传递给 api_call_func()。因此,您可以使用 context 参数来访问它:

json_data = {
    "ID": "A001-001",
    "SourceName": sourcefile,
    "filenames": [{"FileName": [f"Source_credit_{context['ts_nodash']}"]}],
}

请注意,default variables 其余部分的值可以用相同的方式访问。