如何解析气流模板

时间:2017-11-27 08:00:26

标签: airflow

是否可以在气流模板中解析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)

1 个答案:

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