Airflow 在气流中正确设置用户定义的过滤器

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),

我正试图获得一个简单的气流(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),
        }

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)
          )

太好了。这是个错误;现在工作。我有点惊讶的是,即使谷歌搜索了很多,也没有这样的例子。