在Airflow中,我试图向我们介绍airflow中的jinja模板,但问题是它没有被解析,而是被当作字符串处理。请看我的代码 ``
from datetime import datetime
from airflow.operators.python_operator import PythonOperator
from airflow.models import DAG
def test_method(dag,network_id,schema_name):
print "Schema_name in test_method", schema_name
third_task = PythonOperator(
task_id='first_task_' + network_id,
provide_context=True,
python_callable=print_context2,
dag=dag)
return third_task
dag = DAG('testing_xcoms_pull', description='Testing Xcoms',
schedule_interval='0 12 * * *',
start_date= datetime.today(),
catchup=False)
def print_context(ds, **kwargs):
return 'Returning from print_context'
def print_context2(ds, **kwargs):
return 'Returning from print_context2'
def get_schema(ds, **kwargs):
# Returning schema name based on network_id
schema_name = "my_schema"
return get_schema
first_task = PythonOperator(
task_id='first_task',
provide_context=True,
python_callable=print_context,
dag=dag)
second_task = PythonOperator(
task_id='second_task',
provide_context=True,
python_callable=get_schema,
dag=dag)
network_id = '{{ dag_run.conf["network_id"]}}'
first_task >> second_task >> test_method(
dag=dag,
network_id=network_id,
schema_name='{{ ti.xcom_pull("second_task")}}')
``
Dag创建失败,因为气流将'{{ dag_run.conf["network_id"]}}'
当作字符串。谁能帮我解决我代码中的问题吗?
答案 0 :(得分:0)
气流操作员具有一个名为template_fields的变量。通常在操作符类的顶部声明此变量,请在github代码库中检出任何操作符。
如果您要将Jinja模板语法传递到的字段不在template_fields列表中,则jinja语法将显示为字符串。
答案 1 :(得分:0)
boost::property_map<>
对象及其定义代码不会在执行上下文中进行解析,而是根据Python加载时可用的环境进行解析。
用于在函数中定义namespace boost {
// overriding the typedef to take the types from the BoostBase instead:
template <typename Tag, typename... Args>
struct property_map<MyGraph<Args...>, Tag> : property_map<typename MyGraph<Args...>::BoostBase, Tag> {
};
}
的{{1}}变量在执行之前未进行模板化,由于没有执行活动,因此无法进行模板化。即使使用模板,您仍然需要有效的,静态的,非模板的template <typename WhateverGraph>
void some_naive_user_function(WhateverGraph const& g, std::ostream& os) {
// we don't know whether WhateverGraph is filtered or not, but we don't care
print_graph(g, get(boost::vertex_index, g), os);
}
值来实例化get(boost::vertex_index, g)
对象。