Skip to content

[airflow] Extend AIR311 and AIR312 rules#20082

Merged
ntBre merged 3 commits intoastral-sh:mainfrom
astronomer:extend-AIR-31x-rules
Aug 27, 2025
Merged

[airflow] Extend AIR311 and AIR312 rules#20082
ntBre merged 3 commits intoastral-sh:mainfrom
astronomer:extend-AIR-31x-rules

Conversation

@Lee-W
Copy link
Contributor

@Lee-W Lee-W commented Aug 25, 2025

Summary

Extend the following rules.

AIR311

  • airflow.sensors.base.BaseSensorOperator → airflow.sdk.bases.sensor.BaseSensorOperator`
  • airflow.sensors.base.PokeReturnValue → airflow.sdk.bases.sensor.PokeReturnValue`
  • airflow.sensors.base.poke_mode_only → airflow.sdk.bases.sensor.poke_mode_only`
  • airflow.decorators.base.DecoratedOperator → airflow.sdk.bases.decorator.DecoratedOperator`
  • airflow.models.param.Param → airflow.sdk.definitions.param.Param`
  • airflow.decorators.base.DecoratedMappedOperatorairflow.sdk.bases.decorator.DecoratedMappedOperator
  • airflow.decorators.base.DecoratedOperatorairflow.sdk.bases.decorator.DecoratedOperator
  • airflow.decorators.base.TaskDecoratorairflow.sdk.bases.decorator.TaskDecorator
  • airflow.decorators.base.get_unique_task_idairflow.sdk.bases.decorator.get_unique_task_id
  • airflow.decorators.base.task_decorator_factoryairflow.sdk.bases.decorator.task_decorator_factory

AIR312

  • airflow.sensors.bash.BashSensorairflow.providers.standard.sensor.bash.BashSensor
  • airflow.sensors.python.PythonSensorairflow.providers.standard.sensors.python.PythonSensor

Test Plan

update the test fixture accordingly in the second commit and reorg in the third

@github-actions
Copy link
Contributor

github-actions bot commented Aug 25, 2025

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

ℹ️ ecosystem check detected linter changes. (+88 -0 violations, +0 -0 fixes in 1 projects; 54 projects unchanged)

apache/airflow (+88 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview --select ALL

+ providers/amazon/src/airflow/providers/amazon/aws/sensors/s3.py:223:2: AIR311 `airflow.sensors.base.poke_mode_only` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/celery/src/airflow/providers/celery/sensors/celery_queue.py:39:25: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/common/sql/src/airflow/providers/common/sql/sensors/sql.pyi:49:17: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/databricks/src/airflow/providers/databricks/sensors/databricks.py:43:67: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/databricks/src/airflow/providers/databricks/sensors/databricks_partition.py:48:33: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/databricks/src/airflow/providers/databricks/sensors/databricks_sql.py:45:27: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/dbt/cloud/src/airflow/providers/dbt/cloud/sensors/dbt.py:40:28: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/docker/src/airflow/providers/docker/decorators/docker.py:102:32: AIR311 `airflow.decorators.base.DecoratedOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/docker/src/airflow/providers/docker/decorators/docker.py:215:12: AIR311 `airflow.decorators.base.task_decorator_factory` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py:44:52: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py:44:47: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py:48:33: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py:49:47: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataform.py:114:51: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataform.py:38:45: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py:39:42: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py:135:42: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py:253:42: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py:58:31: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py:37:40: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py:125:27: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py:43:25: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py:39:36: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/gcs.py:161:29: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/gcs.py:252:43: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/gcs.py:345:2: AIR311 `airflow.sensors.base.poke_mode_only` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/gcs.py:346:38: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/gcs.py:53:32: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/looker.py:37:33: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py:48:24: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/tasks.py:38:28: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py:39:29: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/cloud/sensors/workflows.py:41:31: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py:37:41: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py:105:43: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py:38:58: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/google/src/airflow/providers/google/suite/sensors/drive.py:37:38: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/http/src/airflow/providers/http/sensors/http.py:110:46: AIR311 `airflow.sensors.base.PokeReturnValue` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/http/src/airflow/providers/http/sensors/http.py:137:48: AIR311 `airflow.sensors.base.PokeReturnValue` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/http/tests/unit/http/sensors/test_http.py:82:20: AIR311 `airflow.sensors.base.PokeReturnValue` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/cosmos.py:35:33: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/data_factory.py:43:47: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/msgraph.py:44:21: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/wasb.py:117:24: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/microsoft/azure/src/airflow/providers/microsoft/azure/sensors/wasb.py:39:22: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/openlineage/src/airflow/providers/openlineage/utils/selective_enable.py:38:19: AIR311 `airflow.models.Param` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/openlineage/src/airflow/providers/openlineage/utils/selective_enable.py:39:20: AIR311 `airflow.models.Param` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/openlineage/src/airflow/providers/openlineage/utils/utils.py:345:36: AIR311 `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py:65:29: AIR311 `airflow.decorators.base.get_unique_task_id` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
+ providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py:69:76: AIR311 `airflow.decorators.base.TaskDecorator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version.
... 38 additional changes omitted for project

