Skip to content

Conversation

@bugraoz93
Copy link
Contributor

@bugraoz93 bugraoz93 commented Dec 30, 2024

closes: #42561 and #43656

Summary
This PR introduces a central API communication mechanism for the CLI and adopts one of the broadest endpoint ranges in the API, focusing on connection commands. After several iterations to automate API call generation and handle edge cases, I couldn't achieve a fully dynamic request generation process. Instead, I landed on a structure similar to TaskSDK <-> ExecutionAPI. This approach simplifies reviews, maintains consistency across clients, and opens the door for better automation in future iterations, possibly in 3.1 or 3.2.

Implementation Details

  • Added a central API communication mechanism for the CLI.
  • Implemented most of the necessary CLI operations.
  • Data model generation from RestAPI to CLI is handled using uv.
  • Added decorators to cascade generic processes to operations.
  • Created a testing framework for CLI testing, with an example implementation for connection command.
  • Pending Work
  • Some minor features related to the connection command are still in progress and will be added in follow-up updates before 3.0.

Note: There are two missing functionalities in this PR for the connection command. Those will be included with follow-up tasks.

Notes on task_command
While working on this, I realized that task_command behaves more like a local_command than a remote_command. This needs further discussion, especially regarding its integration with TaskSDK. From the CLI perspective, depending on TaskSDK seems cleaner than directly calling ExecutionAPI, it avoids duplication and keeps the structure consistent. Even if the CLI calls TaskSDK, the two-hop process to reach the ExecutionAPI feels a bit redundant. What do you think, @ashb (to all, please jump into discussion, I tagged Ash to follow up the previous discussion started on this in Slack)?


^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in newsfragments.

@boring-cyborg boring-cyborg bot added area:CLI area:UI Related to UI/UX. For Frontend Developers. labels Dec 30, 2024
@bugraoz93 bugraoz93 added the area:API Airflow's REST/HTTP API label Dec 30, 2024
@bugraoz93 bugraoz93 requested review from ashb, kaxil and potiuk December 30, 2024 21:06
@jscheffl
Copy link
Contributor

jscheffl commented Jan 1, 2025

Note: As PR #45312 has been merged, the code formatting rules have changed for new UI. Please rebase and re-run pre-commit checks to ensure that formatting in folder airflow/ui is adjusted.

@bugraoz93 bugraoz93 force-pushed the feat/42561/cli-central-api-communication branch from 8446931 to 776cf69 Compare January 2, 2025 17:31
@bugraoz93 bugraoz93 changed the title Central API Communication Mechanism for CLI and Connection Command Integration AIP-81 Central API Communication Mechanism for CLI and Connection Command Integration Jan 2, 2025
@bugraoz93 bugraoz93 force-pushed the feat/42561/cli-central-api-communication branch 3 times, most recently from 449e9ab to bd4a661 Compare January 8, 2025 22:51
@bugraoz93
Copy link
Contributor Author

Note Update: The missing parts are included in the PR.

  • Create default connections in connection_command
  • Include overwrite functionality for file import operations for connections and pool endpoint
  • Include overwrite functionality to connection_command

Thanks @jason810496 for your contributions!

@hazemAmr0 hazemAmr0 mentioned this pull request Jan 21, 2025
2 tasks
@bugraoz93 bugraoz93 force-pushed the feat/42561/cli-central-api-communication branch from bd4a661 to 1a17613 Compare January 23, 2025 23:20
Copy link
Contributor

@jscheffl jscheffl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I saw this PR and was "afraid" from the size but after the dev call today I looked again. Agree to comments from @ashb - after this I assume it can be merged.

Next time would be better to cut PRs in smaller chunks not to scare reviewers away by number of LoC :-D

@bugraoz93
Copy link
Contributor Author

Thanks a lot for your time and your comments! I will address them and adjust the code accordingly soon.

Next time would be better to cut PRs in smaller chunks not to scare reviewers away by number of LoC :-D

Indeed, that's on me making it big. I thought most parts were repeated on the operations while making the integration easier for contributers and went for it. I agree, that's on me, I will definitely split next time :D

… most remote commands, connection_command.py integrated with client, data model generation from ResAPI to CLI is added using uv similar to TaskSDK
…nd operations, include create default connection_command, update generated models
…te connection_command.py accordingly, rebase
…g retrieving token, remove world readable file name, make environment separation and control with environment variable, control the token with both path and environment variable, remove additional configure action
…o always raise and let the caller decide, add back exceptions into connection_command, remove comments from pyproject.toml
@bugraoz93 bugraoz93 force-pushed the feat/42561/cli-central-api-communication branch from 1c9e80d to cacf34a Compare March 19, 2025 22:11
@jedcunningham
Copy link
Member

Failure is unrelated. Merging!

@jedcunningham jedcunningham merged commit 81893ed into apache:main Mar 19, 2025
147 of 148 checks passed
@jedcunningham
Copy link
Member

#protm

@jason810496
Copy link
Member

Hi @bugraoz93, since this PR has been merged, I think we can start working on the #45661 meta issue, right? Or are there any other dependencies that need to be completed first?

@bugraoz93
Copy link
Contributor Author

Hi @bugraoz93, since this PR has been merged, I think we can start working on the #45661 meta issue, right? Or are there any other dependencies that need to be completed first?

Hi @jason810496 , thanks for flagging! Normally, yes, they are unblocked. Since the direction has been changed and we don't have backward compatibility with the local commands running in core, we can provide outputs and data in a different and in a standard way than what the current commands do. I am trying something that could generate all the commands on the fly from operations created/implemented. It can save us from lots of effort. That's why I holded pinging all of you from the issue for a bit. I will share more details soon, either today or tomorrow, so the direction of the implementations can also be clear for transitions.

agupta01 pushed a commit to agupta01/airflow that referenced this pull request Mar 21, 2025
shubham-pyc pushed a commit to shubham-pyc/airflow that referenced this pull request Mar 22, 2025
nailo2c pushed a commit to nailo2c/airflow that referenced this pull request Apr 4, 2025
@bugraoz93 bugraoz93 deleted the feat/42561/cli-central-api-communication branch May 7, 2025 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:API Airflow's REST/HTTP API area:CLI area:UI Related to UI/UX. For Frontend Developers.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AIP-81 Central API Communication Mechanism for CLI

10 participants