Airflow-extended-api

Latest version: v1.1.3

Safety actively analyzes 619345 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

1.1.2

[中文版文档](https://github.com/caoergou/airflow-extended-api-plugin/blob/main/README_CN.md)

Airflow Extended API Plugin

<p align="center">
<a href="https://github.com/caoergou/airflow-extended-api-plugin/">
<img src="https://img.shields.io/github/stars/caoergou/airflow-extended-api-plugin"/>
</a>
<a href="https://github.com/caoergou/airflow-extended-api-plugin/">
<img src="https://img.shields.io/github/forks/caoergou/airflow-extended-api-plugin"/>
</a>
<a href="https://github.com/caoergou/airflow-extended-api-plugin/">
<img src="https://img.shields.io/github/watchers/caoergou/airflow-extended-api-plugin"/>
</a>
<a href="https://github.com/caoergou/airflow-extended-api-plugin/">
<img src="https://img.shields.io/github/languages/code-size/caoergou/airflow-extended-api-plugin"/>
</a>
</p>

Airflow Extended API, which
export [airflow CLI command](https://airflow.apache.org/docs/apache-airflow/2.0.2/cli-and-env-variables-ref.html) as
REST-ful API to extend the ability of airflow official API.

Features

- 👏**Available**: Probably the only available CLI command plugin on Github that **supports the Airflow 2.x version**.
- 🎉**Extensible**: Easily define your own API to execute any Airflow CLI command so that it fits your demand.

Plugin Install

1. Install the plugin via `pip`

bash
pip install airflow-extended-api


2. Restart the Airflow Web Server

3. Open Airflow UI in `Docs - Extended API OpenAPI` or `http://localhost:8080/` to view extended API details in swagger
UI.
![img.png](https://github.com/caoergou/airflow-extended-api-plugin/raw/main/pics/img.png)

Usage

Examples

curl request example:

bash
curl -X POST --user "airflow:airflow" https://localhost:8080/api/extended/clear -H "Content-Type: application/json" -d '{"dagName": "string","downstream": true,"endDate": "2019-08-24T14:15:22Z","jobName": "string","startDate": "2019-08-24T14:15:22Z","username": "Extended API"}'


Response Schema:

json
{
"executed_command": "string",
"exit_code": 0,
"output_info": [
"string"
],
"error_info": [
"string"
]
}


curl without Credentials data

Note that you will need to pass credentials' data in `--user "{username}:{password}"` format, or you will get an
Unauthorized error.

bash
curl -X POST http://127.0.0.1:8080/api/extended/clear -H "Content-Type: application/json" -d '{"dagName": "string","downstream": true,"endDate": "2019-08-24T14:15:22Z","jobName": "string","startDate": "2019-08-24T14:15:22Z","username": "Extended API"}'


response

json
{
"detail": null,
"status": 401,
"title": "Unauthorized",
"type": "https://airflow.apache.org/docs/apache-airflow/2.2.5/stable-rest-api-ref.html#section/Errors/Unauthenticated"
}


curl with wrong CLI Command

bash
curl -X POST --user "airflow:airflow" http://127.0.0.1:8080/api/extended/clear -H "Content-Type: application/json" -d '{"dagName": "string","downstream": true,"endDate": "2019-08-24T14:15:22Z","jobName": "string","startDate": "2019-08-24T14:15:22Z","username": "Extended API"}'


response

json
{
"error_info": [
"Traceback (most recent call last):",
" File \"/home/airflow/.local/bin/airflow\", line 8, in <module>",
" sys.exit(main())",
" File \"/home/airflow/.local/lib/python3.7/site-packages/airflow/__main__.py\", line 48, in main",
" args.func(args)",
" File \"/home/airflow/.local/lib/python3.7/site-packages/airflow/cli/cli_parser.py\", line 48, in command",
" return func(*args, **kwargs)",
" File \"/home/airflow/.local/lib/python3.7/site-packages/airflow/utils/cli.py\", line 92, in wrapper",
" return f(*args, **kwargs)",
" File \"/home/airflow/.local/lib/python3.7/site-packages/airflow/cli/commands/task_command.py\", line 506, in task_clear",
" dags = get_dags(args.subdir, args.dag_id, use_regex=args.dag_regex)",
" File \"/home/airflow/.local/lib/python3.7/site-packages/airflow/utils/cli.py\", line 203, in get_dags",
" return [get_dag(subdir, dag_id)]",
" File \"/home/airflow/.local/lib/python3.7/site-packages/airflow/utils/cli.py\", line 193, in get_dag",
" f\"Dag {dag_id!r} could not be found; either it does not exist or it failed to parse.\"",
"airflow.exceptions.AirflowException: Dag 'string' could not be found; either it does not exist or it failed to parse.",
""
],
"executed_command": "airflow tasks clear string -e 2019-08-24T14:15:22+00:00 -s 2019-08-24T14:15:22+00:00 -t string -y -d",
"exit_code": 1,
"output_info": [
"[\u001b[34m2022-04-22 10:05:50,538\u001b[0m] {\u001b[34mdagbag.py:\u001b[0m500} INFO\u001b[0m - Filling up the DagBag from /opt/airflow/dags\u001b[0m",
""
]
}


Project Plan

- [ ] support `dags backfill` cli command
- [ ] support custom configuration

Links and References

- [Airflow configuration documentation](https://airflow.apache.org/docs/stable/configurations-ref.html)
- [Airflow CLI command documentation](https://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html)
- This project was inspired by the following projects:
- [andreax79/airflow-code-editor](https://github.com/andreax79/airflow-code-editor)
- [airflow-plugins/airflow_api_plugin](https://github.com/airflow-plugins/airflow_api_plugin)
- Contact email: Eric Cao `itsericsmailgmail.com`

<p align="center">
<a href="https://github.com/caoergou/airflow-extended-api-plugin/">
<img src="https://img.shields.io/github/license/caoergou/airflow-extended-api-plugin?logo=apache"/>
</a>
</p>

Links

Releases

Has known vulnerabilities

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.