2017-08-23 12 views
2

依存するPython呼び出し可能関数の結果に依存するパラメータを持つHTTPリクエストを送信します。私はこの目的のためにXComsを使用しようとしています。簡単な例:AirflowのXComs経由でPythonOperatorからHttpSensorにパラメータを渡すには?

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') }}が送信された参照してください。何がうまくいかなかったのでしょうか? HttpSensorの代わりにHttpOperatorを使用する必要がありますか?

答えて

0

私は、paramsは非推奨であり、エアフローのジンジャーテンプレートエンジンによってスキャンされないと思います。 paramsの代わりにrequest_paramsを使用してみてください(これは文字列のキーと値のペアの辞書です)。

+0

これは質問に対する答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューから](レビュー/低品質の投稿/ 17141050) –

+0

@SirRufo実際には質問に答えています。記載されているセンサーでは、jinjaの式「{{ti.xcom_pull( 'get_index')}}」を使用します。これは、エアフローによってjinjaテンプレートとして読み取られることはなく、したがってxcomからの値で置き換えられません。しかし、paramsの名前がrequest_paramsに変更された場合、エアフローはそれを解釈し、 "{{ti.xcom_pull( 'get_index')}}"をXComの値で置き換えます。私のマシンでテストされています。 – faeder

+0

*私は*と* try *と答えた方がコメントとしては完璧にフィットするが、修飾された答えではないという示唆です。 –

0

faederと言えば、paramsのジンジャーテンプレートは現在評価されていません。私はSimpleHttpOperatrに切り替わり、テンプレートをdataフィールドに入れて問題を解決しました。

関連する問題