Airflow 在气流中正确设置用户定义的过滤器
我正试图获得一个简单的气流(v1.9.0)Airflow 在气流中正确设置用户定义的过滤器,airflow,Airflow,我正试图获得一个简单的气流(v1.9.0)用户定义的过滤器基于。下面是我尝试运行的一个最小示例 def userfilter(id): return 'Hello' + id default_args = { 'start_date': datetime(2018, 5, 19), 'user_defined_filters': dict(hello=lambda name: 'Hello%s' % name, filter2=userfilter),
用户定义的过滤器
基于。下面是我尝试运行的一个最小示例
def userfilter(id):
return 'Hello' + id
default_args = {
'start_date': datetime(2018, 5, 19),
'user_defined_filters': dict(hello=lambda name: 'Hello%s' % name, filter2=userfilter),
}
dag = DAG('mwe', default_args=default_args)
jinja_env = dag.get_template_env()
print(jinja_env.filters)
t1 = SimpleHttpOperator(
task_id='helloworld',
# endpoint="/api/{{ 'world' | filter2 }}",
endpoint="/api/{{ 'world' | hello }}",
method='GET',
headers=None,
response_check=None,
extra_options=None,
xcom_push=True,
http_conn_id='myconn',
dag=dag)
最终,我希望使用从xcom
提取的值调用userfilter
。但是,即使在这个简单的例子中,我也得到了一个例外:
{base_task_runner.py:98} INFO - Subtask File "<unknown>", line 1, in template
{base_task_runner.py:98} INFO - Subtask: jinja2.exceptions.TemplateAssertionError: no filter named 'hello'`
{base\u task\u runner.py:98}INFO-子任务文件“”,第1行,在模板中
{base_task_runner.py:98}INFO-子任务:jinja2.exceptions.TemplateAssertionError:没有名为“hello”的筛选器`
print(jinja_环境过滤器)
也没有显示定义的自定义过滤器。这里缺少什么?您尝试使用的参数不是默认参数的一部分,而是类DAG
的一个参数:
dag = DAG('mwe',
default_args=default_args),
user_defined_filters=dict(hello=lambda name: 'Hello%s' % name, filter2=userfilter)
)
看太好了。这是个错误;现在工作。我有点惊讶的是,即使谷歌搜索了很多,也没有这样的例子。