如何在EmailOperator任务的文件名中添加模板变量?(空气流动)

Alb*_* C. 5 python python-2.7 airflow apache-airflow

我似乎无法让这个工作.

我试图每天发送一个给定的文件,其名称类似于'file _ {{ds_nodash}}.csv'.

问题是我似乎无法将此名称添加为文件名,因为它似乎无法使用.在电子邮件的文本或主题工作完美,而不是在名称上.

这是dag的一个例子:

local_file = 'file-{{ds_nodash}}.csv'

send_stats_csv = EmailOperator(
    task_id='send-stats-csv',
    to=['email@gmail.com'],
    subject='Subject - {{ ds }}',
    html_content='Here is the new file.',
    files=[local_file],
    dag=dag)
Run Code Online (Sandbox Code Playgroud)

错误代码:没有这样的文件或目录:u'file - {{ds_nodash}}.csv'

如果我按字面意思写出它的给定日期,它可以完美地工作.

我哪里错了?我该怎么办呢?

任何帮助,将不胜感激.

谢谢.

来自airflow文档的PD复制粘贴 - "Airflow引擎默认传递一些可在所有模板中访问的变量".https://airflow.incubator.apache.org/code.html

如果我理解正确,这些变量在执行时是可访问的,所以如果我执行dag,应该找到正确的文件?我已经尝试过测试任务或回填dag都没有成功.

小智 7

气流操作员定义哪些字段是模板字段.对于EmailOperator,仅将subject和html_content字段设置为模板.

class EmailOperator(BaseOperator):
    ...
    template_fields = ('subject', 'html_content')
    template_ext = ('.html',)
Run Code Online (Sandbox Code Playgroud)

请参阅:https://airflow.incubator.apache.org/_modules/email_operator.html

来自Airflow Gotcha的页面(https://gtoonstra.github.io/etl-with-airflow/gotchas.html)

并非运算符中的所有参数都是模板化的,因此您无法在任何地方使用Jinja模板.Jinja模板仅适用于在template_fields中列出的运算符中的那些字段...

要使其工作,您必须从EmailOperator派生一个新类,并为files数组添加模板.