是否可以在气流模板中解析JSON字符串?
我有一个HttpSensor,它通过REST API监视作业,但是作业ID在上游任务的响应中,xcom_push
标记为True
。
我想执行以下操作,但是,此代码会显示错误jinja2.exceptions.UndefinedError: 'json' is undefined
t1 = SimpleHttpOperator(
http_conn_id="s1",
task_id="job",
endpoint="some_url",
method='POST',
data=json.dumps({ "foo": "bar" }),
xcom_push=True,
dag=dag,
)
t2 = HttpSensor(
http_conn_id="s1",
task_id="finish_job",
endpoint="job/{{ json.loads(ti.xcom_pull(\"job\")).jobId }}",
response_check=lambda response: True if response.json().state == "complete" else False,
poke_interval=5,
dag=dag
)
t2.set_upstream(t1)
答案 0 :(得分:4)
或者,也可以通过执行将json
模块添加到模板中,并且可以在模板内使用json。但是,创建像Daniel这样的插件可能是个更好的主意。
dag = DAG(
'dagname',
default_args=default_args,
schedule_interval="@once",
user_defined_macros={
'json': json
}
)
然后
finish_job = HttpSensor(
task_id="finish_job",
endpoint="kue/job/{{ json.loads(ti.xcom_pull('job'))['jobId'] }}",
response_check=lambda response: True if response.json()['state'] == "complete" else False,
poke_interval=5,
dag=dag
)