如何通过Airflow中的XComs将参数从PythonOperator传递给HttpSensor?

时间:2017-08-23 13:09:25

标签: python airflow apache-airflow

我想发送一个HTTP请求,其参数取决于依赖Python可调用的结果。我正在尝试将XComs用于此目的。简化示例:

def get_index():
  return 0

get_index = PythonOperator(
  task_id='get_index',
  python_callable=get_index,
  dag=dag)

http_request = HttpSensor(
  task_id='send_http_request',
  http_conn_id=HTTP_HOST,
  endpoint=ENDPOINT,
  params={
    "index": "{{ ti.xcom_pull('get_index')  }}"
  },
  dag=dag)

get_index >> http_request

不幸的是,在检查了HTTP请求的选项后,我发现宏未被正确评估,而不是0,而是发送{{ ti.xcom_pull('get_index') }}。可能出了什么问题?我应该使用HttpOperator代替HttpSensor吗?

2 个答案:

答案 0 :(得分:1)

faeder所述,params中的jinja模板目前尚未评估。我通过切换到SimpleHttpOperatr并将模板放在data字段中来解决了这个问题。

答案 1 :(得分:0)

我认为params已被弃用,并且不会被气流中的jinja模板引擎扫描。尝试使用request_params而不是params(它是字符串键/值对的字典)。