Skip to content

Detect template-field logic in operator __init__ in prek check - #70297

Merged
shahar1 merged 1 commit into
apache:mainfrom
shahar1:detect-template-field-logic-in-init
Jul 23, 2026
Merged

Detect template-field logic in operator __init__ in prek check#70297
shahar1 merged 1 commit into
apache:mainfrom
shahar1:detect-template-field-logic-in-init

Conversation

@shahar1

@shahar1 shahar1 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Human Sumary

Two years ago I've implemented a script for detecting usage of template fields within the constructor (#33786).
It had gone through some improvements, but overall it has always been AST-based - which didn't cover all the cases that these fields could be (ab)used.
But now we have AI - and after letting Claude to improve it, it found plenty of problematic cases nowadays.
As usual, created an exemption list (#70296) and hopefully we could handle everything with the help of the community :)

AI Summary

Click here Template fields are rendered after the constructor runs, so any validation or transformation applied to them in __init__ acts on the un-rendered Jinja expression — the bug class behind #69813, where SSHRemoteJobOperator validated a templated remote_base_dir at construction time and cleanup then failed for any custom base. The validate-operators-init hook only recognised top-level assignment statements, so validation calls, conditionals and transformations were invisible to it, and sensors, subscripted AwsBaseOperator[...] bases and aws_template_fields(...)-based classes were not covered at all.

Pre-existing violations (83 classes) are exempted via a path::Class ratchet file so the rule is enforced on new code immediately; a fixing PR must remove its entry (stale entries fail the hook). Burn-down is tracked at #70296.


Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.

Template fields are rendered after the constructor runs, so any
validation or transformation applied to them in __init__ acts on the
un-rendered Jinja expression — the bug class behind apache#69813, where
SSHRemoteJobOperator validated a templated remote_base_dir at
construction time and cleanup then failed for any custom base. The
validate-operators-init hook only recognised top-level assignment
statements, so validation calls, conditionals and transformations were
invisible to it, and sensors, subscripted AwsBaseOperator[...] bases and
aws_template_fields(...)-based classes were not covered at all.

Pre-existing violations (83 classes) are exempted via a path::Class
ratchet file so the rule is enforced on new code immediately; a fixing
PR must remove its entry (stale entries fail the hook). Burn-down is
tracked at apache#70296.
@shahar1
shahar1 merged commit bb89adf into apache:main Jul 23, 2026
70 checks passed
@shahar1
shahar1 deleted the detect-template-field-logic-in-init branch July 23, 2026 18:32
@github-actions

Copy link
Copy Markdown
Contributor

Backport successfully created: v3-3-test

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

Status Branch Result
v3-3-test PR Link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants