Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Respect apps flags for api_server_command - #52929

Merged
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown
Jul 14, 2025
Merged

Respect apps flags for api_server_command#52929
jason810496 merged 2 commits into
apache:mainfrom
jason810496:fix/api-server/api-apps-env-setup-teardown

Conversation

@jason810496

Copy link
Copy Markdown
Member

related: #52860

Why

  • While working on Remove gunicorn daemonize for api-server #52860, I found that current api-server only respect --apps flag with --dev mode.
    • We use AIRFLOW_API_APPS environment to specify which apps are going to initialize in create_app call.
  • Also the AIRFLOW_API_APPS env is no restored properly, we should set back to original value if it's set before the airlow api-server run.

What

  • Add with_api_apps_env decorator with proper teardown
  • Refactor test_api_apps_env test with more scenario including all apps currently available, dev mode or not, and original env is set or not.

@jason810496jason810496 added area:CLI area:API Airflow's REST/HTTP API labels Jul 6, 2025
@jason810496jason810496 self-assigned this Jul 6, 2025
@jason810496
jason810496 requested review from Copilot, jedcunningham, kaxil, pierrejeambrun and potiuk and removed request for jedcunningham and kaxilJuly 6, 2025 04:53

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures the --apps flag is respected outside of dev mode and that the AIRFLOW_API_APPS environment variable is always restored to its original value.

  • Introduces a with_api_apps_env decorator to manage setting/tearing down the env var
  • Refactors api_server to use the decorator and removes inline env manipulation
  • Updates test_api_server_command.py to parameterize scenarios for dev/non-dev modes and original env states

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

FileDescription
airflow-core/tests/unit/cli/commands/test_api_server_command.pyParameterize and expand test_api_apps_env to cover all flag permutations and teardown
airflow-core/src/airflow/cli/commands/api_server_command.pyAdd with_api_apps_env decorator, apply to api_server, remove manual env handling, update type ignore on access_log
Comments suppressed due to low confidence (1)

airflow-core/tests/unit/cli/commands/test_api_server_command.py:121

  • [nitpick] The test verifies that AIRFLOW_API_APPS is cleaned up, but doesn’t assert that it was initially set to the expected value. Consider adding an assert on mock_environ.__setitem__ for the first assignment.
 api_server_command.api_server(parsed_args)

Comment threadairflow-core/src/airflow/cli/commands/api_server_command.py Outdated

@potiukpotiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

@kaxil

kaxil commented Jul 6, 2025

Copy link
Copy Markdown
Member

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments. But should not we describe it in documentation why to do it and how to do it?

#43103 . Feel free to take it over @jason810496

@jason810496

Copy link
Copy Markdown
MemberAuthor

I am not sure how much we want to configure apps in prod - I guess we might find it useful in some deployments.

IMO, it might be useful for scaling API server for Task Execution and Core API separately or for users that just need to run Task Execution API-server solely.

But should not we describe it in documentation why to do it and how to do it?
#43103 . Feel free to take it over @jason810496

Thanks for bringing up the related issue! I will raise another for the documentation side.
This PR is more like fixing the behavior for the --apps only.

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yes this is useful for people that want to deploy a standalone execution api server. (Scaling, isolation etc.)

Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
Comment threadairflow-core/tests/unit/cli/commands/test_api_server_command.py Outdated
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 874657d to 900003bCompareJuly 7, 2025 17:46
@kaxilkaxil added this to the Airflow 3.0.4 milestone Jul 7, 2025
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch 2 times, most recently from a41c768 to 824b711CompareJuly 10, 2025 07:08
@jason810496
jason810496force-pushed the fix/api-server/api-apps-env-setup-teardown branch from 824b711 to 19d8a8aCompareJuly 14, 2025 02:16
@jason810496
jason810496 merged commit c0c41ff into apache:mainJul 14, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker c0c41ff v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

prdai pushed a commit to prdai/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
@pierrejeambrun

pierrejeambrun commented Jul 15, 2025

Copy link
Copy Markdown
Member

@jason810496 needs manual cherry picking I guess, or this fix won't be in the next patch release.

@jason810496

Copy link
Copy Markdown
MemberAuthor

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 15, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
@kaxil

Copy link
Copy Markdown
Member

Cool, thanks. Please do when you get time

Thanks for the reminder! I will raise backport PR when I back to home

jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
jason810496 added a commit to jason810496/airflow that referenced this pull request Jul 26, 2025
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
potiuk pushed a commit that referenced this pull request Jul 26, 2025
)
* Respect apps flags for api_server_command
* Refactor test_api_apps_env
(cherry picked from commit c0c41ff)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:CLI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@kaxil@pierrejeambrun@potiuk