Changes by rule (1 rules affected)

code total + violation - violation + fix - fix
AIR311 88 88 0 0 0

@Lee-W Lee-W force-pushed the extend-AIR-31x-rules branch from 0405928 to 9c6c735 Compare August 27, 2025 03:21
@Lee-W Lee-W changed the title feat(AIR31X): extend AIR31x rules [airflow]: extend AIR311 and AIR312 rules Aug 27, 2025
@Lee-W Lee-W force-pushed the extend-AIR-31x-rules branch from 9c6c735 to aa81234 Compare August 27, 2025 09:16
@Lee-W Lee-W marked this pull request as ready for review August 27, 2025 09:23
@ntBre ntBre added rule Implementing or modifying a lint rule preview Related to preview mode features labels Aug 27, 2025
Copy link
Contributor

@ntBre ntBre left a comment

Choose a reason for hiding this comment

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

Thanks!

@ntBre ntBre changed the title [airflow]: extend AIR311 and AIR312 rules [airflow] Extend AIR311 and AIR312 rules Aug 27, 2025
@ntBre ntBre merged commit 5663426 into astral-sh:main Aug 27, 2025
37 checks passed
carljm added a commit to leandrobbraga/ruff that referenced this pull request Aug 27, 2025
* main:
  [`ruff`] Preserve relative whitespace in multi-line expressions (`RUF033`) (astral-sh#19647)
  [ty] Optimize TDD atom ordering (astral-sh#20098)
  [`airflow`] Extend `AIR311` and `AIR312` rules (astral-sh#20082)
  [ty] Preserve qualifiers when accessing attributes on unions/intersections (astral-sh#20114)
  [ty] Fix the inferred interface of specialized generic protocols (astral-sh#19866)
  [ty] Infer slightly more precise types for comprehensions (astral-sh#20111)
  [ty] Add more tests for protocols (astral-sh#20095)
  [ty] don't eagerly unpack aliases in user-authored unions (astral-sh#20055)
  [`flake8-use-pathlib`] Update links to the table showing the correspondence between `os` and `pathlib` (astral-sh#20103)
  [`flake8-use-pathlib`] Make `PTH100` fix unsafe because it can change behavior (astral-sh#20100)
  [`flake8-use-pathlib`] Delete unused `Rule::OsSymlink` enabled check (astral-sh#20099)
  [ty] Add search paths info to unresolved import diagnostics (astral-sh#20040)
  [`flake8-logging-format`] Add auto-fix for f-string logging calls (`G004`) (astral-sh#19303)
  Add a `ScopeKind` for the `__class__` cell (astral-sh#20048)
  Fix incorrect D413 links in docstrings convention FAQ (astral-sh#20089)
  [ty] Refactor inlay hints structure to use separate parts (astral-sh#20052)
second-ed pushed a commit to second-ed/ruff that referenced this pull request Sep 9, 2025
<!--
Thank you for contributing to Ruff/ty! To help us out with reviewing,
please consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title? (Please prefix
with `[ty]` for ty pull
  requests.)
- Does this pull request include references to any relevant issues?
-->

## Summary

<!-- What's the purpose of the change? What does it do, and why? -->

Extend the following rules.

### AIR311
* `airflow.sensors.base.BaseSensorOperator` →
airflow.sdk.bases.sensor.BaseSensorOperator`
* `airflow.sensors.base.PokeReturnValue` →
airflow.sdk.bases.sensor.PokeReturnValue`
* `airflow.sensors.base.poke_mode_only` →
airflow.sdk.bases.sensor.poke_mode_only`
* `airflow.decorators.base.DecoratedOperator` →
airflow.sdk.bases.decorator.DecoratedOperator`
* `airflow.models.param.Param` → airflow.sdk.definitions.param.Param`
* `airflow.decorators.base.DecoratedMappedOperator` →
`airflow.sdk.bases.decorator.DecoratedMappedOperator`
* `airflow.decorators.base.DecoratedOperator` →
`airflow.sdk.bases.decorator.DecoratedOperator`
* `airflow.decorators.base.TaskDecorator` →
`airflow.sdk.bases.decorator.TaskDecorator`
* `airflow.decorators.base.get_unique_task_id` →
`airflow.sdk.bases.decorator.get_unique_task_id`
* `airflow.decorators.base.task_decorator_factory` →
`airflow.sdk.bases.decorator.task_decorator_factory`


### AIR312
* `airflow.sensors.bash.BashSensor` →
`airflow.providers.standard.sensor.bash.BashSensor`
* `airflow.sensors.python.PythonSensor` →
`airflow.providers.standard.sensors.python.PythonSensor`



## Test Plan

<!-- How was it tested? -->

update the test fixture accordingly in the second commit and reorg in
the third
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview Related to preview mode features rule Implementing or modifying a lint rule

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants