Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27
, '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

Add prek hook to enforce keyword-only session on @provide_session - #67150

Merged
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs
May 28, 2026
Merged

Add prek hook to enforce keyword-only session on @provide_session#67150
jason810496 merged 12 commits into
apache:mainfrom
jason810496:prek-hook-provide-session-kwargs

Conversation

@jason810496

Copy link
Copy Markdown
Member

Why

The project convention is that any function decorated with @provide_session must declare session as keyword-only (after a bare *), so callers cannot pass it positionally by accident. Today this is only documented in contributing-docs/05_pull_requests.rst#database-session-handling, so regressions slip in during review.

What

  • New prek hook check-no-new-provide-session-positional scans changed files (or --all-files) for @provide_session functions whose session parameter is still positional.
  • Existing offenders are recorded in scripts/ci/prek/known_provide_session_positional.txt as path::N entries (max count per file). The hook fails when a file exceeds its limit, and auto-tightens the entry when the count decreases so the allowlist only shrinks over time. (Following convention of build(prek-hook): Check whether new "raise AirflowException" is added #55416 )
  • Supports --all-files, --cleanup (drop stale entries), and --generate (rebuild the allowlist from scratch).

Was generative AI tooling used to co-author this PR?

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 introduces a new prek/pre-commit hook intended to prevent regressions where functions decorated with @provide_session accept session positionally, enforcing the documented convention that session should be keyword-only.

Changes:

  • Add check_provide_session_kwargs.py prek hook that AST-scans Python files for @provide_session functions with positional session.
  • Introduce a shrinking allowlist (known_provide_session_positional.txt) to grandfather existing violations while preventing increases.
  • Add unit tests for decorator detection, violation counting, and allowlist tightening/cleanup behavior; wire the hook into .pre-commit-config.yaml.

Reviewed changes

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

FileDescription
scripts/ci/prek/check_provide_session_kwargs.pyImplements the new AST-based checker, allowlist manager, and CLI modes (--all-files, --cleanup, --generate).
scripts/ci/prek/known_provide_session_positional.txtInitial allowlist of existing positional-session offenders with per-file maximum counts.
scripts/tests/ci/prek/test_check_provide_session_kwargs.pyUnit tests for the new hook’s core logic and allowlist behavior.
.pre-commit-config.yamlRegisters the new hook so it runs on relevant Python paths (and the allowlist/script paths).

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated

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

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

Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py

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

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@jason810496
jason810496 marked this pull request as ready for review May 19, 2026 07:28
When only the allowlist file is changed, the hook now unions the previous
allowlist (from `git show HEAD:<file>`) with the current one, so removing
an entry can't silently drop coverage for a file that still has positional
`session` arguments.
@jason810496
jason810496force-pushed the prek-hook-provide-session-kwargs branch from 184add7 to 19f2e2aCompareMay 22, 2026 08:39
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/known_provide_session_positional.txt
Comment thread.pre-commit-config.yaml Outdated
@jason810496
jason810496 requested a review from Lee-WMay 25, 2026 14:20

@Lee-WLee-W 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.

a few nits, but nothing is blocking

Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/ci/prek/check_provide_session_kwargs.py
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
Comment threadscripts/tests/ci/prek/test_check_provide_session_kwargs.py Outdated
- Drop ``task-sdk`` from ``_PROJECT_SOURCE_ROOTS`` and the docstring/help text;
task-sdk does not use ``@provide_session``.
- Rename ``_previous_allowlist`` to ``_parse_tracked_allowlist`` so the name
is a verb and reflects that it parses the git-tracked (``HEAD``) version.
- Rename test fixtures ``fake_repo`` and ``git_repo`` to ``create_fake_repo``
and ``create_git_repo`` to match the verb-prefix naming convention, and
use ``@pytest.mark.usefixtures`` for tests that only need the side-effect.
Comment threadscripts/ci/prek/check_provide_session_kwargs.py Outdated
airflow-ctl talks to Airflow via the API and has no @provide_session
callsites, so scanning it is wasted work and misleading in the help
text. The .pre-commit-config.yaml files pattern already only matches
airflow-core|providers, so this just brings the script's own
--all-files/--generate scope and docs in line.

@jscheffljscheffl 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.

LGTM!

@jason810496
jason810496 merged commit 3276dde into apache:mainMay 28, 2026
143 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jason810496@Lee-W@jscheffl@Prab-27