Size: a a a

2021 October 12

EP

Eugeny Prochan in Airflow
Мб есть какой-то коллбек, где я могу ловить исключения.
источник

I

Igor in Airflow
Ну на даги ты можешь вешать on_failure_callback
источник

I

Igor in Airflow
failure и на такси можно

Это функция с одним аргументом-контекстом
источник

EP

Eugeny Prochan in Airflow
Ага, есть такая, точно. А можно ли как-то по дефолту для всех дагов поставить такой коллбек?
источник

I

Igor in Airflow
Ммм кажется из коробки так просто не получится.

Вот так сходу приходит в голову только типа встроить в CI/CD проверку парсером что у конструктора есть этот параметр
источник

MM

Mikhail Mariufich in Airflow
можно сделать собственного наследника и во всех дагах использовать не DAG, а MyDAG
источник

VS

Vladislav 👻 Shishkov... in Airflow
Можно использовать sentry
источник

I

Igor in Airflow
вот это кстати лучший выход, да
источник

OI

Oleg Ilinsky in Airflow
я создаю просто все даги через функцию paramterized_dag, которая возвращает объект дага с дефолтными параметрами + кастомными

Работает нормально) все дефолтные параметры дагов в одном месте можно определять
источник

I

Igor in Airflow
а ну если у тебя фабрика уже есть, то что тебе мешает в дефолтовые парамтеры положить и коллбэк
источник

OI

Oleg Ilinsky in Airflow
у меня там всё и лежит, если это ко мне вопрос)
источник

I

Igor in Airflow
Но Влад прав, лучше сентри
источник

EP

Eugeny Prochan in Airflow
источник

I

Igor in Airflow
нет, это не вопрос, это да, высказывание в воздух о том что ты молодец :)
источник

I

Igor in Airflow
ого, прикольно
источник

d

d.sky in Airflow
чем лучше?
источник

OI

Oleg Ilinsky in Airflow
@contextmanager
def parametrized_dag(dag_id, default_args=None, schedule_interval=SCHEDULE_INTERVAL, max_active_runs=MAX_ACTIVE_RUNS,
                    catchup=CATCHUP, **kwargs):
   if default_args is None:
       default_args = DEFAULT_ARGS
   else:
       default_args = {**DEFAULT_ARGS, **default_args}
   with DAG(dag_id=dag_id,
            default_args=default_args,
            schedule_interval=schedule_interval,
            max_active_runs=max_active_runs,
            catchup=catchup,
            **kwargs) as dag:

       yield dag


ну а в DEFAULT_ARGS можно положить всё, что угодно, в том числе колбеки

P.S. сложно назвать это фабрикой
источник

EP

Eugeny Prochan in Airflow
Выглядит неплохо, но хотел оградить пользователей совсем :) Но в целом хорошо.
источник

EP

Eugeny Prochan in Airflow
А на счет sentry, просто хочется видеть ошибку рядом с логами перед ней.
источник

OI

Oleg Ilinsky in Airflow
ну а на создание дага:

from parametrized_dag import parametrized_dag
with parametrized_dag(…) as dag:
   <some_tasks>
источник