5

我想发送一个 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吗?

4

2 回答 2

1

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

于 2017-08-25T12:03:39.593 回答
0

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

于 2017-08-25T07:12:37.873 回答