Есть ли способ загрузить файл через REST в Airflow через SimpleHttpOperator? - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь создать группу Airflow DAG для запроса некоторых данных, сохранить их как файл CSV и загрузить в конечную точку REST API. Я реализовал это с помощью сценария оболочки и команды CURL следующим образом:

curl --location --request POST 'https://my.endpoint.com/automations-file-service/automations/fileupload/files' \
--header 'X-API-TOKEN: my_token' \
--form 'file=@/Users/myuser/myfiles/all_20200707_2.csv'

Я пытаюсь переместить это в Airflow и хочу преобразовать эту команду CURL в Airflow через SimpleHttpOperator. Проблема в том, что я не могу найти ни одного параметра в операторе, где я могу добавить путь к файлу, нет параметра "форма". Кто-нибудь реализовал что-то подобное в Airflow? Спасибо!

1 Ответ

1 голос
/ 09 июля 2020

Итак, это невозможно сделать без предоставления или написания собственного кода. У вас есть пара способов сделать это. Создайте подкласс SimpleHttpOperator и перепишите метод execute так, чтобы вы вызывали HttpHook с правильными аргументами. Создайте подкласс BaseOperator для вашего конкретного случая c и, по сути, сделайте то же самое. Или напишите функциональность Python в Python Callable и используйте PythonOperator.

Detail

Если вы посмотрите HttpHook , вы увидите, что выполнение SimpleHttpOperator, в основном, просто использует библиотеку запросов Python.

А метод run принимает параметр request_kwargs, к которому вы не можете получить доступ через метод execute на SimpleHttpOperator. Написав оператор с вашим собственным методом execute или Callable, вы можете явно использовать HttpHook.run(...) для передачи аргументов вашего запроса или вы можете использовать другую Python http-библиотеку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...