Как я могу получить `ds` в SlackAPIPostOperator?

#airflow

#воздушный поток

Вопрос:

Я хочу запустить скрипт python, которому нужен параметр datetime, и опубликовать его вывод в slack. Но я не знаю, как получить переменную шаблона воздушного ds потока.

Допустим, у меня есть приведенный ниже код:

 def make_txt():
    # get ds
    ds = get_ds()
    ds = ds * 3   4 / 5   # do something with ds
    return ds

slack_task = SlackAPIPostOperator(
    text=make_txt(),
    token='xoxp-xxxxxxx',
)
  

Поскольку я буду работать с airflow backfill dag_id -s 2016-10-01 , ds (здесь 2016-10-01) должен перейти к тексту slack.

Я пытаюсь записать вывод скрипта python в файл, а затем прочитать его и напрямую перейти к тексту slack. Но я не думаю, что это идеальное решение.

Ответ №1:

text Поле SlackAPIPostOperator является шаблонным, поэтому, если вы добавите {{ ds }} что-то в текст, оно будет вставлено jinja.

Комментарии:

1. Спасибо за ваш ответ. Но мне нужен {{ ds}} для некоторого оператора python, он может передаваться в какую-то функцию. Я думаю, что на этот вопрос нет ответа по этому поводу.

2. В PythonOperator вы можете указать provide_context=True , добавить a **kwargs к вызываемой вами функции, а затем получить к ней доступ через kwargs['ds'] . Обратите внимание, что если вы пытаетесь получить доступ к самому определению базы данных, это на самом деле невозможно. ds