diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302.py deleted file mode 100644 index 44d99bba80..0000000000 --- a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302.py +++ /dev/null @@ -1,481 +0,0 @@ -from __future__ import annotations - -from airflow.api.auth.backend import basic_auth, kerberos_auth -from airflow.api.auth.backend.basic_auth import auth_current_user -from airflow.auth.managers.fab.api.auth.backend import ( - kerberos_auth as backend_kerberos_auth, -) -from airflow.auth.managers.fab.fab_auth_manager import FabAuthManager -from airflow.auth.managers.fab.security_manager import override as fab_override -from airflow.config_templates.default_celery import DEFAULT_CELERY_CONFIG -from airflow.executors.celery_executor import CeleryExecutor, app -from airflow.executors.celery_kubernetes_executor import CeleryKubernetesExecutor -from airflow.executors.dask_executor import DaskExecutor -from airflow.executors.kubernetes_executor_types import ( - ALL_NAMESPACES, - POD_EXECUTOR_DONE_KEY, -) -from airflow.hooks.dbapi import ConnectorProtocol, DbApiHook -from airflow.hooks.dbapi_hook import DbApiHook as DbApiHook2 -from airflow.hooks.docker_hook import DockerHook -from airflow.hooks.druid_hook import DruidDbApiHook, DruidHook -from airflow.hooks.filesystem import FSHook -from airflow.hooks.hive_hooks import ( - HIVE_QUEUE_PRIORITIES, - HiveCliHook, - HiveMetastoreHook, - HiveServer2Hook, -) -from airflow.hooks.http_hook import HttpHook -from airflow.hooks.jdbc_hook import JdbcHook, jaydebeapi -from airflow.hooks.mssql_hook import MsSqlHook -from airflow.hooks.mysql_hook import MySqlHook -from airflow.hooks.oracle_hook import OracleHook -from airflow.hooks.package_index import PackageIndexHook -from airflow.hooks.pig_hook import PigCliHook -from airflow.hooks.postgres_hook import PostgresHook -from airflow.hooks.presto_hook import PrestoHook -from airflow.hooks.S3_hook import S3Hook, provide_bucket_name -from airflow.hooks.samba_hook import SambaHook -from airflow.hooks.slack_hook import SlackHook -from airflow.hooks.sqlite_hook import SqliteHook -from airflow.hooks.subprocess import SubprocessHook, SubprocessResult, working_directory -from airflow.hooks.webhdfs_hook import WebHDFSHook -from airflow.hooks.zendesk_hook import ZendeskHook -from airflow.kubernetes.k8s_model import K8SModel, append_to_pod -from airflow.kubernetes.kube_client import ( - _disable_verify_ssl, - _enable_tcp_keepalive, - get_kube_client, -) -from airflow.kubernetes.kubernetes_helper_functions import ( - add_pod_suffix, - annotations_for_logging_task_metadata, - annotations_to_key, - create_pod_id, - get_logs_task_metadata, - rand_str, -) -from airflow.kubernetes.pod import Port, Resources -from airflow.kubernetes.pod_generator import ( - PodDefaults, - PodGenerator, - PodGeneratorDeprecated, - datetime_to_label_safe_datestring, - extend_object_field, - label_safe_datestring_to_datetime, - make_safe_label_value, - merge_objects, -) -from airflow.kubernetes.pod_generator import ( - add_pod_suffix as add_pod_suffix2, -) -from airflow.kubernetes.pod_generator import ( - rand_str as rand_str2, -) -from airflow.kubernetes.pod_generator_deprecated import ( - PodDefaults as PodDefaults3, -) -from airflow.kubernetes.pod_generator_deprecated import ( - PodGenerator as PodGenerator2, -) -from airflow.kubernetes.pod_generator_deprecated import ( - make_safe_label_value as make_safe_label_value2, -) -from airflow.kubernetes.pod_launcher import PodLauncher, PodStatus -from airflow.kubernetes.pod_launcher_deprecated import ( - PodDefaults as PodDefaults2, -) -from airflow.kubernetes.pod_launcher_deprecated import ( - PodLauncher as PodLauncher2, -) -from airflow.kubernetes.pod_launcher_deprecated import ( - PodStatus as PodStatus2, -) -from airflow.kubernetes.pod_launcher_deprecated import ( - get_kube_client as get_kube_client2, -) -from airflow.kubernetes.pod_runtime_info_env import PodRuntimeInfoEnv -from airflow.kubernetes.secret import K8SModel2, Secret -from airflow.kubernetes.volume import Volume -from airflow.kubernetes.volume_mount import VolumeMount -from airflow.macros.hive import closest_ds_partition, max_partition -from airflow.operators.bash import BashOperator -from airflow.operators.bash_operator import BashOperator as LegacyBashOperator -from airflow.operators.check_operator import ( - CheckOperator, - IntervalCheckOperator, - SQLCheckOperator, - SQLIntervalCheckOperator, - SQLThresholdCheckOperator, - SQLValueCheckOperator, - ThresholdCheckOperator, - ValueCheckOperator, -) -from airflow.operators.datetime import BranchDateTimeOperator, target_times_as_dates -from airflow.operators.docker_operator import DockerOperator -from airflow.operators.druid_check_operator import DruidCheckOperator -from airflow.operators.dummy import DummyOperator, EmptyOperator -from airflow.operators.email import EmailOperator -from airflow.operators.email_operator import EmailOperator -from airflow.operators.gcs_to_s3 import GCSToS3Operator -from airflow.operators.google_api_to_s3_transfer import ( - GoogleApiToS3Operator, - GoogleApiToS3Transfer, -) -from airflow.operators.hive_operator import HiveOperator -from airflow.operators.hive_stats_operator import HiveStatsCollectionOperator -from airflow.operators.hive_to_druid import HiveToDruidOperator, HiveToDruidTransfer -from airflow.operators.hive_to_mysql import HiveToMySqlOperator, HiveToMySqlTransfer -from airflow.operators.hive_to_samba_operator import HiveToSambaOperator -from airflow.operators.http_operator import SimpleHttpOperator -from airflow.operators.jdbc_operator import JdbcOperator -from airflow.operators.mssql_operator import MsSqlOperator -from airflow.operators.mssql_to_hive import MsSqlToHiveOperator, MsSqlToHiveTransfer -from airflow.operators.mysql_operator import MySqlOperator -from airflow.operators.mysql_to_hive import MySqlToHiveOperator, MySqlToHiveTransfer -from airflow.operators.oracle_operator import OracleOperator -from airflow.operators.papermill_operator import PapermillOperator -from airflow.operators.pig_operator import PigOperator -from airflow.operators.postgres_operator import Mapping, PostgresOperator -from airflow.operators.presto_check_operator import ( - CheckOperator as SQLCheckOperator2, -) -from airflow.operators.presto_check_operator import ( - IntervalCheckOperator as SQLIntervalCheckOperator2, -) -from airflow.operators.presto_check_operator import ( - PrestoCheckOperator, - PrestoIntervalCheckOperator, - PrestoValueCheckOperator, -) -from airflow.operators.presto_check_operator import ( - ValueCheckOperator as SQLValueCheckOperator2, -) -from airflow.operators.presto_to_mysql import ( - PrestoToMySqlOperator, - PrestoToMySqlTransfer, -) -from airflow.operators.python import ( - BranchPythonOperator, - PythonOperator, - PythonVirtualenvOperator, - ShortCircuitOperator, -) -from airflow.operators.redshift_to_s3_operator import ( - RedshiftToS3Operator, - RedshiftToS3Transfer, -) -from airflow.operators.s3_file_transform_operator import S3FileTransformOperator -from airflow.operators.s3_to_hive_operator import S3ToHiveOperator, S3ToHiveTransfer -from airflow.operators.s3_to_redshift_operator import ( - S3ToRedshiftOperator, - S3ToRedshiftTransfer, -) -from airflow.operators.slack_operator import SlackAPIOperator, SlackAPIPostOperator -from airflow.operators.sql import ( - BaseSQLOperator, - BranchSQLOperator, - SQLTableCheckOperator, - _convert_to_float_if_possible, - parse_boolean, -) -from airflow.operators.sql import ( - SQLCheckOperator as SQLCheckOperator3, -) -from airflow.operators.sql import ( - SQLColumnCheckOperator as SQLColumnCheckOperator2, -) -from airflow.operators.sql import ( - SQLIntervalCheckOperator as SQLIntervalCheckOperator3, -) -from airflow.operators.sql import ( - SQLThresholdCheckOperator as SQLThresholdCheckOperator2, -) -from airflow.operators.sql import ( - SQLValueCheckOperator as SQLValueCheckOperator3, -) -from airflow.operators.sqlite_operator import SqliteOperator -from airflow.operators.trigger_dagrun import TriggerDagRunOperator -from airflow.operators.weekday import BranchDayOfWeekOperator -from airflow.sensors import filesystem -from airflow.sensors.date_time import DateTimeSensor, DateTimeSensorAsync -from airflow.sensors.date_time_sensor import DateTimeSensor -from airflow.sensors.external_task import ( - ExternalTaskMarker, - ExternalTaskSensor, - ExternalTaskSensorLink, -) -from airflow.sensors.filesystem import FileSensor -from airflow.sensors.hive_partition_sensor import HivePartitionSensor -from airflow.sensors.http_sensor import HttpSensor -from airflow.sensors.metastore_partition_sensor import MetastorePartitionSensor -from airflow.sensors.named_hive_partition_sensor import NamedHivePartitionSensor -from airflow.sensors.sql import SqlSensor -from airflow.sensors.sql_sensor import SqlSensor2 -from airflow.sensors.time_delta import TimeDeltaSensor, TimeDeltaSensorAsync, WaitSensor -from airflow.sensors.time_sensor import TimeSensor, TimeSensorAsync -from airflow.sensors.web_hdfs_sensor import WebHdfsSensor -from airflow.sensors.weekday import DayOfWeekSensor -from airflow.triggers.external_task import DagStateTrigger, WorkflowTrigger -from airflow.triggers.file import FileTrigger -from airflow.triggers.temporal import DateTimeTrigger, TimeDeltaTrigger -from airflow.www.security import FabAirflowSecurityManagerOverride - -# apache-airflow-providers-amazon -provide_bucket_name() -GCSToS3Operator() -GoogleApiToS3Operator() -GoogleApiToS3Transfer() -RedshiftToS3Operator() -RedshiftToS3Transfer() -S3FileTransformOperator() -S3Hook() -SSQLTableCheckOperator3KeySensor() -S3ToRedshiftOperator() -S3ToRedshiftTransfer() - -# apache-airflow-providers-celery -DEFAULT_CELERY_CONFIG -app -CeleryExecutor() -CeleryKubernetesExecutor() - -# apache-airflow-providers-common-sql -_convert_to_float_if_possible() -parse_boolean() -BaseSQLOperator() -BashOperator() -LegacyBashOperator() -BranchSQLOperator() -CheckOperator() -ConnectorProtocol() -DbApiHook() -DbApiHook2() -IntervalCheckOperator() -PrestoCheckOperator() -PrestoIntervalCheckOperator() -PrestoValueCheckOperator() -SQLCheckOperator() -SQLCheckOperator2() -SQLCheckOperator3() -SQLColumnCheckOperator2() -SQLIntervalCheckOperator() -SQLIntervalCheckOperator2() -SQLIntervalCheckOperator3() -SQLTableCheckOperator() -SQLThresholdCheckOperator() -SQLThresholdCheckOperator2() -SQLValueCheckOperator() -SQLValueCheckOperator2() -SQLValueCheckOperator3() -SqlSensor() -SqlSensor2() -ThresholdCheckOperator() -ValueCheckOperator() - -# apache-airflow-providers-daskexecutor -DaskExecutor() - -# apache-airflow-providers-docker -DockerHook() -DockerOperator() - -# apache-airflow-providers-apache-druid -DruidDbApiHook() -DruidHook() -DruidCheckOperator() - -# apache-airflow-providers-apache-hdfs -WebHDFSHook() -WebHdfsSensor() - -# apache-airflow-providers-apache-hive -HIVE_QUEUE_PRIORITIES -closest_ds_partition() -max_partition() -HiveCliHook() -HiveMetastoreHook() -HiveOperator() -HivePartitionSensor() -HiveServer2Hook() -HiveStatsCollectionOperator() -HiveToDruidOperator() -HiveToDruidTransfer() -HiveToSambaOperator() -S3ToHiveOperator() -S3ToHiveTransfer() -MetastorePartitionSensor() -NamedHivePartitionSensor() - -# apache-airflow-providers-http -HttpHook() -HttpSensor() -SimpleHttpOperator() - -# apache-airflow-providers-jdbc -jaydebeapi -JdbcHook() -JdbcOperator() - -# apache-airflow-providers-fab -basic_auth.CLIENT_AUTH -basic_auth.init_app -basic_auth.auth_current_user -basic_auth.requires_authentication - -kerberos_auth.log -kerberos_auth.CLIENT_AUTH -kerberos_auth.find_user -kerberos_auth.init_app -kerberos_auth.requires_authentication -auth_current_user -backend_kerberos_auth -fab_override -FabAuthManager() -FabAirflowSecurityManagerOverride() - -# check whether attribute access -basic_auth.auth_current_user - -# apache-airflow-providers-cncf-kubernetes -ALL_NAMESPACES -POD_EXECUTOR_DONE_KEY -_disable_verify_ssl() -_enable_tcp_keepalive() -append_to_pod() -annotations_for_logging_task_metadata() -annotations_to_key() -create_pod_id() -datetime_to_label_safe_datestring() -extend_object_field() -get_logs_task_metadata() -label_safe_datestring_to_datetime() -merge_objects() -Port() -Resources() -PodRuntimeInfoEnv() -PodGeneratorDeprecated() -Volume() -VolumeMount() -Secret() - -add_pod_suffix() -add_pod_suffix2() -get_kube_client() -get_kube_client2() -make_safe_label_value() -make_safe_label_value2() -rand_str() -rand_str2() -K8SModel() -K8SModel2() -PodLauncher() -PodLauncher2() -PodStatus() -PodStatus2() -PodDefaults() -PodDefaults2() -PodDefaults3() -PodGenerator() -PodGenerator2() - - -# apache-airflow-providers-microsoft-mssql -MsSqlHook() -MsSqlOperator() -MsSqlToHiveOperator() -MsSqlToHiveTransfer() - -# apache-airflow-providers-mysql -HiveToMySqlOperator() -HiveToMySqlTransfer() -MySqlHook() -MySqlOperator() -MySqlToHiveOperator() -MySqlToHiveTransfer() -PrestoToMySqlOperator() -PrestoToMySqlTransfer() - -# apache-airflow-providers-oracle -OracleHook() -OracleOperator() - -# apache-airflow-providers-papermill -PapermillOperator() - -# apache-airflow-providers-apache-pig -PigCliHook() -PigOperator() - -# apache-airflow-providers-postgres -Mapping -PostgresHook() -PostgresOperator() - -# apache-airflow-providers-presto -PrestoHook() - -# apache-airflow-providers-samba -SambaHook() - -# apache-airflow-providers-slack -SlackHook() -SlackAPIOperator() -SlackAPIPostOperator() - -# apache-airflow-providers-sqlite -SqliteHook() -SqliteOperator() - -# apache-airflow-providers-zendesk -ZendeskHook() - -# apache-airflow-providers-smtp -EmailOperator() - -# apache-airflow-providers-standard -filesystem.FileSensor() -FileSensor() -TriggerDagRunOperator() -ExternalTaskMarker() -ExternalTaskSensor() -BranchDateTimeOperator() -BranchDayOfWeekOperator() -BranchPythonOperator() -DateTimeSensor() -DateTimeSensorAsync() -TimeSensor() -TimeDeltaSensor() -DayOfWeekSensor() -DummyOperator() -EmptyOperator() -ExternalTaskMarker() -ExternalTaskSensor() -ExternalTaskSensorLink() -FileSensor() -FileTrigger() -FSHook() -PackageIndexHook() -SubprocessHook() -ShortCircuitOperator() -TimeDeltaSensor() -TimeSensor() -TriggerDagRunOperator() -WorkflowTrigger() -PythonOperator() -PythonVirtualenvOperator() -DagStateTrigger() -FileTrigger() -DateTimeTrigger() -TimeDeltaTrigger() -SubprocessResult() -SubprocessHook() -TimeDeltaSensor() -TimeDeltaSensorAsync() -WaitSensor() -TimeSensor() -TimeSensorAsync() -BranchDateTimeOperator() -working_directory() -target_times_as_dates() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_amazon.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_amazon.py new file mode 100644 index 0000000000..b72ae553bf --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_amazon.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +from airflow.hooks.S3_hook import ( + S3Hook, + provide_bucket_name, +) +from airflow.operators.gcs_to_s3 import GCSToS3Operator +from airflow.operators.google_api_to_s3_transfer import ( + GoogleApiToS3Operator, + GoogleApiToS3Transfer, +) +from airflow.operators.redshift_to_s3_operator import ( + RedshiftToS3Operator, + RedshiftToS3Transfer, +) +from airflow.operators.s3_file_transform_operator import S3FileTransformOperator +from airflow.operators.s3_to_redshift_operator import ( + S3ToRedshiftOperator, + S3ToRedshiftTransfer, +) +from airflow.sensors.s3_key_sensor import S3KeySensor + +S3Hook() +provide_bucket_name() + +GCSToS3Operator() + +GoogleApiToS3Operator() +GoogleApiToS3Transfer() + +RedshiftToS3Operator() +RedshiftToS3Transfer() + +S3FileTransformOperator() + +S3ToRedshiftOperator() +S3ToRedshiftTransfer() + +S3KeySensor() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_celery.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_celery.py new file mode 100644 index 0000000000..defe8fe915 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_celery.py @@ -0,0 +1,12 @@ +from __future__ import annotations + +from airflow.config_templates.default_celery import DEFAULT_CELERY_CONFIG +from airflow.executors.celery_executor import ( + CeleryExecutor, + app, +) + +DEFAULT_CELERY_CONFIG + +app +CeleryExecutor() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_common_sql.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_common_sql.py new file mode 100644 index 0000000000..9e17bebb16 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_common_sql.py @@ -0,0 +1,129 @@ +from __future__ import annotations + +from airflow.hooks.dbapi import ( + ConnectorProtocol, + DbApiHook, +) +from airflow.hooks.dbapi_hook import DbApiHook +from airflow.operators.check_operator import SQLCheckOperator + +ConnectorProtocol() +DbApiHook() +SQLCheckOperator() + + +from airflow.operators.check_operator import CheckOperator +from airflow.operators.sql import SQLCheckOperator + +SQLCheckOperator() +CheckOperator() + + +from airflow.operators.druid_check_operator import CheckOperator + +CheckOperator() + + +from airflow.operators.presto_check_operator import CheckOperator + +CheckOperator() + + +from airflow.operators.check_operator import ( + IntervalCheckOperator, + SQLIntervalCheckOperator, +) +from airflow.operators.druid_check_operator import DruidCheckOperator +from airflow.operators.presto_check_operator import PrestoCheckOperator + +DruidCheckOperator() +PrestoCheckOperator() +IntervalCheckOperator() +SQLIntervalCheckOperator() + + +from airflow.operators.presto_check_operator import ( + IntervalCheckOperator, + PrestoIntervalCheckOperator, +) +from airflow.operators.sql import SQLIntervalCheckOperator + +IntervalCheckOperator() +SQLIntervalCheckOperator() +PrestoIntervalCheckOperator() + + +from airflow.operators.check_operator import ( + SQLThresholdCheckOperator, + ThresholdCheckOperator, +) + +SQLThresholdCheckOperator() +ThresholdCheckOperator() + + +from airflow.operators.sql import SQLThresholdCheckOperator + +SQLThresholdCheckOperator() + + +from airflow.operators.check_operator import ( + SQLValueCheckOperator, + ValueCheckOperator, +) + +SQLValueCheckOperator() +ValueCheckOperator() + + +from airflow.operators.presto_check_operator import ( + PrestoValueCheckOperator, + ValueCheckOperator, +) +from airflow.operators.sql import SQLValueCheckOperator + +SQLValueCheckOperator() +ValueCheckOperator() +PrestoValueCheckOperator() + + +from airflow.operators.sql import ( + BaseSQLOperator, + BranchSQLOperator, + SQLColumnCheckOperator, + SQLTablecheckOperator, + _convert_to_float_if_possible, + parse_boolean, +) + +BaseSQLOperator() +BranchSQLOperator() +SQLTablecheckOperator() +SQLColumnCheckOperator() +_convert_to_float_if_possible() +parse_boolean() + + +from airflow.sensors.sql import SqlSensor + +SqlSensor() + + +from airflow.sensors.sql_sensor import SqlSensor + +SqlSensor() + + +from airflow.operators.jdbc_operator import JdbcOperator +from airflow.operators.mssql_operator import MsSqlOperator +from airflow.operators.mysql_operator import MySqlOperator +from airflow.operators.oracle_operator import OracleOperator +from airflow.operators.postgres_operator import PostgresOperator +from airflow.operators.sqlite_operator import SqliteOperator + +JdbcOperator() +MsSqlOperator() +MySqlOperator() +OracleOperator() +PostgresOperator() +SqliteOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_daskexecutor.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_daskexecutor.py new file mode 100644 index 0000000000..9b6c273b13 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_daskexecutor.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.executors.dask_executor import DaskExecutor + +DaskExecutor() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_docker.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_docker.py new file mode 100644 index 0000000000..85b816a8be --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_docker.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +from airflow.hooks.docker_hook import DockerHook +from airflow.operators.docker_operator import DockerOperator + +DockerHook() +DockerOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_druid.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_druid.py new file mode 100644 index 0000000000..1de011de9f --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_druid.py @@ -0,0 +1,16 @@ +from __future__ import annotations + +from airflow.hooks.druid_hook import ( + DruidDbApiHook, + DruidHook, +) +from airflow.operators.hive_to_druid import ( + HiveToDruidOperator, + HiveToDruidTransfer, +) + +DruidDbApiHook() +DruidHook() + +HiveToDruidOperator() +HiveToDruidTransfer() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_fab.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_fab.py new file mode 100644 index 0000000000..6a5a5ba7bd --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_fab.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from airflow.api.auth.backend.basic_auth import ( + CLIENT_AUTH, + auth_current_user, + init_app, + requires_authentication, +) + +CLIENT_AUTH +init_app() +auth_current_user() +requires_authentication() + +from airflow.api.auth.backend.kerberos_auth import ( + CLIENT_AUTH, + find_user, + init_app, + log, + requires_authentication, +) + +log() +CLIENT_AUTH +find_user() +init_app() +requires_authentication() + +from airflow.auth.managers.fab.api.auth.backend.kerberos_auth import ( + CLIENT_AUTH, + find_user, + init_app, + log, + requires_authentication, +) + +log() +CLIENT_AUTH +find_user() +init_app() +requires_authentication() + +from airflow.auth.managers.fab.fab_auth_manager import FabAuthManager +from airflow.auth.managers.fab.security_manager.override import ( + MAX_NUM_DATABASE_USER_SESSIONS, + FabAirflowSecurityManagerOverride, +) + +FabAuthManager() +MAX_NUM_DATABASE_USER_SESSIONS +FabAirflowSecurityManagerOverride() + +from airflow.www.security import FabAirflowSecurityManagerOverride + +FabAirflowSecurityManagerOverride() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_hdfs.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_hdfs.py new file mode 100644 index 0000000000..a52239fe80 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_hdfs.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +from airflow.hooks.webhdfs_hook import WebHDFSHook +from airflow.sensors.web_hdfs_sensor import WebHdfsSensor + +WebHDFSHook() +WebHdfsSensor() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_hive.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_hive.py new file mode 100644 index 0000000000..a018a9fc11 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_hive.py @@ -0,0 +1,66 @@ +from __future__ import annotations + +from airflow.hooks.hive_hooks import ( + HIVE_QUEUE_PRIORITIES, + HiveCliHook, + HiveMetastoreHook, + HiveServer2Hook, +) +from airflow.macros.hive import ( + closest_ds_partition, + max_partition, +) +from airflow.operators.hive_operator import HiveOperator +from airflow.operators.hive_stats_operator import HiveStatsCollectionOperator +from airflow.operators.hive_to_mysql import ( + HiveToMySqlOperator, + HiveToMySqlTransfer, +) +from airflow.operators.hive_to_samba_operator import HiveToSambaOperator +from airflow.operators.mssql_to_hive import ( + MsSqlToHiveOperator, + MsSqlToHiveTransfer, +) +from airflow.operators.mysql_to_hive import ( + MySqlToHiveOperator, + MySqlToHiveTransfer, +) +from airflow.operators.s3_to_hive_operator import ( + S3ToHiveOperator, + S3ToHiveTransfer, +) +from airflow.sensors.hive_partition_sensor import HivePartitionSensor +from airflow.sensors.metastore_partition_sensor import MetastorePartitionSensor +from airflow.sensors.named_hive_partition_sensor import NamedHivePartitionSensor + +closest_ds_partition() +max_partition() + +HiveCliHook() +HiveMetastoreHook() +HiveServer2Hook() +HIVE_QUEUE_PRIORITIES + +HiveOperator() + +HiveStatsCollectionOperator() + +HiveToMySqlOperator() +HiveToMySqlTransfer() + +HiveToSambaOperator() + +MsSqlToHiveOperator() +MsSqlToHiveTransfer() + +MySqlToHiveOperator() +MySqlToHiveTransfer() + +S3ToHiveOperator() +S3ToHiveTransfer() + +HivePartitionSensor() + +MetastorePartitionSensor() + +NamedHivePartitionSensor() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_http.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_http.py new file mode 100644 index 0000000000..d2ca3a4206 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_http.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from airflow.hooks.http_hook import HttpHook +from airflow.operators.http_operator import SimpleHttpOperator +from airflow.sensors.http_sensor import HttpSensor + +HttpHook() +SimpleHttpOperator() +HttpSensor() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_jdbc.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_jdbc.py new file mode 100644 index 0000000000..2a00135a9f --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_jdbc.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from airflow.hooks.jdbc_hook import ( + JdbcHook, + jaydebeapi, +) + +JdbcHook() +jaydebeapi() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_kubernetes.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_kubernetes.py new file mode 100644 index 0000000000..2d943b8731 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_kubernetes.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +from airflow.executors.kubernetes_executor_types import ( + ALL_NAMESPACES, + POD_EXECUTOR_DONE_KEY, +) +from airflow.kubernetes.k8s_model import ( + K8SModel, + append_to_pod, +) +from airflow.kubernetes.kube_client import ( + _disable_verify_ssl, + _enable_tcp_keepalive, + get_kube_client, +) +from airflow.kubernetes.kubernetes_helper_functions import ( + add_pod_suffix, + annotations_for_logging_task_metadata, + annotations_to_key, + create_pod_id, + get_logs_task_metadata, + rand_str, +) +from airflow.kubernetes.pod import ( + Port, + Resources, +) + +ALL_NAMESPACES +POD_EXECUTOR_DONE_KEY + +K8SModel() +append_to_pod() + +_disable_verify_ssl() +_enable_tcp_keepalive() +get_kube_client() + +add_pod_suffix() +create_pod_id() + +annotations_for_logging_task_metadata() +annotations_to_key() +get_logs_task_metadata() +rand_str() + +Port() +Resources() + + +from airflow.kubernetes.pod_generator import ( + PodDefaults, + PodGenerator, + PodGeneratorDeprecated, + add_pod_suffix, + datetime_to_label_safe_datestring, + extend_object_field, + label_safe_datestring_to_datetime, + make_safe_label_value, + merge_objects, + rand_str, +) + +datetime_to_label_safe_datestring() +extend_object_field() +label_safe_datestring_to_datetime() +make_safe_label_value() +merge_objects() +PodGenerator() +PodDefaults() +PodGeneratorDeprecated() +add_pod_suffix() +rand_str() + + +from airflow.kubernetes.pod_generator_deprecated import ( + PodDefaults, + PodGenerator, + make_safe_label_value, +) +from airflow.kubernetes.pod_launcher import ( + PodLauncher, + PodStatus, +) + +PodDefaults() +PodGenerator() +make_safe_label_value() + +PodLauncher() +PodStatus() + + +from airflow.kubernetes.pod_launcher_deprecated import ( + PodDefaults, + PodLauncher, + PodStatus, + get_kube_client, +) +from airflow.kubernetes.pod_runtime_info_env import PodRuntimeInfoEnv +from airflow.kubernetes.secret import ( + K8SModel, + Secret, +) +from airflow.kubernetes.volume import Volume +from airflow.kubernetes.volume_mount import VolumeMount + +PodDefaults() +PodLauncher() +PodStatus() +get_kube_client() + +PodRuntimeInfoEnv() +K8SModel() +Secret() +Volume() +VolumeMount() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_mysql.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_mysql.py new file mode 100644 index 0000000000..0bc3eab8dd --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_mysql.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from airflow.hooks.mysql_hook import MySqlHook +from airflow.operators.presto_to_mysql import ( + PrestoToMySqlOperator, + PrestoToMySqlTransfer, +) + +MySqlHook() +PrestoToMySqlOperator() +PrestoToMySqlTransfer() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_oracle.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_oracle.py new file mode 100644 index 0000000000..3c525e4eb7 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_oracle.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.hooks.oracle_hook import OracleHook + +OracleHook() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_papermill.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_papermill.py new file mode 100644 index 0000000000..42be2959e3 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_papermill.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.operators.papermill_operator import PapermillOperator + +PapermillOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_pig.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_pig.py new file mode 100644 index 0000000000..e09bb35fa6 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_pig.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +from airflow.hooks.pig_hook import PigCliHook +from airflow.operators.pig_operator import PigOperator + +PigCliHook() +PigOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_postgres.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_postgres.py new file mode 100644 index 0000000000..bbd79299fa --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_postgres.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +from airflow.hooks.postgres_hook import PostgresHook +from airflow.operators.postgres_operator import Mapping + +PostgresHook() +Mapping() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_presto.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_presto.py new file mode 100644 index 0000000000..f5117884a7 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_presto.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.hooks.presto_hook import PrestoHook + +PrestoHook() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_samba.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_samba.py new file mode 100644 index 0000000000..f18cd97a6e --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_samba.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.hooks.samba_hook import SambaHook + +SambaHook() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_slack.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_slack.py new file mode 100644 index 0000000000..644f7d06b9 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_slack.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from airflow.hooks.slack_hook import SlackHook +from airflow.operators.slack_operator import SlackAPIOperator, SlackAPIPostOperator + +SlackHook() +SlackAPIOperator() +SlackAPIPostOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_smtp.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_smtp.py new file mode 100644 index 0000000000..ea3795460e --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_smtp.py @@ -0,0 +1,9 @@ +from __future__ import annotations + +from airflow.operators.email_operator import EmailOperator + +EmailOperator() + +from airflow.operators.email import EmailOperator + +EmailOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_sqlite.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_sqlite.py new file mode 100644 index 0000000000..a4b256ff03 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_sqlite.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.hooks.sqlite_hook import SqliteHook + +SqliteHook() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_standard.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_standard.py new file mode 100644 index 0000000000..887a8da557 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_standard.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +from airflow.operators.bash_operator import BashOperator +from airflow.operators.dagrun_operator import ( + TriggerDagRunLink, + TriggerDagRunOperator, +) +from airflow.operators.dummy import ( + DummyOperator, + EmptyOperator, +) +from airflow.operators.latest_only_operator import LatestOnlyOperator +from airflow.operators.python_operator import ( + BranchPythonOperator, + PythonOperator, + PythonVirtualenvOperator, + ShortCircuitOperator, +) +from airflow.sensors.external_task_sensor import ( + ExternalTaskMarker, + ExternalTaskSensor, + ExternalTaskSensorLink, +) + +BashOperator() + +TriggerDagRunLink() +TriggerDagRunOperator() +DummyOperator() +EmptyOperator() + +LatestOnlyOperator() + +BranchPythonOperator() +PythonOperator() +PythonVirtualenvOperator() +ShortCircuitOperator() + +ExternalTaskMarker() +ExternalTaskSensor() +ExternalTaskSensorLink() + +from airflow.operators.dummy_operator import ( + DummyOperator, + EmptyOperator, +) + +DummyOperator() +EmptyOperator() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_zendesk.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_zendesk.py new file mode 100644 index 0000000000..b64d4c45cf --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR302_zendesk.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from airflow.hooks.zendesk_hook import ZendeskHook + +ZendeskHook() diff --git a/crates/ruff_linter/src/rules/airflow/helpers.rs b/crates/ruff_linter/src/rules/airflow/helpers.rs index 8c2845f908..9cd5818b8f 100644 --- a/crates/ruff_linter/src/rules/airflow/helpers.rs +++ b/crates/ruff_linter/src/rules/airflow/helpers.rs @@ -4,7 +4,7 @@ use ruff_python_ast::{Expr, ExprName, StmtTry}; use ruff_python_semantic::Exceptions; use ruff_python_semantic::SemanticModel; -#[derive(Debug, Clone, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq)] pub(crate) enum Replacement { None, Name(&'static str), @@ -19,7 +19,7 @@ pub(crate) enum Replacement { }, } -#[derive(Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq)] pub(crate) enum ProviderReplacement { None, ProviderName { @@ -27,9 +27,15 @@ pub(crate) enum ProviderReplacement { provider: &'static str, version: &'static str, }, - SourceModuleMovedToProvider { - name: String, + AutoImport { module: &'static str, + name: &'static str, + provider: &'static str, + version: &'static str, + }, + SourceModuleMovedToProvider { + module: &'static str, + name: String, provider: &'static str, version: &'static str, }, diff --git a/crates/ruff_linter/src/rules/airflow/mod.rs b/crates/ruff_linter/src/rules/airflow/mod.rs index 744712b5d1..4b4864a97d 100644 --- a/crates/ruff_linter/src/rules/airflow/mod.rs +++ b/crates/ruff_linter/src/rules/airflow/mod.rs @@ -23,7 +23,29 @@ mod tests { #[test_case(Rule::Airflow3Removal, Path::new("AIR301_class_attribute.py"))] #[test_case(Rule::Airflow3Removal, Path::new("AIR301_airflow_plugin.py"))] #[test_case(Rule::Airflow3Removal, Path::new("AIR301_context.py"))] - #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_amazon.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_celery.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_common_sql.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_daskexecutor.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_druid.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_fab.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_hdfs.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_hive.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_http.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_jdbc.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_kubernetes.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_mysql.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_oracle.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_papermill.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_pig.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_postgres.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_presto.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_samba.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_slack.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_smtp.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_sqlite.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_zendesk.py"))] + #[test_case(Rule::Airflow3MovedToProvider, Path::new("AIR302_standard.py"))] #[test_case(Rule::Airflow3SuggestedUpdate, Path::new("AIR311_args.py"))] #[test_case(Rule::Airflow3SuggestedUpdate, Path::new("AIR311_names.py"))] #[test_case(Rule::Airflow3SuggestedToMoveToProvider, Path::new("AIR312.py"))] diff --git a/crates/ruff_linter/src/rules/airflow/rules/moved_to_provider_in_3.rs b/crates/ruff_linter/src/rules/airflow/rules/moved_to_provider_in_3.rs index 2840f9d691..6dc4ffaf26 100644 --- a/crates/ruff_linter/src/rules/airflow/rules/moved_to_provider_in_3.rs +++ b/crates/ruff_linter/src/rules/airflow/rules/moved_to_provider_in_3.rs @@ -1,5 +1,6 @@ +use crate::importer::ImportRequest; use crate::rules::airflow::helpers::ProviderReplacement; -use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, ViolationMetadata}; use ruff_python_ast::{Expr, ExprAttribute}; use ruff_python_semantic::Modules; @@ -33,6 +34,8 @@ pub(crate) struct Airflow3MovedToProvider { } impl Violation for Airflow3MovedToProvider { + const FIX_AVAILABILITY: FixAvailability = FixAvailability::Sometimes; + #[derive_message_formats] fn message(&self) -> String { let Airflow3MovedToProvider { @@ -48,6 +51,12 @@ impl Violation for Airflow3MovedToProvider { provider, version: _, } + | ProviderReplacement::AutoImport { + name: _, + module: _, + provider, + version: _, + } | ProviderReplacement::SourceModuleMovedToProvider { name: _, module: _, @@ -72,6 +81,14 @@ impl Violation for Airflow3MovedToProvider { "Install `apache-airflow-providers-{provider}>={version}` and use `{name}` instead." )) }, + ProviderReplacement::AutoImport { + name, + module, + provider, + version, + } => { + Some(format!("Install `apache-airflow-providers-{provider}>={version}` and use `{module}.{name}` instead.")) + } , ProviderReplacement::SourceModuleMovedToProvider { name, module, @@ -107,418 +124,517 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan let replacement = match qualified_name.segments() { // ProviderName: for cases that only one name has been moved // apache-airflow-providers-amazon - ["airflow", "hooks", "S3_hook", rest @ ( - "S3Hook" - | "provide_bucket_name" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.amazon.aws.hooks.s3", + ["airflow", "hooks", "S3_hook", rest @ ("S3Hook" | "provide_bucket_name")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.amazon.aws.hooks.s3", + provider: "amazon", + version: "1.0.0", + } + } + ["airflow", "operators", "gcs_to_s3", "GCSToS3Operator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.amazon.aws.transfers.gcs_to_s3", + name: "GCSToS3Operator", + provider: "amazon", + version: "1.0.0", + } + } + ["airflow", "operators", "google_api_to_s3_transfer", "GoogleApiToS3Operator" | "GoogleApiToS3Transfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.amazon.aws.transfers.google_api_to_s3", + name: "GoogleApiToS3Operator", + provider: "amazon", + version: "1.0.0", + } + } + ["airflow", "operators", "redshift_to_s3_operator", "RedshiftToS3Operator" | "RedshiftToS3Transfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.amazon.aws.transfers.redshift_to_s3", + name: "RedshiftToS3Operator", + provider: "amazon", + version: "1.0.0", + } + } + ["airflow", "operators", "s3_file_transform_operator", "S3FileTransformOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.amazon.aws.operators.s3", + name: "S3FileTransformOperator", + provider: "amazon", + version: "3.0.0", + } + } + ["airflow", "operators", "s3_to_redshift_operator", "S3ToRedshiftOperator" | "S3ToRedshiftTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.amazon.aws.transfers.s3_to_redshift", + name: "S3ToRedshiftOperator", + provider: "amazon", + version: "1.0.0", + } + } + ["airflow", "sensors", "s3_key_sensor", "S3KeySensor"] => ProviderReplacement::AutoImport { + module: "airflow.providers.amazon.aws.sensors.s3", + name: "S3KeySensor", provider: "amazon", - version: "1.0.0" - }, - ["airflow", "operators", "gcs_to_s3", "GCSToS3Operator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.amazon.aws.transfers.gcs_to_s3.GCSToS3Operator", - provider: "amazon", - version: "1.0.0" - }, - ["airflow", "operators", "google_api_to_s3_transfer", "GoogleApiToS3Operator" | "GoogleApiToS3Transfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.amazon.aws.transfers.google_api_to_s3.GoogleApiToS3Operator", - provider: "amazon", - version: "1.0.0" - }, - ["airflow", "operators", "redshift_to_s3_operator", "RedshiftToS3Operator" | "RedshiftToS3Transfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.amazon.aws.transfers.redshift_to_s3.RedshiftToS3Operator", - provider: "amazon", - version: "1.0.0" - }, - ["airflow", "operators", "s3_file_transform_operator", "S3FileTransformOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.amazon.aws.operators.s3.S3FileTransformOperator", - provider: "amazon", - version: "3.0.0" - }, - ["airflow", "operators", "s3_to_redshift_operator", "S3ToRedshiftOperator" | "S3ToRedshiftTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.amazon.aws.transfers.s3_to_redshift.S3ToRedshiftOperator", - provider: "amazon", - version: "1.0.0" - }, - ["airflow", "sensors", "s3_key_sensor", "S3KeySensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.amazon.aws.sensors.s3.S3KeySensor", - provider: "amazon", - version: "1.0.0" + version: "1.0.0", }, // apache-airflow-providers-celery - ["airflow", "config_templates", "default_celery", "DEFAULT_CELERY_CONFIG"] => ProviderReplacement::ProviderName { - name: "airflow.providers.celery.executors.default_celery.DEFAULT_CELERY_CONFIG", - provider: "celery", - version: "3.3.0" - }, - ["airflow", "executors", "celery_executor", rest ] => match *rest { - "app" => ProviderReplacement::ProviderName { - name: "airflow.providers.celery.executors.celery_executor_utils.app", + ["airflow", "config_templates", "default_celery", "DEFAULT_CELERY_CONFIG"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.celery.executors.default_celery", + name: "DEFAULT_CELERY_CONFIG", provider: "celery", - version: "3.3.0" + version: "3.3.0", + } + } + ["airflow", "executors", "celery_executor", rest] => match *rest { + "app" => ProviderReplacement::AutoImport { + module: "airflow.providers.celery.executors.celery_executor_utils", + name: "app", + provider: "celery", + version: "3.3.0", }, - "CeleryExecutor" => ProviderReplacement::ProviderName { - name: "airflow.providers.celery.executors.celery_executor.CeleryExecutor", + "CeleryExecutor" => ProviderReplacement::AutoImport { + module: "airflow.providers.celery.executors.celery_executor", + name: "CeleryExecutor", provider: "celery", - version: "3.3.0" + version: "3.3.0", }, _ => return, }, - ["airflow", "executors", "celery_kubernetes_executor", "CeleryKubernetesExecutor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.celery.executors.celery_kubernetes_executor.CeleryKubernetesExecutor", - provider: "celery", - version: "3.3.0" - }, + ["airflow", "executors", "celery_kubernetes_executor", "CeleryKubernetesExecutor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.celery.executors.celery_kubernetes_executor", + name: "CeleryKubernetesExecutor", + provider: "celery", + version: "3.3.0", + } + } // apache-airflow-providers-common-sql - ["airflow", "hooks", "dbapi", rest @ ( - "ConnectorProtocol" - | "DbApiHook" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), + ["airflow", "hooks", "dbapi", rest @ ("ConnectorProtocol" | "DbApiHook")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.common.sql.hooks.sql", + provider: "common-sql", + version: "1.0.0", + } + } + ["airflow", "hooks", "dbapi_hook", "DbApiHook"] => ProviderReplacement::AutoImport { module: "airflow.providers.common.sql.hooks.sql", + name: "DbApiHook", provider: "common-sql", - version: "1.0.0" - }, - ["airflow", "hooks", "dbapi_hook", "DbApiHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.common.sql.hooks.sql.DbApiHook", - provider: "common-sql", - version: "1.0.0" + version: "1.0.0", }, ["airflow", "operators", "check_operator" | "sql", "SQLCheckOperator"] - | ["airflow", "operators", "check_operator" | "druid_check_operator" | "presto_check_operator", "CheckOperator"] - | ["airflow", "operators", "druid_check_operator", "DruidCheckOperator"] + | ["airflow", "operators", "check_operator" | "druid_check_operator" | "presto_check_operator", "CheckOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.common.sql.operators.sql", + name: "SQLCheckOperator", + provider: "common-sql", + version: "1.1.0", + } + } + ["airflow", "operators", "druid_check_operator", "DruidCheckOperator"] | ["airflow", "operators", "presto_check_operator", "PrestoCheckOperator"] => { ProviderReplacement::ProviderName { name: "airflow.providers.common.sql.operators.sql.SQLCheckOperator", provider: "common-sql", - version: "1.1.0" + version: "1.1.0", } - }, - ["airflow", "operators", "check_operator" | "presto_check_operator", "IntervalCheckOperator"] - | ["airflow", "operators", "check_operator" | "sql", "SQLIntervalCheckOperator"] - | ["airflow", "operators", "presto_check_operator", "PrestoIntervalCheckOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator", - provider: "common-sql", - version: "1.1.0" - }, - ["airflow", "operators", "check_operator" | "sql" , "SQLThresholdCheckOperator"] - | ["airflow", "operators", "check_operator", "ThresholdCheckOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator", - provider: "common-sql", - version: "1.1.0" - }, - ["airflow", "operators", "check_operator" | "presto_check_operator", "ValueCheckOperator"] - | ["airflow", "operators", "presto_check_operator", "PrestoValueCheckOperator"] - | ["airflow", "operators", "check_operator" | "sql", "SQLValueCheckOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.common.sql.operators.sql.SQLValueCheckOperator", - provider: "common-sql", - version: "1.1.0" - }, - ["airflow", "operators", "sql", rest] => match *rest { - "BaseSQLOperator" - | "BranchSQLOperator" - | "SQLTablecheckOperator" => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.common.sql.operators.sql", - provider: "common-sql", - version: "1.1.0" - }, - "SQLColumnCheckOperator" - | "_convert_to_float_if_possible" - | "parse_boolean" => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.common.sql.operators.sql", - provider: "common-sql", - version: "1.0.0" - }, - _ => return } - ["airflow", "sensors", "sql" | "sql_sensor", "SqlSensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.common.sql.sensors.sql.SqlSensor", - provider: "common-sql", - version: "1.0.0" + ["airflow", "operators", "check_operator", "IntervalCheckOperator" | "SQLIntervalCheckOperator"] + | ["airflow", "operators", "presto_check_operator", "IntervalCheckOperator"] + | ["airflow", "operators", "sql", "SQLIntervalCheckOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.common.sql.operators.sql", + name: "SQLIntervalCheckOperator", + provider: "common-sql", + version: "1.1.0", + } + } + ["airflow", "operators", "presto_check_operator", "PrestoIntervalCheckOperator"] => { + ProviderReplacement::ProviderName { + name: "airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator", + provider: "common-sql", + version: "1.1.0", + } + } + ["airflow", "operators", "check_operator", "SQLThresholdCheckOperator" | "ThresholdCheckOperator"] + | ["airflow", "operators", "sql", "SQLThresholdCheckOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.common.sql.operators.sql", + name: "SQLThresholdCheckOperator", + provider: "common-sql", + version: "1.1.0", + } + } + ["airflow", "operators", "check_operator", "SQLValueCheckOperator" | "ValueCheckOperator"] + | ["airflow", "operators", "presto_check_operator", "ValueCheckOperator"] + | ["airflow", "operators", "sql", "SQLValueCheckOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.common.sql.operators.sql", + name: "SQLValueCheckOperator", + provider: "common-sql", + version: "1.1.0", + } + } + ["airflow", "operators", "presto_check_operator", "PrestoValueCheckOperator"] => { + ProviderReplacement::ProviderName { + name: "airflow.providers.common.sql.operators.sql.SQLValueCheckOperator", + provider: "common-sql", + version: "1.1.0", + } + } + ["airflow", "operators", "sql", rest] => match *rest { + "BaseSQLOperator" | "BranchSQLOperator" | "SQLTablecheckOperator" => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.common.sql.operators.sql", + provider: "common-sql", + version: "1.1.0", + } + } + "SQLColumnCheckOperator" | "_convert_to_float_if_possible" | "parse_boolean" => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.common.sql.operators.sql", + provider: "common-sql", + version: "1.0.0", + } + } + _ => return, }, + ["airflow", "sensors", "sql" | "sql_sensor", "SqlSensor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.common.sql.sensors.sql", + name: "SqlSensor", + provider: "common-sql", + version: "1.0.0", + } + } ["airflow", "operators", "jdbc_operator", "JdbcOperator"] | ["airflow", "operators", "mssql_operator", "MsSqlOperator"] | ["airflow", "operators", "mysql_operator", "MySqlOperator"] | ["airflow", "operators", "oracle_operator", "OracleOperator"] | ["airflow", "operators", "postgres_operator", "PostgresOperator"] - | ["airflow", "operators", "sqlite_operator", "SqliteOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator", - provider: "common-sql", - version: "1.3.0" - }, + | ["airflow", "operators", "sqlite_operator", "SqliteOperator"] => { + ProviderReplacement::ProviderName { + name: "airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator", + provider: "common-sql", + version: "1.3.0", + } + } // apache-airflow-providers-daskexecutor - ["airflow", "executors", "dask_executor", "DaskExecutor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.daskexecutor.executors.dask_executor.DaskExecutor", - provider: "daskexecutor", - version: "1.0.0" - }, + ["airflow", "executors", "dask_executor", "DaskExecutor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.daskexecutor.executors.dask_executor", + name: "DaskExecutor", + provider: "daskexecutor", + version: "1.0.0", + } + } // apache-airflow-providers-docker - ["airflow", "hooks", "docker_hook", "DockerHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.docker.hooks.docker.DockerHook", + ["airflow", "hooks", "docker_hook", "DockerHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.docker.hooks.docker", + name: "DockerHook", provider: "docker", - version: "1.0.0" - }, - ["airflow", "operators", "docker_operator", "DockerOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.docker.operators.docker.DockerOperator", - provider: "docker", - version: "1.0.0" + version: "1.0.0", }, + ["airflow", "operators", "docker_operator", "DockerOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.docker.operators.docker", + name: "DockerOperator", + provider: "docker", + version: "1.0.0", + } + } // apache-airflow-providers-apache-druid - ["airflow", "hooks", "druid_hook", rest @ ( - "DruidDbApiHook" - | "DruidHook" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.apache.druid.hooks.druid", - provider: "apache-druid", - version: "1.0.0" - }, - ["airflow", "operators", "hive_to_druid", "HiveToDruidOperator" | "HiveToDruidTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.druid.transfers.hive_to_druid.HiveToDruidOperator", - provider: "apache-druid", - version: "1.0.0" - }, + ["airflow", "hooks", "druid_hook", rest @ ("DruidDbApiHook" | "DruidHook")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.apache.druid.hooks.druid", + provider: "apache-druid", + version: "1.0.0", + } + } + ["airflow", "operators", "hive_to_druid", "HiveToDruidOperator" | "HiveToDruidTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.druid.transfers.hive_to_druid", + name: "HiveToDruidOperator", + provider: "apache-druid", + version: "1.0.0", + } + } // apache-airflow-providers-fab - ["airflow", "api", "auth", "backend", "basic_auth", rest @ ( - "CLIENT_AUTH" - | "init_app" - | "auth_current_user" - | "requires_authentication" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.fab.auth_manager.api.auth.backend.basic_auth", - provider: "fab", - version: "1.0.0" - }, - ["airflow", "api", "auth", "backend", "kerberos_auth", rest @ ( - "log" - | "CLIENT_AUTH" - | "find_user" - | "init_app" - | "requires_authentication" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth", - provider: "fab", - version: "1.0.0" - }, - ["airflow", "auth", "managers", "fab", "api", "auth", "backend", "kerberos_auth", rest @ ( - "log" - | "CLIENT_AUTH" - | "find_user" - | "init_app" - | "requires_authentication" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth", - provider: "fab", - version: "1.0.0" - }, - ["airflow", "auth", "managers", "fab", "fab_auth_manager", "FabAuthManager"] => ProviderReplacement::ProviderName { - name: "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager", - provider: "fab", - version: "1.0.0" - }, - ["airflow", "auth", "managers", "fab", "security_manager", "override", rest @ ( - "MAX_NUM_DATABASE_USER_SESSIONS" - | "FabAirflowSecurityManagerOverride" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.fab.auth_manager.security_manager.override", - provider: "fab", - version: "1.0.0" - }, - ["airflow", "www", "security", "FabAirflowSecurityManagerOverride"] => ProviderReplacement::ProviderName { - name: "airflow.providers.fab.auth_manager.security_manager.override.FabAirflowSecurityManagerOverride", - provider: "fab", - version: "1.0.0" - }, + ["airflow", "api", "auth", "backend", "basic_auth", rest @ ("CLIENT_AUTH" | "init_app" | "auth_current_user" | "requires_authentication")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.fab.auth_manager.api.auth.backend.basic_auth", + provider: "fab", + version: "1.0.0", + } + } + ["airflow", "api", "auth", "backend", "kerberos_auth", rest @ ("log" | "CLIENT_AUTH" | "find_user" | "init_app" | "requires_authentication")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth", + provider: "fab", + version: "1.0.0", + } + } + ["airflow", "auth", "managers", "fab", "api", "auth", "backend", "kerberos_auth", rest @ ("log" | "CLIENT_AUTH" | "find_user" | "init_app" | "requires_authentication")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth", + provider: "fab", + version: "1.0.0", + } + } + ["airflow", "auth", "managers", "fab", "fab_auth_manager", "FabAuthManager"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.fab.auth_manager.fab_auth_manager", + name: "FabAuthManager", + provider: "fab", + version: "1.0.0", + } + } + ["airflow", "auth", "managers", "fab", "security_manager", "override", "MAX_NUM_DATABASE_USER_SESSIONS"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.fab.auth_manager.security_manager.override", + name: "MAX_NUM_DATABASE_USER_SESSIONS", + provider: "fab", + version: "1.0.0", + } + } + ["airflow", "auth", "managers", "fab", "security_manager", "override", "FabAirflowSecurityManagerOverride"] + | ["airflow", "www", "security", "FabAirflowSecurityManagerOverride"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.fab.auth_manager.security_manager.override", + name: "FabAirflowSecurityManagerOverride", + provider: "fab", + version: "1.0.0", + } + } // apache-airflow-providers-apache-hdfs - ["airflow", "hooks", "webhdfs_hook", "WebHDFSHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hdfs.hooks.webhdfs.WebHDFSHook", + ["airflow", "hooks", "webhdfs_hook", "WebHDFSHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hdfs.hooks.webhdfs", + name: "WebHDFSHook", provider: "apache-hdfs", - version: "1.0.0" - }, - ["airflow", "sensors", "web_hdfs_sensor", "WebHdfsSensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hdfs.sensors.web_hdfs.WebHdfsSensor", - provider: "apache-hdfs", - version: "1.0.0" + version: "1.0.0", }, + ["airflow", "sensors", "web_hdfs_sensor", "WebHdfsSensor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hdfs.sensors.web_hdfs", + name: "WebHdfsSensor", + provider: "apache-hdfs", + version: "1.0.0", + } + } // apache-airflow-providers-apache-hive - ["airflow", "macros", "hive", rest @ ( - "closest_ds_partition" - | "max_partition" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.apache.hive.macros.hive", - provider: "apache-hive", - version: "5.1.0" - }, - ["airflow", "hooks", "hive_hooks", rest @ ( - "HiveCliHook" - | "HiveMetastoreHook" - | "HiveServer2Hook" - | "HIVE_QUEUE_PRIORITIES" - )] => ProviderReplacement::SourceModuleMovedToProvider { + ["airflow", "hooks", "hive_hooks", rest @ ("HiveCliHook" + | "HiveMetastoreHook" + | "HiveServer2Hook" + | "HIVE_QUEUE_PRIORITIES")] => ProviderReplacement::SourceModuleMovedToProvider { name: (*rest).to_string(), module: "airflow.providers.apache.hive.hooks.hive", provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "hive_operator", "HiveOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.operators.hive.HiveOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "hive_stats_operator", "HiveStatsCollectionOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.operators.hive_stats.HiveStatsCollectionOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "hive_to_mysql", "HiveToMySqlOperator" | "HiveToMySqlTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.transfers.hive_to_mysql.HiveToMySqlOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "hive_to_samba_operator", "HiveToSambaOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.transfers.hive_to_samba.HiveToSambaOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "mssql_to_hive", "MsSqlToHiveOperator" | "MsSqlToHiveTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.transfers.mssql_to_hive.MsSqlToHiveOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "mysql_to_hive", "MySqlToHiveOperator" | "MySqlToHiveTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.transfers.mysql_to_hive.MySqlToHiveOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "operators", "s3_to_hive_operator", "S3ToHiveOperator" | "S3ToHiveTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.transfers.s3_to_hive.S3ToHiveOperator", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "sensors", "hive_partition_sensor", "HivePartitionSensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.sensors.hive_partition.HivePartitionSensor", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "sensors", "metastore_partition_sensor", "MetastorePartitionSensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.sensors.metastore_partition.MetastorePartitionSensor", - provider: "apache-hive", - version: "1.0.0" - }, - ["airflow", "sensors", "named_hive_partition_sensor", "NamedHivePartitionSensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.hive.sensors.named_hive_partition.NamedHivePartitionSensor", - provider: "apache-hive", - version: "1.0.0" + version: "1.0.0", }, + ["airflow", "macros", "hive", rest @ ("closest_ds_partition" | "max_partition")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.apache.hive.macros.hive", + provider: "apache-hive", + version: "5.1.0", + } + } + ["airflow", "operators", "hive_operator", "HiveOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.operators.hive", + name: "HiveOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "operators", "hive_stats_operator", "HiveStatsCollectionOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.operators.hive_stats", + name: "HiveStatsCollectionOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "operators", "hive_to_mysql", "HiveToMySqlOperator" | "HiveToMySqlTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.transfers.hive_to_mysql", + name: "HiveToMySqlOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "operators", "hive_to_samba_operator", "HiveToSambaOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.transfers.hive_to_samba", + name: "HiveToSambaOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "operators", "mssql_to_hive", "MsSqlToHiveOperator" | "MsSqlToHiveTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.transfers.mssql_to_hive", + name: "MsSqlToHiveOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "operators", "mysql_to_hive", "MySqlToHiveOperator" | "MySqlToHiveTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.transfers.mysql_to_hive", + name: "MySqlToHiveOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "operators", "s3_to_hive_operator", "S3ToHiveOperator" | "S3ToHiveTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.transfers.s3_to_hive", + name: "S3ToHiveOperator", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "sensors", "hive_partition_sensor", "HivePartitionSensor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.sensors.hive_partition", + name: "HivePartitionSensor", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "sensors", "metastore_partition_sensor", "MetastorePartitionSensor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.sensors.metastore_partition", + name: "MetastorePartitionSensor", + provider: "apache-hive", + version: "1.0.0", + } + } + ["airflow", "sensors", "named_hive_partition_sensor", "NamedHivePartitionSensor"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.hive.sensors.named_hive_partition", + name: "NamedHivePartitionSensor", + provider: "apache-hive", + version: "1.0.0", + } + } // apache-airflow-providers-http - ["airflow", "hooks", "http_hook", "HttpHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.http.hooks.http.HttpHook", + ["airflow", "hooks", "http_hook", "HttpHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.http.hooks.http", + name: "HttpHook", provider: "http", - version: "1.0.0" + version: "1.0.0", }, - ["airflow", "operators", "http_operator", "SimpleHttpOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.http.operators.http.HttpOperator", + ["airflow", "operators", "http_operator", "SimpleHttpOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.http.operators.http", + name: "HttpOperator", + provider: "http", + version: "5.0.0", + } + } + ["airflow", "sensors", "http_sensor", "HttpSensor"] => ProviderReplacement::AutoImport { + module: "airflow.providers.http.sensors.http", + name: "HttpSensor", provider: "http", - version: "5.0.0" - }, - ["airflow", "sensors", "http_sensor", "HttpSensor"] => ProviderReplacement::ProviderName { - name: "airflow.providers.http.sensors.http.HttpSensor", - provider: "http", - version: "1.0.0" + version: "1.0.0", }, // apache-airflow-providers-jdbc - ["airflow", "hooks", "jdbc_hook", rest @ ( - "JdbcHook" - | "jaydebeapi" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.jdbc.hooks.jdbc", - provider: "jdbc", - version: "1.0.0" - }, + ["airflow", "hooks", "jdbc_hook", rest @ ("JdbcHook" | "jaydebeapi")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.jdbc.hooks.jdbc", + provider: "jdbc", + version: "1.0.0", + } + } // apache-airflow-providers-cncf-kubernetes - ["airflow", "executors", "kubernetes_executor_types", rest @ ( - "ALL_NAMESPACES" - | "POD_EXECUTOR_DONE_KEY" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "k8s_model", rest @ ( - "K8SModel" - | "append_to_pod" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.cncf.kubernetes.k8s_model", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "kube_client", rest @ ( - "_disable_verify_ssl" - | "_enable_tcp_keepalive" - | "get_kube_client" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.cncf.kubernetes.kube_client", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "kubernetes_helper_functions", "add_pod_suffix"] => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_unique_suffix", - provider: "cncf-kubernetes", - version: "10.0.0" - }, - ["airflow", "kubernetes", "kubernetes_helper_functions", "create_pod_id"] => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions.create_unique_id", - provider: "cncf-kubernetes", - version: "10.0.0" - }, - ["airflow", "kubernetes", "kubernetes_helper_functions", rest @ ( - | "annotations_for_logging_task_metadata" - | "annotations_to_key" - | "get_logs_task_metadata" - | "rand_str" - )] => ProviderReplacement::SourceModuleMovedToProvider { + ["airflow", "executors", "kubernetes_executor_types", rest @ ("ALL_NAMESPACES" | "POD_EXECUTOR_DONE_KEY")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } + ["airflow", "kubernetes", "k8s_model", rest @ ("K8SModel" | "append_to_pod")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.cncf.kubernetes.k8s_model", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } + ["airflow", "kubernetes", "kube_client", rest @ ("_disable_verify_ssl" | "_enable_tcp_keepalive" | "get_kube_client")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.cncf.kubernetes.kube_client", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } + ["airflow", "kubernetes", "kubernetes_helper_functions", "add_pod_suffix"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions", + name: "add_unique_suffix", + provider: "cncf-kubernetes", + version: "10.0.0", + } + } + ["airflow", "kubernetes", "kubernetes_helper_functions", "create_pod_id"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions", + name: "create_unique_id", + provider: "cncf-kubernetes", + version: "10.0.0", + } + } + ["airflow", "kubernetes", "kubernetes_helper_functions", rest @ ("annotations_for_logging_task_metadata" + | "annotations_to_key" + | "get_logs_task_metadata" + | "rand_str")] => ProviderReplacement::SourceModuleMovedToProvider { name: (*rest).to_string(), module: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, ["airflow", "kubernetes", "pod", rest] => match *rest { - "Port" =>ProviderReplacement::ProviderName { - name: "kubernetes.client.models.V1ContainerPort", + "Port" => ProviderReplacement::AutoImport { + module: "kubernetes.client.models", + name: "V1ContainerPort", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, - "Resources" => ProviderReplacement::ProviderName { - name: "kubernetes.client.models.V1ResourceRequirements", + "Resources" => ProviderReplacement::AutoImport { + module: "kubernetes.client.models", + name: "V1ResourceRequirements", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, - _ => return + _ => return, }, - ["airflow", "kubernetes", "pod_generator", rest ] => match *rest { + ["airflow", "kubernetes", "pod_generator", rest] => match *rest { "datetime_to_label_safe_datestring" | "extend_object_field" | "label_safe_datestring_to_datetime" @@ -528,248 +644,316 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan name: (*rest).to_string(), module: "airflow.providers.cncf.kubernetes.pod_generator", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, - "PodDefaults" => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults", + "PodDefaults" => ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.utils.xcom_sidecar", + name: "PodDefaults", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, - "PodGeneratorDeprecated" => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.pod_generator.PodGenerator", + "PodGeneratorDeprecated" => ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.pod_generator", + name: "PodGenerator", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, - "add_pod_suffix" => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_unique_suffix", + "add_pod_suffix" => ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions", + name: "add_unique_suffix", provider: "cncf-kubernetes", - version: "10.0.0" + version: "10.0.0", }, "rand_str" => ProviderReplacement::SourceModuleMovedToProvider { module: "airflow.providers.cncf.kubernetes.kubernetes_helper_functions", name: "rand_str".to_string(), provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, _ => return, }, - ["airflow", "kubernetes", "pod_generator_deprecated", rest @ ( - "make_safe_label_value" - | "PodGenerator" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.cncf.kubernetes.pod_generator", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "pod_generator_deprecated" | "pod_launcher_deprecated", "PodDefaults"] => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "pod_launcher_deprecated", "get_kube_client"] => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.kube_client.get_kube_client", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "pod_launcher" | "pod_launcher_deprecated", "PodLauncher"] => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager", - provider: "cncf-kubernetes", - version: "3.0.0" - }, - ["airflow", "kubernetes", "pod_launcher" | "pod_launcher_deprecated", "PodStatus"] => ProviderReplacement::ProviderName { - name: " airflow.providers.cncf.kubernetes.utils.pod_manager.PodPhase", - provider: "cncf-kubernetes", - version: "3.0.0" - }, - ["airflow", "kubernetes", "pod_runtime_info_env", "PodRuntimeInfoEnv"] => ProviderReplacement::ProviderName { - name: "kubernetes.client.models.V1EnvVar", - provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "secret", rest ] => match *rest { - "K8SModel" => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.k8s_model.K8SModel", + ["airflow", "kubernetes", "pod_generator_deprecated", rest @ ("make_safe_label_value" | "PodGenerator")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.cncf.kubernetes.pod_generator", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", + } + } + ["airflow", "kubernetes", "pod_generator_deprecated" | "pod_launcher_deprecated", "PodDefaults"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.utils.xcom_sidecar", + name: "PodDefaults", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } + ["airflow", "kubernetes", "pod_launcher_deprecated", "get_kube_client"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.kube_client", + name: "get_kube_client", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } + ["airflow", "kubernetes", "pod_launcher" | "pod_launcher_deprecated", "PodLauncher"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.utils.pod_manager", + name: "PodManager", + provider: "cncf-kubernetes", + version: "3.0.0", + } + } + ["airflow", "kubernetes", "pod_launcher" | "pod_launcher_deprecated", "PodStatus"] => { + ProviderReplacement::AutoImport { + module: " airflow.providers.cncf.kubernetes.utils.pod_manager", + name: "PodPhase", + provider: "cncf-kubernetes", + version: "3.0.0", + } + } + ["airflow", "kubernetes", "pod_runtime_info_env", "PodRuntimeInfoEnv"] => { + ProviderReplacement::AutoImport { + module: "kubernetes.client.models", + name: "V1EnvVar", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } + ["airflow", "kubernetes", "secret", rest] => match *rest { + "K8SModel" => ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.k8s_model", + name: "K8SModel", + provider: "cncf-kubernetes", + version: "7.4.0", }, - "Secret" => ProviderReplacement::ProviderName { - name: "airflow.providers.cncf.kubernetes.secret.Secret", + "Secret" => ProviderReplacement::AutoImport { + module: "airflow.providers.cncf.kubernetes.secret", + name: "Secret", provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, _ => return, }, - ["airflow", "kubernetes", "volume", "Volume"] => ProviderReplacement::ProviderName { - name: "kubernetes.client.models.V1Volume", + ["airflow", "kubernetes", "volume", "Volume"] => ProviderReplacement::AutoImport { + module: "kubernetes.client.models", + name: "V1Volume", provider: "cncf-kubernetes", - version: "7.4.0" - }, - ["airflow", "kubernetes", "volume_mount", "VolumeMount"] => ProviderReplacement::ProviderName { - name: "kubernetes.client.models.V1VolumeMount", - provider: "cncf-kubernetes", - version: "7.4.0" + version: "7.4.0", }, + ["airflow", "kubernetes", "volume_mount", "VolumeMount"] => { + ProviderReplacement::AutoImport { + module: "kubernetes.client.models", + name: "V1VolumeMount", + provider: "cncf-kubernetes", + version: "7.4.0", + } + } // apache-airflow-providers-microsoft-mssql - ["airflow", "hooks", "mssql_hook", "MsSqlHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.microsoft.mssql.hooks.mssql.MsSqlHook", + ["airflow", "hooks", "mssql_hook", "MsSqlHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.microsoft.mssql.hooks.mssql", + name: "MsSqlHook", provider: "microsoft-mssql", - version: "1.0.0" + version: "1.0.0", }, // apache-airflow-providers-mysql - ["airflow", "hooks", "mysql_hook", "MySqlHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.mysql.hooks.mysql.MySqlHook", + ["airflow", "hooks", "mysql_hook", "MySqlHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.mysql.hooks.mysql", + name: "MySqlHook", provider: "mysql", - version: "1.0.0" - }, - ["airflow", "operators", "presto_to_mysql", "PrestoToMySqlOperator" | "PrestoToMySqlTransfer"] => ProviderReplacement::ProviderName { - name: "airflow.providers.mysql.transfers.presto_to_mysql.PrestoToMySqlOperator", - provider: "mysql", - version: "1.0.0" + version: "1.0.0", }, + ["airflow", "operators", "presto_to_mysql", "PrestoToMySqlOperator" | "PrestoToMySqlTransfer"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.mysql.transfers.presto_to_mysql", + name: "PrestoToMySqlOperator", + provider: "mysql", + version: "1.0.0", + } + } // apache-airflow-providers-oracle - ["airflow", "hooks", "oracle_hook", "OracleHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.oracle.hooks.oracle.OracleHook", + ["airflow", "hooks", "oracle_hook", "OracleHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.oracle.hooks.oracle", + name: "OracleHook", provider: "oracle", - version: "1.0.0" + version: "1.0.0", }, // apache-airflow-providers-papermill - ["airflow", "operators", "papermill_operator", "PapermillOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.papermill.operators.papermill.PapermillOperator", - provider: "papermill", - version: "1.0.0" - }, + ["airflow", "operators", "papermill_operator", "PapermillOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.papermill.operators.papermill", + name: "PapermillOperator", + provider: "papermill", + version: "1.0.0", + } + } // apache-airflow-providers-apache-pig - ["airflow", "hooks", "pig_hook", "PigCliHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.pig.hooks.pig.PigCliHook", + ["airflow", "hooks", "pig_hook", "PigCliHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.apache.pig.hooks.pig", + name: "PigCliHook", provider: "apache-pig", - version: "1.0.0" - }, - ["airflow", "operators", "pig_operator", "PigOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.apache.pig.operators.pig.PigOperator", - provider: "apache-pig", - version: "1.0.0" + version: "1.0.0", }, + ["airflow", "operators", "pig_operator", "PigOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.apache.pig.operators.pig", + name: "PigOperator", + provider: "apache-pig", + version: "1.0.0", + } + } // apache-airflow-providers-postgres - ["airflow", "hooks", "postgres_hook", "PostgresHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.postgres.hooks.postgres.PostgresHook", + ["airflow", "hooks", "postgres_hook", "PostgresHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.postgres.hooks.postgres", + name: "PostgresHook", provider: "postgres", - version: "1.0.0" + version: "1.0.0", }, ["airflow", "operators", "postgres_operator", "Mapping"] => ProviderReplacement::None, // apache-airflow-providers-presto - ["airflow", "hooks", "presto_hook", "PrestoHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.presto.hooks.presto.PrestoHook", + ["airflow", "hooks", "presto_hook", "PrestoHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.presto.hooks.presto", + name: "PrestoHook", provider: "presto", - version: "1.0.0" - }, - - // apache-airflow-providers-samba - ["airflow", "hooks", "samba_hook", "SambaHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.samba.hooks.samba.SambaHook", - provider: "samba", - version: "1.0.0" - }, - - // apache-airflow-providers-slack - ["airflow", "hooks", "slack_hook", "SlackHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.slack.hooks.slack.SlackHook", - provider: "slack", - version: "1.0.0" - }, - ["airflow", "operators", "slack_operator", rest @ ( - "SlackAPIOperator" - | "SlackAPIPostOperator" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.slack.operators.slack", - provider: "slack", - version: "1.0.0" - }, - - // apache-airflow-providers-smtp - ["airflow", "operators", "email_operator" | "email", "EmailOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.smtp.operators.smtp.EmailOperator", - provider: "smtp", version: "1.0.0", }, + // apache-airflow-providers-samba + ["airflow", "hooks", "samba_hook", "SambaHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.samba.hooks.samba", + name: "SambaHook", + provider: "samba", + version: "1.0.0", + }, + + // apache-airflow-providers-slack + ["airflow", "hooks", "slack_hook", "SlackHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.slack.hooks.slack", + name: "SlackHook", + provider: "slack", + version: "1.0.0", + }, + ["airflow", "operators", "slack_operator", rest @ ("SlackAPIOperator" | "SlackAPIPostOperator")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.slack.operators.slack", + provider: "slack", + version: "1.0.0", + } + } + + // apache-airflow-providers-smtp + ["airflow", "operators", "email_operator" | "email", "EmailOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.smtp.operators.smtp", + name: "EmailOperator", + provider: "smtp", + version: "1.0.0", + } + } + // apache-airflow-providers-sqlite - ["airflow", "hooks", "sqlite_hook", "SqliteHook"] => ProviderReplacement::ProviderName { - name: "airflow.providers.sqlite.hooks.sqlite.SqliteHook", + ["airflow", "hooks", "sqlite_hook", "SqliteHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.sqlite.hooks.sqlite", + name: "SqliteHook", provider: "sqlite", - version: "1.0.0" + version: "1.0.0", }, // apache-airflow-providers-zendesk - ["airflow", "hooks", "zendesk_hook", "ZendeskHook"] => - ProviderReplacement::ProviderName { - name: "airflow.providers.zendesk.hooks.zendesk.ZendeskHook", + ["airflow", "hooks", "zendesk_hook", "ZendeskHook"] => ProviderReplacement::AutoImport { + module: "airflow.providers.zendesk.hooks.zendesk", + name: "ZendeskHook", provider: "zendesk", - version: "1.0.0" + version: "1.0.0", }, // apache-airflow-providers-standard - ["airflow", "operators", "bash_operator", "BashOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.standard.operators.bash.BashOperator", - provider: "standard", - version: "0.0.1" - }, - ["airflow", "operators", "dagrun_operator", rest @ ( - "TriggerDagRunLink" - | "TriggerDagRunOperator" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.standard.operators.trigger_dagrun", - provider: "standard", - version: "0.0.2" - }, - ["airflow", "operators", "dummy" | "dummy_operator", "EmptyOperator" | "DummyOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.standard.operators.empty.EmptyOperator", - provider: "standard", - version: "0.0.2" - }, - ["airflow", "operators", "latest_only_operator", "LatestOnlyOperator"] => ProviderReplacement::ProviderName { - name: "airflow.providers.standard.operators.latest_only.LatestOnlyOperator", - provider: "standard", - version: "0.0.3" - }, - ["airflow", "operators", "python_operator", rest @ ( - "BranchPythonOperator" - | "PythonOperator" - | "PythonVirtualenvOperator" - | "ShortCircuitOperator" - )] => ProviderReplacement::SourceModuleMovedToProvider { + ["airflow", "operators", "bash_operator", "BashOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.standard.operators.bash", + name: "BashOperator", + provider: "standard", + version: "0.0.1", + } + } + ["airflow", "operators", "dagrun_operator", rest @ ("TriggerDagRunLink" | "TriggerDagRunOperator")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.standard.operators.trigger_dagrun", + provider: "standard", + version: "0.0.2", + } + } + ["airflow", "operators", "dummy" | "dummy_operator", "EmptyOperator" | "DummyOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.standard.operators.empty", + name: "EmptyOperator", + provider: "standard", + version: "0.0.2", + } + } + ["airflow", "operators", "latest_only_operator", "LatestOnlyOperator"] => { + ProviderReplacement::AutoImport { + module: "airflow.providers.standard.operators.latest_only", + name: "LatestOnlyOperator", + provider: "standard", + version: "0.0.3", + } + } + ["airflow", "operators", "python_operator", rest @ ("BranchPythonOperator" + | "PythonOperator" + | "PythonVirtualenvOperator" + | "ShortCircuitOperator")] => ProviderReplacement::SourceModuleMovedToProvider { name: (*rest).to_string(), module: "airflow.providers.standard.operators.python", provider: "standard", - version: "0.0.1" - }, - ["airflow", "sensors", "external_task_sensor", rest @ ( - "ExternalTaskMarker" - | "ExternalTaskSensor" - | "ExternalTaskSensorLink" - )] => ProviderReplacement::SourceModuleMovedToProvider { - name: (*rest).to_string(), - module: "airflow.providers.standard.sensors.external_task", - provider: "standard", - version: "0.0.3" + version: "0.0.1", }, + ["airflow", "sensors", "external_task_sensor", rest @ ("ExternalTaskMarker" | "ExternalTaskSensor" | "ExternalTaskSensorLink")] => { + ProviderReplacement::SourceModuleMovedToProvider { + name: (*rest).to_string(), + module: "airflow.providers.standard.sensors.external_task", + provider: "standard", + version: "0.0.3", + } + } _ => return, }; - checker.report_diagnostic(Diagnostic::new( + + let mut diagnostic = Diagnostic::new( Airflow3MovedToProvider { deprecated: qualified_name.to_string(), - replacement, + replacement: replacement.clone(), }, ranged.range(), - )); + ); + + if let ProviderReplacement::AutoImport { + module, + name, + provider: _, + version: _, + } = replacement + { + diagnostic.try_set_fix(|| { + let (import_edit, binding) = checker.importer().get_or_import_symbol( + &ImportRequest::import_from(module, name), + expr.start(), + checker.semantic(), + )?; + let replacement_edit = Edit::range_replacement(binding, ranged.range()); + Ok(Fix::safe_edits(import_edit, [replacement_edit])) + }); + } + + checker.report_diagnostic(diagnostic); } diff --git a/crates/ruff_linter/src/rules/airflow/rules/suggested_to_move_to_provider_in_3.rs b/crates/ruff_linter/src/rules/airflow/rules/suggested_to_move_to_provider_in_3.rs index 8b990d0b15..b23e031c63 100644 --- a/crates/ruff_linter/src/rules/airflow/rules/suggested_to_move_to_provider_in_3.rs +++ b/crates/ruff_linter/src/rules/airflow/rules/suggested_to_move_to_provider_in_3.rs @@ -49,14 +49,21 @@ impl Violation for Airflow3SuggestedToMoveToProvider { provider, version: _, } + | ProviderReplacement::AutoImport { + name: _, + module: _, + provider, + version: _, + } | ProviderReplacement::SourceModuleMovedToProvider { name: _, module: _, provider, version: _, } => { - format!("`{deprecated}` is deprecated and moved into `{provider}` provider in Airflow 3.0; \ - It still works in Airflow 3.0 but is expected to be removed in a future version." + format!( + "`{deprecated}` is deprecated and moved into `{provider}` provider in Airflow 3.0; \ + It still works in Airflow 3.0 but is expected to be removed in a future version." ) } } @@ -75,6 +82,14 @@ impl Violation for Airflow3SuggestedToMoveToProvider { "Install `apache-airflow-providers-{provider}>={version}` and use `{name}` instead." )) }, + ProviderReplacement::AutoImport { + module, + name, + provider, + version, + } => { + Some(format!("Install `apache-airflow-providers-{provider}>={version}` and use `{module}.{name}` instead.")) + }, ProviderReplacement::SourceModuleMovedToProvider { module, name, diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302.py.snap deleted file mode 100644 index 6d8ce502c7..0000000000 --- a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302.py.snap +++ /dev/null @@ -1,1646 +0,0 @@ ---- -source: crates/ruff_linter/src/rules/airflow/mod.rs ---- -AIR302.py:226:1: AIR302 `airflow.hooks.S3_hook.provide_bucket_name` is moved into `amazon` provider in Airflow 3.0; - | -225 | # apache-airflow-providers-amazon -226 | provide_bucket_name() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -227 | GCSToS3Operator() -228 | GoogleApiToS3Operator() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.hooks.s3.provide_bucket_name` instead. - -AIR302.py:227:1: AIR302 `airflow.operators.gcs_to_s3.GCSToS3Operator` is moved into `amazon` provider in Airflow 3.0; - | -225 | # apache-airflow-providers-amazon -226 | provide_bucket_name() -227 | GCSToS3Operator() - | ^^^^^^^^^^^^^^^ AIR302 -228 | GoogleApiToS3Operator() -229 | GoogleApiToS3Transfer() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.gcs_to_s3.GCSToS3Operator` instead. - -AIR302.py:228:1: AIR302 `airflow.operators.google_api_to_s3_transfer.GoogleApiToS3Operator` is moved into `amazon` provider in Airflow 3.0; - | -226 | provide_bucket_name() -227 | GCSToS3Operator() -228 | GoogleApiToS3Operator() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -229 | GoogleApiToS3Transfer() -230 | RedshiftToS3Operator() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.google_api_to_s3.GoogleApiToS3Operator` instead. - -AIR302.py:229:1: AIR302 `airflow.operators.google_api_to_s3_transfer.GoogleApiToS3Transfer` is moved into `amazon` provider in Airflow 3.0; - | -227 | GCSToS3Operator() -228 | GoogleApiToS3Operator() -229 | GoogleApiToS3Transfer() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -230 | RedshiftToS3Operator() -231 | RedshiftToS3Transfer() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.google_api_to_s3.GoogleApiToS3Operator` instead. - -AIR302.py:230:1: AIR302 `airflow.operators.redshift_to_s3_operator.RedshiftToS3Operator` is moved into `amazon` provider in Airflow 3.0; - | -228 | GoogleApiToS3Operator() -229 | GoogleApiToS3Transfer() -230 | RedshiftToS3Operator() - | ^^^^^^^^^^^^^^^^^^^^ AIR302 -231 | RedshiftToS3Transfer() -232 | S3FileTransformOperator() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.redshift_to_s3.RedshiftToS3Operator` instead. - -AIR302.py:231:1: AIR302 `airflow.operators.redshift_to_s3_operator.RedshiftToS3Transfer` is moved into `amazon` provider in Airflow 3.0; - | -229 | GoogleApiToS3Transfer() -230 | RedshiftToS3Operator() -231 | RedshiftToS3Transfer() - | ^^^^^^^^^^^^^^^^^^^^ AIR302 -232 | S3FileTransformOperator() -233 | S3Hook() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.redshift_to_s3.RedshiftToS3Operator` instead. - -AIR302.py:232:1: AIR302 `airflow.operators.s3_file_transform_operator.S3FileTransformOperator` is moved into `amazon` provider in Airflow 3.0; - | -230 | RedshiftToS3Operator() -231 | RedshiftToS3Transfer() -232 | S3FileTransformOperator() - | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -233 | S3Hook() -234 | SSQLTableCheckOperator3KeySensor() - | - = help: Install `apache-airflow-providers-amazon>=3.0.0` and use `airflow.providers.amazon.aws.operators.s3.S3FileTransformOperator` instead. - -AIR302.py:233:1: AIR302 `airflow.hooks.S3_hook.S3Hook` is moved into `amazon` provider in Airflow 3.0; - | -231 | RedshiftToS3Transfer() -232 | S3FileTransformOperator() -233 | S3Hook() - | ^^^^^^ AIR302 -234 | SSQLTableCheckOperator3KeySensor() -235 | S3ToRedshiftOperator() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.hooks.s3.S3Hook` instead. - -AIR302.py:235:1: AIR302 `airflow.operators.s3_to_redshift_operator.S3ToRedshiftOperator` is moved into `amazon` provider in Airflow 3.0; - | -233 | S3Hook() -234 | SSQLTableCheckOperator3KeySensor() -235 | S3ToRedshiftOperator() - | ^^^^^^^^^^^^^^^^^^^^ AIR302 -236 | S3ToRedshiftTransfer() - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.s3_to_redshift.S3ToRedshiftOperator` instead. - -AIR302.py:236:1: AIR302 `airflow.operators.s3_to_redshift_operator.S3ToRedshiftTransfer` is moved into `amazon` provider in Airflow 3.0; - | -234 | SSQLTableCheckOperator3KeySensor() -235 | S3ToRedshiftOperator() -236 | S3ToRedshiftTransfer() - | ^^^^^^^^^^^^^^^^^^^^ AIR302 -237 | -238 | # apache-airflow-providers-celery - | - = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.s3_to_redshift.S3ToRedshiftOperator` instead. - -AIR302.py:239:1: AIR302 `airflow.config_templates.default_celery.DEFAULT_CELERY_CONFIG` is moved into `celery` provider in Airflow 3.0; - | -238 | # apache-airflow-providers-celery -239 | DEFAULT_CELERY_CONFIG - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -240 | app -241 | CeleryExecutor() - | - = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.default_celery.DEFAULT_CELERY_CONFIG` instead. - -AIR302.py:240:1: AIR302 `airflow.executors.celery_executor.app` is moved into `celery` provider in Airflow 3.0; - | -238 | # apache-airflow-providers-celery -239 | DEFAULT_CELERY_CONFIG -240 | app - | ^^^ AIR302 -241 | CeleryExecutor() -242 | CeleryKubernetesExecutor() - | - = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.celery_executor_utils.app` instead. - -AIR302.py:241:1: AIR302 `airflow.executors.celery_executor.CeleryExecutor` is moved into `celery` provider in Airflow 3.0; - | -239 | DEFAULT_CELERY_CONFIG -240 | app -241 | CeleryExecutor() - | ^^^^^^^^^^^^^^ AIR302 -242 | CeleryKubernetesExecutor() - | - = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.celery_executor.CeleryExecutor` instead. - -AIR302.py:242:1: AIR302 `airflow.executors.celery_kubernetes_executor.CeleryKubernetesExecutor` is moved into `celery` provider in Airflow 3.0; - | -240 | app -241 | CeleryExecutor() -242 | CeleryKubernetesExecutor() - | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -243 | -244 | # apache-airflow-providers-common-sql - | - = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.celery_kubernetes_executor.CeleryKubernetesExecutor` instead. - -AIR302.py:245:1: AIR302 `airflow.operators.sql._convert_to_float_if_possible` is moved into `common-sql` provider in Airflow 3.0; - | -244 | # apache-airflow-providers-common-sql -245 | _convert_to_float_if_possible() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -246 | parse_boolean() -247 | BaseSQLOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.operators.sql._convert_to_float_if_possible` instead. - -AIR302.py:246:1: AIR302 `airflow.operators.sql.parse_boolean` is moved into `common-sql` provider in Airflow 3.0; - | -244 | # apache-airflow-providers-common-sql -245 | _convert_to_float_if_possible() -246 | parse_boolean() - | ^^^^^^^^^^^^^ AIR302 -247 | BaseSQLOperator() -248 | BashOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.operators.sql.parse_boolean` instead. - -AIR302.py:247:1: AIR302 `airflow.operators.sql.BaseSQLOperator` is moved into `common-sql` provider in Airflow 3.0; - | -245 | _convert_to_float_if_possible() -246 | parse_boolean() -247 | BaseSQLOperator() - | ^^^^^^^^^^^^^^^ AIR302 -248 | BashOperator() -249 | LegacyBashOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.BaseSQLOperator` instead. - -AIR302.py:249:1: AIR302 `airflow.operators.bash_operator.BashOperator` is moved into `standard` provider in Airflow 3.0; - | -247 | BaseSQLOperator() -248 | BashOperator() -249 | LegacyBashOperator() - | ^^^^^^^^^^^^^^^^^^ AIR302 -250 | BranchSQLOperator() -251 | CheckOperator() - | - = help: Install `apache-airflow-providers-standard>=0.0.1` and use `airflow.providers.standard.operators.bash.BashOperator` instead. - -AIR302.py:250:1: AIR302 `airflow.operators.sql.BranchSQLOperator` is moved into `common-sql` provider in Airflow 3.0; - | -248 | BashOperator() -249 | LegacyBashOperator() -250 | BranchSQLOperator() - | ^^^^^^^^^^^^^^^^^ AIR302 -251 | CheckOperator() -252 | ConnectorProtocol() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.BranchSQLOperator` instead. - -AIR302.py:251:1: AIR302 `airflow.operators.check_operator.CheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -249 | LegacyBashOperator() -250 | BranchSQLOperator() -251 | CheckOperator() - | ^^^^^^^^^^^^^ AIR302 -252 | ConnectorProtocol() -253 | DbApiHook() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. - -AIR302.py:252:1: AIR302 `airflow.hooks.dbapi.ConnectorProtocol` is moved into `common-sql` provider in Airflow 3.0; - | -250 | BranchSQLOperator() -251 | CheckOperator() -252 | ConnectorProtocol() - | ^^^^^^^^^^^^^^^^^ AIR302 -253 | DbApiHook() -254 | DbApiHook2() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.hooks.sql.ConnectorProtocol` instead. - -AIR302.py:253:1: AIR302 `airflow.hooks.dbapi.DbApiHook` is moved into `common-sql` provider in Airflow 3.0; - | -251 | CheckOperator() -252 | ConnectorProtocol() -253 | DbApiHook() - | ^^^^^^^^^ AIR302 -254 | DbApiHook2() -255 | IntervalCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.hooks.sql.DbApiHook` instead. - -AIR302.py:254:1: AIR302 `airflow.hooks.dbapi_hook.DbApiHook` is moved into `common-sql` provider in Airflow 3.0; - | -252 | ConnectorProtocol() -253 | DbApiHook() -254 | DbApiHook2() - | ^^^^^^^^^^ AIR302 -255 | IntervalCheckOperator() -256 | PrestoCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.hooks.sql.DbApiHook` instead. - -AIR302.py:255:1: AIR302 `airflow.operators.check_operator.IntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -253 | DbApiHook() -254 | DbApiHook2() -255 | IntervalCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -256 | PrestoCheckOperator() -257 | PrestoIntervalCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. - -AIR302.py:256:1: AIR302 `airflow.operators.presto_check_operator.PrestoCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -254 | DbApiHook2() -255 | IntervalCheckOperator() -256 | PrestoCheckOperator() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -257 | PrestoIntervalCheckOperator() -258 | PrestoValueCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. - -AIR302.py:257:1: AIR302 `airflow.operators.presto_check_operator.PrestoIntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -255 | IntervalCheckOperator() -256 | PrestoCheckOperator() -257 | PrestoIntervalCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -258 | PrestoValueCheckOperator() -259 | SQLCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. - -AIR302.py:258:1: AIR302 `airflow.operators.presto_check_operator.PrestoValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -256 | PrestoCheckOperator() -257 | PrestoIntervalCheckOperator() -258 | PrestoValueCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -259 | SQLCheckOperator() -260 | SQLCheckOperator2() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. - -AIR302.py:259:1: AIR302 `airflow.operators.check_operator.SQLCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -257 | PrestoIntervalCheckOperator() -258 | PrestoValueCheckOperator() -259 | SQLCheckOperator() - | ^^^^^^^^^^^^^^^^ AIR302 -260 | SQLCheckOperator2() -261 | SQLCheckOperator3() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. - -AIR302.py:260:1: AIR302 `airflow.operators.presto_check_operator.CheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -258 | PrestoValueCheckOperator() -259 | SQLCheckOperator() -260 | SQLCheckOperator2() - | ^^^^^^^^^^^^^^^^^ AIR302 -261 | SQLCheckOperator3() -262 | SQLColumnCheckOperator2() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. - -AIR302.py:261:1: AIR302 `airflow.operators.sql.SQLCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -259 | SQLCheckOperator() -260 | SQLCheckOperator2() -261 | SQLCheckOperator3() - | ^^^^^^^^^^^^^^^^^ AIR302 -262 | SQLColumnCheckOperator2() -263 | SQLIntervalCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. - -AIR302.py:262:1: AIR302 `airflow.operators.sql.SQLColumnCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -260 | SQLCheckOperator2() -261 | SQLCheckOperator3() -262 | SQLColumnCheckOperator2() - | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -263 | SQLIntervalCheckOperator() -264 | SQLIntervalCheckOperator2() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.operators.sql.SQLColumnCheckOperator` instead. - -AIR302.py:263:1: AIR302 `airflow.operators.check_operator.SQLIntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -261 | SQLCheckOperator3() -262 | SQLColumnCheckOperator2() -263 | SQLIntervalCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -264 | SQLIntervalCheckOperator2() -265 | SQLIntervalCheckOperator3() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. - -AIR302.py:264:1: AIR302 `airflow.operators.presto_check_operator.IntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -262 | SQLColumnCheckOperator2() -263 | SQLIntervalCheckOperator() -264 | SQLIntervalCheckOperator2() - | ^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -265 | SQLIntervalCheckOperator3() -266 | SQLTableCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. - -AIR302.py:265:1: AIR302 `airflow.operators.sql.SQLIntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -263 | SQLIntervalCheckOperator() -264 | SQLIntervalCheckOperator2() -265 | SQLIntervalCheckOperator3() - | ^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -266 | SQLTableCheckOperator() -267 | SQLThresholdCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. - -AIR302.py:267:1: AIR302 `airflow.operators.check_operator.SQLThresholdCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -265 | SQLIntervalCheckOperator3() -266 | SQLTableCheckOperator() -267 | SQLThresholdCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -268 | SQLThresholdCheckOperator2() -269 | SQLValueCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator` instead. - -AIR302.py:268:1: AIR302 `airflow.operators.sql.SQLThresholdCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -266 | SQLTableCheckOperator() -267 | SQLThresholdCheckOperator() -268 | SQLThresholdCheckOperator2() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -269 | SQLValueCheckOperator() -270 | SQLValueCheckOperator2() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator` instead. - -AIR302.py:269:1: AIR302 `airflow.operators.check_operator.SQLValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -267 | SQLThresholdCheckOperator() -268 | SQLThresholdCheckOperator2() -269 | SQLValueCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -270 | SQLValueCheckOperator2() -271 | SQLValueCheckOperator3() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. - -AIR302.py:270:1: AIR302 `airflow.operators.presto_check_operator.ValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -268 | SQLThresholdCheckOperator2() -269 | SQLValueCheckOperator() -270 | SQLValueCheckOperator2() - | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 -271 | SQLValueCheckOperator3() -272 | SqlSensor() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. - -AIR302.py:271:1: AIR302 `airflow.operators.sql.SQLValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -269 | SQLValueCheckOperator() -270 | SQLValueCheckOperator2() -271 | SQLValueCheckOperator3() - | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 -272 | SqlSensor() -273 | SqlSensor2() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. - -AIR302.py:272:1: AIR302 `airflow.sensors.sql.SqlSensor` is moved into `common-sql` provider in Airflow 3.0; - | -270 | SQLValueCheckOperator2() -271 | SQLValueCheckOperator3() -272 | SqlSensor() - | ^^^^^^^^^ AIR302 -273 | SqlSensor2() -274 | ThresholdCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.sensors.sql.SqlSensor` instead. - -AIR302.py:274:1: AIR302 `airflow.operators.check_operator.ThresholdCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -272 | SqlSensor() -273 | SqlSensor2() -274 | ThresholdCheckOperator() - | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 -275 | ValueCheckOperator() - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator` instead. - -AIR302.py:275:1: AIR302 `airflow.operators.check_operator.ValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -273 | SqlSensor2() -274 | ThresholdCheckOperator() -275 | ValueCheckOperator() - | ^^^^^^^^^^^^^^^^^^ AIR302 -276 | -277 | # apache-airflow-providers-daskexecutor - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. - -AIR302.py:278:1: AIR302 `airflow.executors.dask_executor.DaskExecutor` is moved into `daskexecutor` provider in Airflow 3.0; - | -277 | # apache-airflow-providers-daskexecutor -278 | DaskExecutor() - | ^^^^^^^^^^^^ AIR302 -279 | -280 | # apache-airflow-providers-docker - | - = help: Install `apache-airflow-providers-daskexecutor>=1.0.0` and use `airflow.providers.daskexecutor.executors.dask_executor.DaskExecutor` instead. - -AIR302.py:281:1: AIR302 `airflow.hooks.docker_hook.DockerHook` is moved into `docker` provider in Airflow 3.0; - | -280 | # apache-airflow-providers-docker -281 | DockerHook() - | ^^^^^^^^^^ AIR302 -282 | DockerOperator() - | - = help: Install `apache-airflow-providers-docker>=1.0.0` and use `airflow.providers.docker.hooks.docker.DockerHook` instead. - -AIR302.py:282:1: AIR302 `airflow.operators.docker_operator.DockerOperator` is moved into `docker` provider in Airflow 3.0; - | -280 | # apache-airflow-providers-docker -281 | DockerHook() -282 | DockerOperator() - | ^^^^^^^^^^^^^^ AIR302 -283 | -284 | # apache-airflow-providers-apache-druid - | - = help: Install `apache-airflow-providers-docker>=1.0.0` and use `airflow.providers.docker.operators.docker.DockerOperator` instead. - -AIR302.py:285:1: AIR302 `airflow.hooks.druid_hook.DruidDbApiHook` is moved into `apache-druid` provider in Airflow 3.0; - | -284 | # apache-airflow-providers-apache-druid -285 | DruidDbApiHook() - | ^^^^^^^^^^^^^^ AIR302 -286 | DruidHook() -287 | DruidCheckOperator() - | - = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.hooks.druid.DruidDbApiHook` instead. - -AIR302.py:286:1: AIR302 `airflow.hooks.druid_hook.DruidHook` is moved into `apache-druid` provider in Airflow 3.0; - | -284 | # apache-airflow-providers-apache-druid -285 | DruidDbApiHook() -286 | DruidHook() - | ^^^^^^^^^ AIR302 -287 | DruidCheckOperator() - | - = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.hooks.druid.DruidHook` instead. - -AIR302.py:287:1: AIR302 `airflow.operators.druid_check_operator.DruidCheckOperator` is moved into `common-sql` provider in Airflow 3.0; - | -285 | DruidDbApiHook() -286 | DruidHook() -287 | DruidCheckOperator() - | ^^^^^^^^^^^^^^^^^^ AIR302 -288 | -289 | # apache-airflow-providers-apache-hdfs - | - = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. - -AIR302.py:290:1: AIR302 `airflow.hooks.webhdfs_hook.WebHDFSHook` is moved into `apache-hdfs` provider in Airflow 3.0; - | -289 | # apache-airflow-providers-apache-hdfs -290 | WebHDFSHook() - | ^^^^^^^^^^^ AIR302 -291 | WebHdfsSensor() - | - = help: Install `apache-airflow-providers-apache-hdfs>=1.0.0` and use `airflow.providers.apache.hdfs.hooks.webhdfs.WebHDFSHook` instead. - -AIR302.py:291:1: AIR302 `airflow.sensors.web_hdfs_sensor.WebHdfsSensor` is moved into `apache-hdfs` provider in Airflow 3.0; - | -289 | # apache-airflow-providers-apache-hdfs -290 | WebHDFSHook() -291 | WebHdfsSensor() - | ^^^^^^^^^^^^^ AIR302 -292 | -293 | # apache-airflow-providers-apache-hive - | - = help: Install `apache-airflow-providers-apache-hdfs>=1.0.0` and use `airflow.providers.apache.hdfs.sensors.web_hdfs.WebHdfsSensor` instead. - -AIR302.py:294:1: AIR302 `airflow.hooks.hive_hooks.HIVE_QUEUE_PRIORITIES` is moved into `apache-hive` provider in Airflow 3.0; - | -293 | # apache-airflow-providers-apache-hive -294 | HIVE_QUEUE_PRIORITIES - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -295 | closest_ds_partition() -296 | max_partition() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HIVE_QUEUE_PRIORITIES` instead. - -AIR302.py:295:1: AIR302 `airflow.macros.hive.closest_ds_partition` is moved into `apache-hive` provider in Airflow 3.0; - | -293 | # apache-airflow-providers-apache-hive -294 | HIVE_QUEUE_PRIORITIES -295 | closest_ds_partition() - | ^^^^^^^^^^^^^^^^^^^^ AIR302 -296 | max_partition() -297 | HiveCliHook() - | - = help: Install `apache-airflow-providers-apache-hive>=5.1.0` and use `airflow.providers.apache.hive.macros.hive.closest_ds_partition` instead. - -AIR302.py:296:1: AIR302 `airflow.macros.hive.max_partition` is moved into `apache-hive` provider in Airflow 3.0; - | -294 | HIVE_QUEUE_PRIORITIES -295 | closest_ds_partition() -296 | max_partition() - | ^^^^^^^^^^^^^ AIR302 -297 | HiveCliHook() -298 | HiveMetastoreHook() - | - = help: Install `apache-airflow-providers-apache-hive>=5.1.0` and use `airflow.providers.apache.hive.macros.hive.max_partition` instead. - -AIR302.py:297:1: AIR302 `airflow.hooks.hive_hooks.HiveCliHook` is moved into `apache-hive` provider in Airflow 3.0; - | -295 | closest_ds_partition() -296 | max_partition() -297 | HiveCliHook() - | ^^^^^^^^^^^ AIR302 -298 | HiveMetastoreHook() -299 | HiveOperator() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HiveCliHook` instead. - -AIR302.py:298:1: AIR302 `airflow.hooks.hive_hooks.HiveMetastoreHook` is moved into `apache-hive` provider in Airflow 3.0; - | -296 | max_partition() -297 | HiveCliHook() -298 | HiveMetastoreHook() - | ^^^^^^^^^^^^^^^^^ AIR302 -299 | HiveOperator() -300 | HivePartitionSensor() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HiveMetastoreHook` instead. - -AIR302.py:299:1: AIR302 `airflow.operators.hive_operator.HiveOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -297 | HiveCliHook() -298 | HiveMetastoreHook() -299 | HiveOperator() - | ^^^^^^^^^^^^ AIR302 -300 | HivePartitionSensor() -301 | HiveServer2Hook() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.operators.hive.HiveOperator` instead. - -AIR302.py:300:1: AIR302 `airflow.sensors.hive_partition_sensor.HivePartitionSensor` is moved into `apache-hive` provider in Airflow 3.0; - | -298 | HiveMetastoreHook() -299 | HiveOperator() -300 | HivePartitionSensor() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -301 | HiveServer2Hook() -302 | HiveStatsCollectionOperator() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.sensors.hive_partition.HivePartitionSensor` instead. - -AIR302.py:301:1: AIR302 `airflow.hooks.hive_hooks.HiveServer2Hook` is moved into `apache-hive` provider in Airflow 3.0; - | -299 | HiveOperator() -300 | HivePartitionSensor() -301 | HiveServer2Hook() - | ^^^^^^^^^^^^^^^ AIR302 -302 | HiveStatsCollectionOperator() -303 | HiveToDruidOperator() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HiveServer2Hook` instead. - -AIR302.py:302:1: AIR302 `airflow.operators.hive_stats_operator.HiveStatsCollectionOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -300 | HivePartitionSensor() -301 | HiveServer2Hook() -302 | HiveStatsCollectionOperator() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -303 | HiveToDruidOperator() -304 | HiveToDruidTransfer() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.operators.hive_stats.HiveStatsCollectionOperator` instead. - -AIR302.py:303:1: AIR302 `airflow.operators.hive_to_druid.HiveToDruidOperator` is moved into `apache-druid` provider in Airflow 3.0; - | -301 | HiveServer2Hook() -302 | HiveStatsCollectionOperator() -303 | HiveToDruidOperator() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -304 | HiveToDruidTransfer() -305 | HiveToSambaOperator() - | - = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.transfers.hive_to_druid.HiveToDruidOperator` instead. - -AIR302.py:304:1: AIR302 `airflow.operators.hive_to_druid.HiveToDruidTransfer` is moved into `apache-druid` provider in Airflow 3.0; - | -302 | HiveStatsCollectionOperator() -303 | HiveToDruidOperator() -304 | HiveToDruidTransfer() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -305 | HiveToSambaOperator() -306 | S3ToHiveOperator() - | - = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.transfers.hive_to_druid.HiveToDruidOperator` instead. - -AIR302.py:305:1: AIR302 `airflow.operators.hive_to_samba_operator.HiveToSambaOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -303 | HiveToDruidOperator() -304 | HiveToDruidTransfer() -305 | HiveToSambaOperator() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -306 | S3ToHiveOperator() -307 | S3ToHiveTransfer() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.hive_to_samba.HiveToSambaOperator` instead. - -AIR302.py:306:1: AIR302 `airflow.operators.s3_to_hive_operator.S3ToHiveOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -304 | HiveToDruidTransfer() -305 | HiveToSambaOperator() -306 | S3ToHiveOperator() - | ^^^^^^^^^^^^^^^^ AIR302 -307 | S3ToHiveTransfer() -308 | MetastorePartitionSensor() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.s3_to_hive.S3ToHiveOperator` instead. - -AIR302.py:307:1: AIR302 `airflow.operators.s3_to_hive_operator.S3ToHiveTransfer` is moved into `apache-hive` provider in Airflow 3.0; - | -305 | HiveToSambaOperator() -306 | S3ToHiveOperator() -307 | S3ToHiveTransfer() - | ^^^^^^^^^^^^^^^^ AIR302 -308 | MetastorePartitionSensor() -309 | NamedHivePartitionSensor() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.s3_to_hive.S3ToHiveOperator` instead. - -AIR302.py:308:1: AIR302 `airflow.sensors.metastore_partition_sensor.MetastorePartitionSensor` is moved into `apache-hive` provider in Airflow 3.0; - | -306 | S3ToHiveOperator() -307 | S3ToHiveTransfer() -308 | MetastorePartitionSensor() - | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -309 | NamedHivePartitionSensor() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.sensors.metastore_partition.MetastorePartitionSensor` instead. - -AIR302.py:309:1: AIR302 `airflow.sensors.named_hive_partition_sensor.NamedHivePartitionSensor` is moved into `apache-hive` provider in Airflow 3.0; - | -307 | S3ToHiveTransfer() -308 | MetastorePartitionSensor() -309 | NamedHivePartitionSensor() - | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -310 | -311 | # apache-airflow-providers-http - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.sensors.named_hive_partition.NamedHivePartitionSensor` instead. - -AIR302.py:312:1: AIR302 `airflow.hooks.http_hook.HttpHook` is moved into `http` provider in Airflow 3.0; - | -311 | # apache-airflow-providers-http -312 | HttpHook() - | ^^^^^^^^ AIR302 -313 | HttpSensor() -314 | SimpleHttpOperator() - | - = help: Install `apache-airflow-providers-http>=1.0.0` and use `airflow.providers.http.hooks.http.HttpHook` instead. - -AIR302.py:313:1: AIR302 `airflow.sensors.http_sensor.HttpSensor` is moved into `http` provider in Airflow 3.0; - | -311 | # apache-airflow-providers-http -312 | HttpHook() -313 | HttpSensor() - | ^^^^^^^^^^ AIR302 -314 | SimpleHttpOperator() - | - = help: Install `apache-airflow-providers-http>=1.0.0` and use `airflow.providers.http.sensors.http.HttpSensor` instead. - -AIR302.py:314:1: AIR302 `airflow.operators.http_operator.SimpleHttpOperator` is moved into `http` provider in Airflow 3.0; - | -312 | HttpHook() -313 | HttpSensor() -314 | SimpleHttpOperator() - | ^^^^^^^^^^^^^^^^^^ AIR302 -315 | -316 | # apache-airflow-providers-jdbc - | - = help: Install `apache-airflow-providers-http>=5.0.0` and use `airflow.providers.http.operators.http.HttpOperator` instead. - -AIR302.py:317:1: AIR302 `airflow.hooks.jdbc_hook.jaydebeapi` is moved into `jdbc` provider in Airflow 3.0; - | -316 | # apache-airflow-providers-jdbc -317 | jaydebeapi - | ^^^^^^^^^^ AIR302 -318 | JdbcHook() -319 | JdbcOperator() - | - = help: Install `apache-airflow-providers-jdbc>=1.0.0` and use `airflow.providers.jdbc.hooks.jdbc.jaydebeapi` instead. - -AIR302.py:318:1: AIR302 `airflow.hooks.jdbc_hook.JdbcHook` is moved into `jdbc` provider in Airflow 3.0; - | -316 | # apache-airflow-providers-jdbc -317 | jaydebeapi -318 | JdbcHook() - | ^^^^^^^^ AIR302 -319 | JdbcOperator() - | - = help: Install `apache-airflow-providers-jdbc>=1.0.0` and use `airflow.providers.jdbc.hooks.jdbc.JdbcHook` instead. - -AIR302.py:319:1: AIR302 `airflow.operators.jdbc_operator.JdbcOperator` is moved into `common-sql` provider in Airflow 3.0; - | -317 | jaydebeapi -318 | JdbcHook() -319 | JdbcOperator() - | ^^^^^^^^^^^^ AIR302 -320 | -321 | # apache-airflow-providers-fab - | - = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. - -AIR302.py:322:12: AIR302 `airflow.api.auth.backend.basic_auth.CLIENT_AUTH` is moved into `fab` provider in Airflow 3.0; - | -321 | # apache-airflow-providers-fab -322 | basic_auth.CLIENT_AUTH - | ^^^^^^^^^^^ AIR302 -323 | basic_auth.init_app -324 | basic_auth.auth_current_user - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.CLIENT_AUTH` instead. - -AIR302.py:323:12: AIR302 `airflow.api.auth.backend.basic_auth.init_app` is moved into `fab` provider in Airflow 3.0; - | -321 | # apache-airflow-providers-fab -322 | basic_auth.CLIENT_AUTH -323 | basic_auth.init_app - | ^^^^^^^^ AIR302 -324 | basic_auth.auth_current_user -325 | basic_auth.requires_authentication - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.init_app` instead. - -AIR302.py:324:12: AIR302 `airflow.api.auth.backend.basic_auth.auth_current_user` is moved into `fab` provider in Airflow 3.0; - | -322 | basic_auth.CLIENT_AUTH -323 | basic_auth.init_app -324 | basic_auth.auth_current_user - | ^^^^^^^^^^^^^^^^^ AIR302 -325 | basic_auth.requires_authentication - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.auth_current_user` instead. - -AIR302.py:325:12: AIR302 `airflow.api.auth.backend.basic_auth.requires_authentication` is moved into `fab` provider in Airflow 3.0; - | -323 | basic_auth.init_app -324 | basic_auth.auth_current_user -325 | basic_auth.requires_authentication - | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -326 | -327 | kerberos_auth.log - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.requires_authentication` instead. - -AIR302.py:327:15: AIR302 `airflow.api.auth.backend.kerberos_auth.log` is moved into `fab` provider in Airflow 3.0; - | -325 | basic_auth.requires_authentication -326 | -327 | kerberos_auth.log - | ^^^ AIR302 -328 | kerberos_auth.CLIENT_AUTH -329 | kerberos_auth.find_user - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.log` instead. - -AIR302.py:328:15: AIR302 `airflow.api.auth.backend.kerberos_auth.CLIENT_AUTH` is moved into `fab` provider in Airflow 3.0; - | -327 | kerberos_auth.log -328 | kerberos_auth.CLIENT_AUTH - | ^^^^^^^^^^^ AIR302 -329 | kerberos_auth.find_user -330 | kerberos_auth.init_app - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.CLIENT_AUTH` instead. - -AIR302.py:329:15: AIR302 `airflow.api.auth.backend.kerberos_auth.find_user` is moved into `fab` provider in Airflow 3.0; - | -327 | kerberos_auth.log -328 | kerberos_auth.CLIENT_AUTH -329 | kerberos_auth.find_user - | ^^^^^^^^^ AIR302 -330 | kerberos_auth.init_app -331 | kerberos_auth.requires_authentication - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.find_user` instead. - -AIR302.py:330:15: AIR302 `airflow.api.auth.backend.kerberos_auth.init_app` is moved into `fab` provider in Airflow 3.0; - | -328 | kerberos_auth.CLIENT_AUTH -329 | kerberos_auth.find_user -330 | kerberos_auth.init_app - | ^^^^^^^^ AIR302 -331 | kerberos_auth.requires_authentication -332 | auth_current_user - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.init_app` instead. - -AIR302.py:331:15: AIR302 `airflow.api.auth.backend.kerberos_auth.requires_authentication` is moved into `fab` provider in Airflow 3.0; - | -329 | kerberos_auth.find_user -330 | kerberos_auth.init_app -331 | kerberos_auth.requires_authentication - | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -332 | auth_current_user -333 | backend_kerberos_auth - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.requires_authentication` instead. - -AIR302.py:332:1: AIR302 `airflow.api.auth.backend.basic_auth.auth_current_user` is moved into `fab` provider in Airflow 3.0; - | -330 | kerberos_auth.init_app -331 | kerberos_auth.requires_authentication -332 | auth_current_user - | ^^^^^^^^^^^^^^^^^ AIR302 -333 | backend_kerberos_auth -334 | fab_override - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.auth_current_user` instead. - -AIR302.py:335:1: AIR302 `airflow.auth.managers.fab.fab_auth_manager.FabAuthManager` is moved into `fab` provider in Airflow 3.0; - | -333 | backend_kerberos_auth -334 | fab_override -335 | FabAuthManager() - | ^^^^^^^^^^^^^^ AIR302 -336 | FabAirflowSecurityManagerOverride() - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager` instead. - -AIR302.py:336:1: AIR302 `airflow.www.security.FabAirflowSecurityManagerOverride` is moved into `fab` provider in Airflow 3.0; - | -334 | fab_override -335 | FabAuthManager() -336 | FabAirflowSecurityManagerOverride() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -337 | -338 | # check whether attribute access - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.security_manager.override.FabAirflowSecurityManagerOverride` instead. - -AIR302.py:339:12: AIR302 `airflow.api.auth.backend.basic_auth.auth_current_user` is moved into `fab` provider in Airflow 3.0; - | -338 | # check whether attribute access -339 | basic_auth.auth_current_user - | ^^^^^^^^^^^^^^^^^ AIR302 -340 | -341 | # apache-airflow-providers-cncf-kubernetes - | - = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.auth_current_user` instead. - -AIR302.py:342:1: AIR302 `airflow.executors.kubernetes_executor_types.ALL_NAMESPACES` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -341 | # apache-airflow-providers-cncf-kubernetes -342 | ALL_NAMESPACES - | ^^^^^^^^^^^^^^ AIR302 -343 | POD_EXECUTOR_DONE_KEY -344 | _disable_verify_ssl() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types.ALL_NAMESPACES` instead. - -AIR302.py:343:1: AIR302 `airflow.executors.kubernetes_executor_types.POD_EXECUTOR_DONE_KEY` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -341 | # apache-airflow-providers-cncf-kubernetes -342 | ALL_NAMESPACES -343 | POD_EXECUTOR_DONE_KEY - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -344 | _disable_verify_ssl() -345 | _enable_tcp_keepalive() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types.POD_EXECUTOR_DONE_KEY` instead. - -AIR302.py:344:1: AIR302 `airflow.kubernetes.kube_client._disable_verify_ssl` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -342 | ALL_NAMESPACES -343 | POD_EXECUTOR_DONE_KEY -344 | _disable_verify_ssl() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -345 | _enable_tcp_keepalive() -346 | append_to_pod() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client._disable_verify_ssl` instead. - -AIR302.py:345:1: AIR302 `airflow.kubernetes.kube_client._enable_tcp_keepalive` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -343 | POD_EXECUTOR_DONE_KEY -344 | _disable_verify_ssl() -345 | _enable_tcp_keepalive() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -346 | append_to_pod() -347 | annotations_for_logging_task_metadata() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client._enable_tcp_keepalive` instead. - -AIR302.py:346:1: AIR302 `airflow.kubernetes.k8s_model.append_to_pod` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -344 | _disable_verify_ssl() -345 | _enable_tcp_keepalive() -346 | append_to_pod() - | ^^^^^^^^^^^^^ AIR302 -347 | annotations_for_logging_task_metadata() -348 | annotations_to_key() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.k8s_model.append_to_pod` instead. - -AIR302.py:347:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.annotations_for_logging_task_metadata` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -345 | _enable_tcp_keepalive() -346 | append_to_pod() -347 | annotations_for_logging_task_metadata() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -348 | annotations_to_key() -349 | create_pod_id() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.annotations_for_logging_task_metadata` instead. - -AIR302.py:348:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.annotations_to_key` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -346 | append_to_pod() -347 | annotations_for_logging_task_metadata() -348 | annotations_to_key() - | ^^^^^^^^^^^^^^^^^^ AIR302 -349 | create_pod_id() -350 | datetime_to_label_safe_datestring() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.annotations_to_key` instead. - -AIR302.py:349:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.create_pod_id` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -347 | annotations_for_logging_task_metadata() -348 | annotations_to_key() -349 | create_pod_id() - | ^^^^^^^^^^^^^ AIR302 -350 | datetime_to_label_safe_datestring() -351 | extend_object_field() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=10.0.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.create_unique_id` instead. - -AIR302.py:350:1: AIR302 `airflow.kubernetes.pod_generator.datetime_to_label_safe_datestring` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -348 | annotations_to_key() -349 | create_pod_id() -350 | datetime_to_label_safe_datestring() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -351 | extend_object_field() -352 | get_logs_task_metadata() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.datetime_to_label_safe_datestring` instead. - -AIR302.py:351:1: AIR302 `airflow.kubernetes.pod_generator.extend_object_field` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -349 | create_pod_id() -350 | datetime_to_label_safe_datestring() -351 | extend_object_field() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -352 | get_logs_task_metadata() -353 | label_safe_datestring_to_datetime() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.extend_object_field` instead. - -AIR302.py:352:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.get_logs_task_metadata` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -350 | datetime_to_label_safe_datestring() -351 | extend_object_field() -352 | get_logs_task_metadata() - | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 -353 | label_safe_datestring_to_datetime() -354 | merge_objects() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.get_logs_task_metadata` instead. - -AIR302.py:353:1: AIR302 `airflow.kubernetes.pod_generator.label_safe_datestring_to_datetime` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -351 | extend_object_field() -352 | get_logs_task_metadata() -353 | label_safe_datestring_to_datetime() - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 -354 | merge_objects() -355 | Port() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.label_safe_datestring_to_datetime` instead. - -AIR302.py:354:1: AIR302 `airflow.kubernetes.pod_generator.merge_objects` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -352 | get_logs_task_metadata() -353 | label_safe_datestring_to_datetime() -354 | merge_objects() - | ^^^^^^^^^^^^^ AIR302 -355 | Port() -356 | Resources() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.merge_objects` instead. - -AIR302.py:355:1: AIR302 `airflow.kubernetes.pod.Port` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -353 | label_safe_datestring_to_datetime() -354 | merge_objects() -355 | Port() - | ^^^^ AIR302 -356 | Resources() -357 | PodRuntimeInfoEnv() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1ContainerPort` instead. - -AIR302.py:356:1: AIR302 `airflow.kubernetes.pod.Resources` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -354 | merge_objects() -355 | Port() -356 | Resources() - | ^^^^^^^^^ AIR302 -357 | PodRuntimeInfoEnv() -358 | PodGeneratorDeprecated() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1ResourceRequirements` instead. - -AIR302.py:357:1: AIR302 `airflow.kubernetes.pod_runtime_info_env.PodRuntimeInfoEnv` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -355 | Port() -356 | Resources() -357 | PodRuntimeInfoEnv() - | ^^^^^^^^^^^^^^^^^ AIR302 -358 | PodGeneratorDeprecated() -359 | Volume() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1EnvVar` instead. - -AIR302.py:358:1: AIR302 `airflow.kubernetes.pod_generator.PodGeneratorDeprecated` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -356 | Resources() -357 | PodRuntimeInfoEnv() -358 | PodGeneratorDeprecated() - | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 -359 | Volume() -360 | VolumeMount() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.PodGenerator` instead. - -AIR302.py:359:1: AIR302 `airflow.kubernetes.volume.Volume` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -357 | PodRuntimeInfoEnv() -358 | PodGeneratorDeprecated() -359 | Volume() - | ^^^^^^ AIR302 -360 | VolumeMount() -361 | Secret() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1Volume` instead. - -AIR302.py:360:1: AIR302 `airflow.kubernetes.volume_mount.VolumeMount` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -358 | PodGeneratorDeprecated() -359 | Volume() -360 | VolumeMount() - | ^^^^^^^^^^^ AIR302 -361 | Secret() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1VolumeMount` instead. - -AIR302.py:361:1: AIR302 `airflow.kubernetes.secret.Secret` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -359 | Volume() -360 | VolumeMount() -361 | Secret() - | ^^^^^^ AIR302 -362 | -363 | add_pod_suffix() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.secret.Secret` instead. - -AIR302.py:363:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.add_pod_suffix` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -361 | Secret() -362 | -363 | add_pod_suffix() - | ^^^^^^^^^^^^^^ AIR302 -364 | add_pod_suffix2() -365 | get_kube_client() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=10.0.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_unique_suffix` instead. - -AIR302.py:364:1: AIR302 `airflow.kubernetes.pod_generator.add_pod_suffix` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -363 | add_pod_suffix() -364 | add_pod_suffix2() - | ^^^^^^^^^^^^^^^ AIR302 -365 | get_kube_client() -366 | get_kube_client2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=10.0.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_unique_suffix` instead. - -AIR302.py:365:1: AIR302 `airflow.kubernetes.kube_client.get_kube_client` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -363 | add_pod_suffix() -364 | add_pod_suffix2() -365 | get_kube_client() - | ^^^^^^^^^^^^^^^ AIR302 -366 | get_kube_client2() -367 | make_safe_label_value() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client.get_kube_client` instead. - -AIR302.py:366:1: AIR302 `airflow.kubernetes.pod_launcher_deprecated.get_kube_client` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -364 | add_pod_suffix2() -365 | get_kube_client() -366 | get_kube_client2() - | ^^^^^^^^^^^^^^^^ AIR302 -367 | make_safe_label_value() -368 | make_safe_label_value2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client.get_kube_client` instead. - -AIR302.py:367:1: AIR302 `airflow.kubernetes.pod_generator.make_safe_label_value` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -365 | get_kube_client() -366 | get_kube_client2() -367 | make_safe_label_value() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -368 | make_safe_label_value2() -369 | rand_str() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.make_safe_label_value` instead. - -AIR302.py:368:1: AIR302 `airflow.kubernetes.pod_generator_deprecated.make_safe_label_value` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -366 | get_kube_client2() -367 | make_safe_label_value() -368 | make_safe_label_value2() - | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 -369 | rand_str() -370 | rand_str2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.make_safe_label_value` instead. - -AIR302.py:369:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.rand_str` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -367 | make_safe_label_value() -368 | make_safe_label_value2() -369 | rand_str() - | ^^^^^^^^ AIR302 -370 | rand_str2() -371 | K8SModel() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.rand_str` instead. - -AIR302.py:370:1: AIR302 `airflow.kubernetes.pod_generator.rand_str` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -368 | make_safe_label_value2() -369 | rand_str() -370 | rand_str2() - | ^^^^^^^^^ AIR302 -371 | K8SModel() -372 | K8SModel2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.rand_str` instead. - -AIR302.py:371:1: AIR302 `airflow.kubernetes.k8s_model.K8SModel` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -369 | rand_str() -370 | rand_str2() -371 | K8SModel() - | ^^^^^^^^ AIR302 -372 | K8SModel2() -373 | PodLauncher() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.k8s_model.K8SModel` instead. - -AIR302.py:373:1: AIR302 `airflow.kubernetes.pod_launcher.PodLauncher` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -371 | K8SModel() -372 | K8SModel2() -373 | PodLauncher() - | ^^^^^^^^^^^ AIR302 -374 | PodLauncher2() -375 | PodStatus() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use `airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager` instead. - -AIR302.py:374:1: AIR302 `airflow.kubernetes.pod_launcher_deprecated.PodLauncher` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -372 | K8SModel2() -373 | PodLauncher() -374 | PodLauncher2() - | ^^^^^^^^^^^^ AIR302 -375 | PodStatus() -376 | PodStatus2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use `airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager` instead. - -AIR302.py:375:1: AIR302 `airflow.kubernetes.pod_launcher.PodStatus` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -373 | PodLauncher() -374 | PodLauncher2() -375 | PodStatus() - | ^^^^^^^^^ AIR302 -376 | PodStatus2() -377 | PodDefaults() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use ` airflow.providers.cncf.kubernetes.utils.pod_manager.PodPhase` instead. - -AIR302.py:376:1: AIR302 `airflow.kubernetes.pod_launcher_deprecated.PodStatus` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -374 | PodLauncher2() -375 | PodStatus() -376 | PodStatus2() - | ^^^^^^^^^^ AIR302 -377 | PodDefaults() -378 | PodDefaults2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use ` airflow.providers.cncf.kubernetes.utils.pod_manager.PodPhase` instead. - -AIR302.py:377:1: AIR302 `airflow.kubernetes.pod_generator.PodDefaults` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -375 | PodStatus() -376 | PodStatus2() -377 | PodDefaults() - | ^^^^^^^^^^^ AIR302 -378 | PodDefaults2() -379 | PodDefaults3() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults` instead. - -AIR302.py:378:1: AIR302 `airflow.kubernetes.pod_launcher_deprecated.PodDefaults` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -376 | PodStatus2() -377 | PodDefaults() -378 | PodDefaults2() - | ^^^^^^^^^^^^ AIR302 -379 | PodDefaults3() -380 | PodGenerator() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults` instead. - -AIR302.py:379:1: AIR302 `airflow.kubernetes.pod_generator_deprecated.PodDefaults` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -377 | PodDefaults() -378 | PodDefaults2() -379 | PodDefaults3() - | ^^^^^^^^^^^^ AIR302 -380 | PodGenerator() -381 | PodGenerator2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults` instead. - -AIR302.py:380:1: AIR302 `airflow.kubernetes.pod_generator.PodGenerator` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -378 | PodDefaults2() -379 | PodDefaults3() -380 | PodGenerator() - | ^^^^^^^^^^^^ AIR302 -381 | PodGenerator2() - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.PodGenerator` instead. - -AIR302.py:381:1: AIR302 `airflow.kubernetes.pod_generator_deprecated.PodGenerator` is moved into `cncf-kubernetes` provider in Airflow 3.0; - | -379 | PodDefaults3() -380 | PodGenerator() -381 | PodGenerator2() - | ^^^^^^^^^^^^^ AIR302 - | - = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.PodGenerator` instead. - -AIR302.py:385:1: AIR302 `airflow.hooks.mssql_hook.MsSqlHook` is moved into `microsoft-mssql` provider in Airflow 3.0; - | -384 | # apache-airflow-providers-microsoft-mssql -385 | MsSqlHook() - | ^^^^^^^^^ AIR302 -386 | MsSqlOperator() -387 | MsSqlToHiveOperator() - | - = help: Install `apache-airflow-providers-microsoft-mssql>=1.0.0` and use `airflow.providers.microsoft.mssql.hooks.mssql.MsSqlHook` instead. - -AIR302.py:386:1: AIR302 `airflow.operators.mssql_operator.MsSqlOperator` is moved into `common-sql` provider in Airflow 3.0; - | -384 | # apache-airflow-providers-microsoft-mssql -385 | MsSqlHook() -386 | MsSqlOperator() - | ^^^^^^^^^^^^^ AIR302 -387 | MsSqlToHiveOperator() -388 | MsSqlToHiveTransfer() - | - = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. - -AIR302.py:387:1: AIR302 `airflow.operators.mssql_to_hive.MsSqlToHiveOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -385 | MsSqlHook() -386 | MsSqlOperator() -387 | MsSqlToHiveOperator() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -388 | MsSqlToHiveTransfer() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mssql_to_hive.MsSqlToHiveOperator` instead. - -AIR302.py:388:1: AIR302 `airflow.operators.mssql_to_hive.MsSqlToHiveTransfer` is moved into `apache-hive` provider in Airflow 3.0; - | -386 | MsSqlOperator() -387 | MsSqlToHiveOperator() -388 | MsSqlToHiveTransfer() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -389 | -390 | # apache-airflow-providers-mysql - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mssql_to_hive.MsSqlToHiveOperator` instead. - -AIR302.py:391:1: AIR302 `airflow.operators.hive_to_mysql.HiveToMySqlOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -390 | # apache-airflow-providers-mysql -391 | HiveToMySqlOperator() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -392 | HiveToMySqlTransfer() -393 | MySqlHook() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.hive_to_mysql.HiveToMySqlOperator` instead. - -AIR302.py:392:1: AIR302 `airflow.operators.hive_to_mysql.HiveToMySqlTransfer` is moved into `apache-hive` provider in Airflow 3.0; - | -390 | # apache-airflow-providers-mysql -391 | HiveToMySqlOperator() -392 | HiveToMySqlTransfer() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -393 | MySqlHook() -394 | MySqlOperator() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.hive_to_mysql.HiveToMySqlOperator` instead. - -AIR302.py:393:1: AIR302 `airflow.hooks.mysql_hook.MySqlHook` is moved into `mysql` provider in Airflow 3.0; - | -391 | HiveToMySqlOperator() -392 | HiveToMySqlTransfer() -393 | MySqlHook() - | ^^^^^^^^^ AIR302 -394 | MySqlOperator() -395 | MySqlToHiveOperator() - | - = help: Install `apache-airflow-providers-mysql>=1.0.0` and use `airflow.providers.mysql.hooks.mysql.MySqlHook` instead. - -AIR302.py:394:1: AIR302 `airflow.operators.mysql_operator.MySqlOperator` is moved into `common-sql` provider in Airflow 3.0; - | -392 | HiveToMySqlTransfer() -393 | MySqlHook() -394 | MySqlOperator() - | ^^^^^^^^^^^^^ AIR302 -395 | MySqlToHiveOperator() -396 | MySqlToHiveTransfer() - | - = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. - -AIR302.py:395:1: AIR302 `airflow.operators.mysql_to_hive.MySqlToHiveOperator` is moved into `apache-hive` provider in Airflow 3.0; - | -393 | MySqlHook() -394 | MySqlOperator() -395 | MySqlToHiveOperator() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -396 | MySqlToHiveTransfer() -397 | PrestoToMySqlOperator() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mysql_to_hive.MySqlToHiveOperator` instead. - -AIR302.py:396:1: AIR302 `airflow.operators.mysql_to_hive.MySqlToHiveTransfer` is moved into `apache-hive` provider in Airflow 3.0; - | -394 | MySqlOperator() -395 | MySqlToHiveOperator() -396 | MySqlToHiveTransfer() - | ^^^^^^^^^^^^^^^^^^^ AIR302 -397 | PrestoToMySqlOperator() -398 | PrestoToMySqlTransfer() - | - = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mysql_to_hive.MySqlToHiveOperator` instead. - -AIR302.py:397:1: AIR302 `airflow.operators.presto_to_mysql.PrestoToMySqlOperator` is moved into `mysql` provider in Airflow 3.0; - | -395 | MySqlToHiveOperator() -396 | MySqlToHiveTransfer() -397 | PrestoToMySqlOperator() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -398 | PrestoToMySqlTransfer() - | - = help: Install `apache-airflow-providers-mysql>=1.0.0` and use `airflow.providers.mysql.transfers.presto_to_mysql.PrestoToMySqlOperator` instead. - -AIR302.py:398:1: AIR302 `airflow.operators.presto_to_mysql.PrestoToMySqlTransfer` is moved into `mysql` provider in Airflow 3.0; - | -396 | MySqlToHiveTransfer() -397 | PrestoToMySqlOperator() -398 | PrestoToMySqlTransfer() - | ^^^^^^^^^^^^^^^^^^^^^ AIR302 -399 | -400 | # apache-airflow-providers-oracle - | - = help: Install `apache-airflow-providers-mysql>=1.0.0` and use `airflow.providers.mysql.transfers.presto_to_mysql.PrestoToMySqlOperator` instead. - -AIR302.py:401:1: AIR302 `airflow.hooks.oracle_hook.OracleHook` is moved into `oracle` provider in Airflow 3.0; - | -400 | # apache-airflow-providers-oracle -401 | OracleHook() - | ^^^^^^^^^^ AIR302 -402 | OracleOperator() - | - = help: Install `apache-airflow-providers-oracle>=1.0.0` and use `airflow.providers.oracle.hooks.oracle.OracleHook` instead. - -AIR302.py:402:1: AIR302 `airflow.operators.oracle_operator.OracleOperator` is moved into `common-sql` provider in Airflow 3.0; - | -400 | # apache-airflow-providers-oracle -401 | OracleHook() -402 | OracleOperator() - | ^^^^^^^^^^^^^^ AIR302 -403 | -404 | # apache-airflow-providers-papermill - | - = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. - -AIR302.py:405:1: AIR302 `airflow.operators.papermill_operator.PapermillOperator` is moved into `papermill` provider in Airflow 3.0; - | -404 | # apache-airflow-providers-papermill -405 | PapermillOperator() - | ^^^^^^^^^^^^^^^^^ AIR302 -406 | -407 | # apache-airflow-providers-apache-pig - | - = help: Install `apache-airflow-providers-papermill>=1.0.0` and use `airflow.providers.papermill.operators.papermill.PapermillOperator` instead. - -AIR302.py:408:1: AIR302 `airflow.hooks.pig_hook.PigCliHook` is moved into `apache-pig` provider in Airflow 3.0; - | -407 | # apache-airflow-providers-apache-pig -408 | PigCliHook() - | ^^^^^^^^^^ AIR302 -409 | PigOperator() - | - = help: Install `apache-airflow-providers-apache-pig>=1.0.0` and use `airflow.providers.apache.pig.hooks.pig.PigCliHook` instead. - -AIR302.py:409:1: AIR302 `airflow.operators.pig_operator.PigOperator` is moved into `apache-pig` provider in Airflow 3.0; - | -407 | # apache-airflow-providers-apache-pig -408 | PigCliHook() -409 | PigOperator() - | ^^^^^^^^^^^ AIR302 -410 | -411 | # apache-airflow-providers-postgres - | - = help: Install `apache-airflow-providers-apache-pig>=1.0.0` and use `airflow.providers.apache.pig.operators.pig.PigOperator` instead. - -AIR302.py:412:1: AIR302 `airflow.operators.postgres_operator.Mapping` is removed in Airflow 3.0 - | -411 | # apache-airflow-providers-postgres -412 | Mapping - | ^^^^^^^ AIR302 -413 | PostgresHook() -414 | PostgresOperator() - | - -AIR302.py:413:1: AIR302 `airflow.hooks.postgres_hook.PostgresHook` is moved into `postgres` provider in Airflow 3.0; - | -411 | # apache-airflow-providers-postgres -412 | Mapping -413 | PostgresHook() - | ^^^^^^^^^^^^ AIR302 -414 | PostgresOperator() - | - = help: Install `apache-airflow-providers-postgres>=1.0.0` and use `airflow.providers.postgres.hooks.postgres.PostgresHook` instead. - -AIR302.py:414:1: AIR302 `airflow.operators.postgres_operator.PostgresOperator` is moved into `common-sql` provider in Airflow 3.0; - | -412 | Mapping -413 | PostgresHook() -414 | PostgresOperator() - | ^^^^^^^^^^^^^^^^ AIR302 -415 | -416 | # apache-airflow-providers-presto - | - = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. - -AIR302.py:417:1: AIR302 `airflow.hooks.presto_hook.PrestoHook` is moved into `presto` provider in Airflow 3.0; - | -416 | # apache-airflow-providers-presto -417 | PrestoHook() - | ^^^^^^^^^^ AIR302 -418 | -419 | # apache-airflow-providers-samba - | - = help: Install `apache-airflow-providers-presto>=1.0.0` and use `airflow.providers.presto.hooks.presto.PrestoHook` instead. - -AIR302.py:420:1: AIR302 `airflow.hooks.samba_hook.SambaHook` is moved into `samba` provider in Airflow 3.0; - | -419 | # apache-airflow-providers-samba -420 | SambaHook() - | ^^^^^^^^^ AIR302 -421 | -422 | # apache-airflow-providers-slack - | - = help: Install `apache-airflow-providers-samba>=1.0.0` and use `airflow.providers.samba.hooks.samba.SambaHook` instead. - -AIR302.py:423:1: AIR302 `airflow.hooks.slack_hook.SlackHook` is moved into `slack` provider in Airflow 3.0; - | -422 | # apache-airflow-providers-slack -423 | SlackHook() - | ^^^^^^^^^ AIR302 -424 | SlackAPIOperator() -425 | SlackAPIPostOperator() - | - = help: Install `apache-airflow-providers-slack>=1.0.0` and use `airflow.providers.slack.hooks.slack.SlackHook` instead. - -AIR302.py:424:1: AIR302 `airflow.operators.slack_operator.SlackAPIOperator` is moved into `slack` provider in Airflow 3.0; - | -422 | # apache-airflow-providers-slack -423 | SlackHook() -424 | SlackAPIOperator() - | ^^^^^^^^^^^^^^^^ AIR302 -425 | SlackAPIPostOperator() - | - = help: Install `apache-airflow-providers-slack>=1.0.0` and use `airflow.providers.slack.operators.slack.SlackAPIOperator` instead. - -AIR302.py:425:1: AIR302 `airflow.operators.slack_operator.SlackAPIPostOperator` is moved into `slack` provider in Airflow 3.0; - | -423 | SlackHook() -424 | SlackAPIOperator() -425 | SlackAPIPostOperator() - | ^^^^^^^^^^^^^^^^^^^^ AIR302 -426 | -427 | # apache-airflow-providers-sqlite - | - = help: Install `apache-airflow-providers-slack>=1.0.0` and use `airflow.providers.slack.operators.slack.SlackAPIPostOperator` instead. - -AIR302.py:428:1: AIR302 `airflow.hooks.sqlite_hook.SqliteHook` is moved into `sqlite` provider in Airflow 3.0; - | -427 | # apache-airflow-providers-sqlite -428 | SqliteHook() - | ^^^^^^^^^^ AIR302 -429 | SqliteOperator() - | - = help: Install `apache-airflow-providers-sqlite>=1.0.0` and use `airflow.providers.sqlite.hooks.sqlite.SqliteHook` instead. - -AIR302.py:429:1: AIR302 `airflow.operators.sqlite_operator.SqliteOperator` is moved into `common-sql` provider in Airflow 3.0; - | -427 | # apache-airflow-providers-sqlite -428 | SqliteHook() -429 | SqliteOperator() - | ^^^^^^^^^^^^^^ AIR302 -430 | -431 | # apache-airflow-providers-zendesk - | - = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. - -AIR302.py:432:1: AIR302 `airflow.hooks.zendesk_hook.ZendeskHook` is moved into `zendesk` provider in Airflow 3.0; - | -431 | # apache-airflow-providers-zendesk -432 | ZendeskHook() - | ^^^^^^^^^^^ AIR302 -433 | -434 | # apache-airflow-providers-smtp - | - = help: Install `apache-airflow-providers-zendesk>=1.0.0` and use `airflow.providers.zendesk.hooks.zendesk.ZendeskHook` instead. - -AIR302.py:435:1: AIR302 `airflow.operators.email_operator.EmailOperator` is moved into `smtp` provider in Airflow 3.0; - | -434 | # apache-airflow-providers-smtp -435 | EmailOperator() - | ^^^^^^^^^^^^^ AIR302 -436 | -437 | # apache-airflow-providers-standard - | - = help: Install `apache-airflow-providers-smtp>=1.0.0` and use `airflow.providers.smtp.operators.smtp.EmailOperator` instead. - -AIR302.py:451:1: AIR302 `airflow.operators.dummy.DummyOperator` is moved into `standard` provider in Airflow 3.0; - | -449 | TimeDeltaSensor() -450 | DayOfWeekSensor() -451 | DummyOperator() - | ^^^^^^^^^^^^^ AIR302 -452 | EmptyOperator() -453 | ExternalTaskMarker() - | - = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.empty.EmptyOperator` instead. - -AIR302.py:452:1: AIR302 `airflow.operators.dummy.EmptyOperator` is moved into `standard` provider in Airflow 3.0; - | -450 | DayOfWeekSensor() -451 | DummyOperator() -452 | EmptyOperator() - | ^^^^^^^^^^^^^ AIR302 -453 | ExternalTaskMarker() -454 | ExternalTaskSensor() - | - = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.empty.EmptyOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_amazon.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_amazon.py.snap new file mode 100644 index 0000000000..f7f18a458b --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_amazon.py.snap @@ -0,0 +1,113 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_amazon.py:23:1: AIR302 `airflow.hooks.S3_hook.S3Hook` is moved into `amazon` provider in Airflow 3.0; + | +21 | from airflow.sensors.s3_key_sensor import S3KeySensor +22 | +23 | S3Hook() + | ^^^^^^ AIR302 +24 | provide_bucket_name() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.hooks.s3.S3Hook` instead. + +AIR302_amazon.py:24:1: AIR302 `airflow.hooks.S3_hook.provide_bucket_name` is moved into `amazon` provider in Airflow 3.0; + | +23 | S3Hook() +24 | provide_bucket_name() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +25 | +26 | GCSToS3Operator() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.hooks.s3.provide_bucket_name` instead. + +AIR302_amazon.py:26:1: AIR302 `airflow.operators.gcs_to_s3.GCSToS3Operator` is moved into `amazon` provider in Airflow 3.0; + | +24 | provide_bucket_name() +25 | +26 | GCSToS3Operator() + | ^^^^^^^^^^^^^^^ AIR302 +27 | +28 | GoogleApiToS3Operator() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.gcs_to_s3.GCSToS3Operator` instead. + +AIR302_amazon.py:28:1: AIR302 `airflow.operators.google_api_to_s3_transfer.GoogleApiToS3Operator` is moved into `amazon` provider in Airflow 3.0; + | +26 | GCSToS3Operator() +27 | +28 | GoogleApiToS3Operator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +29 | GoogleApiToS3Transfer() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.google_api_to_s3.GoogleApiToS3Operator` instead. + +AIR302_amazon.py:29:1: AIR302 `airflow.operators.google_api_to_s3_transfer.GoogleApiToS3Transfer` is moved into `amazon` provider in Airflow 3.0; + | +28 | GoogleApiToS3Operator() +29 | GoogleApiToS3Transfer() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +30 | +31 | RedshiftToS3Operator() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.google_api_to_s3.GoogleApiToS3Operator` instead. + +AIR302_amazon.py:31:1: AIR302 `airflow.operators.redshift_to_s3_operator.RedshiftToS3Operator` is moved into `amazon` provider in Airflow 3.0; + | +29 | GoogleApiToS3Transfer() +30 | +31 | RedshiftToS3Operator() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +32 | RedshiftToS3Transfer() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.redshift_to_s3.RedshiftToS3Operator` instead. + +AIR302_amazon.py:32:1: AIR302 `airflow.operators.redshift_to_s3_operator.RedshiftToS3Transfer` is moved into `amazon` provider in Airflow 3.0; + | +31 | RedshiftToS3Operator() +32 | RedshiftToS3Transfer() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +33 | +34 | S3FileTransformOperator() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.redshift_to_s3.RedshiftToS3Operator` instead. + +AIR302_amazon.py:34:1: AIR302 `airflow.operators.s3_file_transform_operator.S3FileTransformOperator` is moved into `amazon` provider in Airflow 3.0; + | +32 | RedshiftToS3Transfer() +33 | +34 | S3FileTransformOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +35 | +36 | S3ToRedshiftOperator() + | + = help: Install `apache-airflow-providers-amazon>=3.0.0` and use `airflow.providers.amazon.aws.operators.s3.S3FileTransformOperator` instead. + +AIR302_amazon.py:36:1: AIR302 `airflow.operators.s3_to_redshift_operator.S3ToRedshiftOperator` is moved into `amazon` provider in Airflow 3.0; + | +34 | S3FileTransformOperator() +35 | +36 | S3ToRedshiftOperator() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +37 | S3ToRedshiftTransfer() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.s3_to_redshift.S3ToRedshiftOperator` instead. + +AIR302_amazon.py:37:1: AIR302 `airflow.operators.s3_to_redshift_operator.S3ToRedshiftTransfer` is moved into `amazon` provider in Airflow 3.0; + | +36 | S3ToRedshiftOperator() +37 | S3ToRedshiftTransfer() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +38 | +39 | S3KeySensor() + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.transfers.s3_to_redshift.S3ToRedshiftOperator` instead. + +AIR302_amazon.py:39:1: AIR302 `airflow.sensors.s3_key_sensor.S3KeySensor` is moved into `amazon` provider in Airflow 3.0; + | +37 | S3ToRedshiftTransfer() +38 | +39 | S3KeySensor() + | ^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-amazon>=1.0.0` and use `airflow.providers.amazon.aws.sensors.s3.S3KeySensor` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_celery.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_celery.py.snap new file mode 100644 index 0000000000..554871e39e --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_celery.py.snap @@ -0,0 +1,31 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_celery.py:9:1: AIR302 `airflow.config_templates.default_celery.DEFAULT_CELERY_CONFIG` is moved into `celery` provider in Airflow 3.0; + | + 7 | ) + 8 | + 9 | DEFAULT_CELERY_CONFIG + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +10 | +11 | app + | + = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.default_celery.DEFAULT_CELERY_CONFIG` instead. + +AIR302_celery.py:11:1: AIR302 `airflow.executors.celery_executor.app` is moved into `celery` provider in Airflow 3.0; + | + 9 | DEFAULT_CELERY_CONFIG +10 | +11 | app + | ^^^ AIR302 +12 | CeleryExecutor() + | + = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.celery_executor_utils.app` instead. + +AIR302_celery.py:12:1: AIR302 `airflow.executors.celery_executor.CeleryExecutor` is moved into `celery` provider in Airflow 3.0; + | +11 | app +12 | CeleryExecutor() + | ^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-celery>=3.3.0` and use `airflow.providers.celery.executors.celery_executor.CeleryExecutor` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_common_sql.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_common_sql.py.snap new file mode 100644 index 0000000000..2a15a22329 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_common_sql.py.snap @@ -0,0 +1,352 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_common_sql.py:10:1: AIR302 `airflow.hooks.dbapi.ConnectorProtocol` is moved into `common-sql` provider in Airflow 3.0; + | + 8 | from airflow.operators.check_operator import SQLCheckOperator + 9 | +10 | ConnectorProtocol() + | ^^^^^^^^^^^^^^^^^ AIR302 +11 | DbApiHook() +12 | SQLCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.hooks.sql.ConnectorProtocol` instead. + +AIR302_common_sql.py:11:1: AIR302 `airflow.hooks.dbapi_hook.DbApiHook` is moved into `common-sql` provider in Airflow 3.0; + | +10 | ConnectorProtocol() +11 | DbApiHook() + | ^^^^^^^^^ AIR302 +12 | SQLCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.hooks.sql.DbApiHook` instead. + +AIR302_common_sql.py:12:1: AIR302 `airflow.operators.check_operator.SQLCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +10 | ConnectorProtocol() +11 | DbApiHook() +12 | SQLCheckOperator() + | ^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:18:1: AIR302 `airflow.operators.sql.SQLCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +16 | from airflow.operators.sql import SQLCheckOperator +17 | +18 | SQLCheckOperator() + | ^^^^^^^^^^^^^^^^ AIR302 +19 | CheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:19:1: AIR302 `airflow.operators.check_operator.CheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +18 | SQLCheckOperator() +19 | CheckOperator() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:24:1: AIR302 `airflow.operators.druid_check_operator.CheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +22 | from airflow.operators.druid_check_operator import CheckOperator +23 | +24 | CheckOperator() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:29:1: AIR302 `airflow.operators.presto_check_operator.CheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +27 | from airflow.operators.presto_check_operator import CheckOperator +28 | +29 | CheckOperator() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:39:1: AIR302 `airflow.operators.druid_check_operator.DruidCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +37 | from airflow.operators.presto_check_operator import PrestoCheckOperator +38 | +39 | DruidCheckOperator() + | ^^^^^^^^^^^^^^^^^^ AIR302 +40 | PrestoCheckOperator() +41 | IntervalCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:40:1: AIR302 `airflow.operators.presto_check_operator.PrestoCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +39 | DruidCheckOperator() +40 | PrestoCheckOperator() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +41 | IntervalCheckOperator() +42 | SQLIntervalCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLCheckOperator` instead. + +AIR302_common_sql.py:41:1: AIR302 `airflow.operators.check_operator.IntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +39 | DruidCheckOperator() +40 | PrestoCheckOperator() +41 | IntervalCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +42 | SQLIntervalCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. + +AIR302_common_sql.py:42:1: AIR302 `airflow.operators.check_operator.SQLIntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +40 | PrestoCheckOperator() +41 | IntervalCheckOperator() +42 | SQLIntervalCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. + +AIR302_common_sql.py:51:1: AIR302 `airflow.operators.presto_check_operator.IntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +49 | from airflow.operators.sql import SQLIntervalCheckOperator +50 | +51 | IntervalCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +52 | SQLIntervalCheckOperator() +53 | PrestoIntervalCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. + +AIR302_common_sql.py:52:1: AIR302 `airflow.operators.sql.SQLIntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +51 | IntervalCheckOperator() +52 | SQLIntervalCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +53 | PrestoIntervalCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. + +AIR302_common_sql.py:53:1: AIR302 `airflow.operators.presto_check_operator.PrestoIntervalCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +51 | IntervalCheckOperator() +52 | SQLIntervalCheckOperator() +53 | PrestoIntervalCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator` instead. + +AIR302_common_sql.py:61:1: AIR302 `airflow.operators.check_operator.SQLThresholdCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +59 | ) +60 | +61 | SQLThresholdCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +62 | ThresholdCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator` instead. + +AIR302_common_sql.py:62:1: AIR302 `airflow.operators.check_operator.ThresholdCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +61 | SQLThresholdCheckOperator() +62 | ThresholdCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator` instead. + +AIR302_common_sql.py:67:1: AIR302 `airflow.operators.sql.SQLThresholdCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +65 | from airflow.operators.sql import SQLThresholdCheckOperator +66 | +67 | SQLThresholdCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLThresholdCheckOperator` instead. + +AIR302_common_sql.py:75:1: AIR302 `airflow.operators.check_operator.SQLValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +73 | ) +74 | +75 | SQLValueCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +76 | ValueCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. + +AIR302_common_sql.py:76:1: AIR302 `airflow.operators.check_operator.ValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +75 | SQLValueCheckOperator() +76 | ValueCheckOperator() + | ^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. + +AIR302_common_sql.py:85:1: AIR302 `airflow.operators.sql.SQLValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +83 | from airflow.operators.sql import SQLValueCheckOperator +84 | +85 | SQLValueCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +86 | ValueCheckOperator() +87 | PrestoValueCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. + +AIR302_common_sql.py:86:1: AIR302 `airflow.operators.presto_check_operator.ValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +85 | SQLValueCheckOperator() +86 | ValueCheckOperator() + | ^^^^^^^^^^^^^^^^^^ AIR302 +87 | PrestoValueCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. + +AIR302_common_sql.py:87:1: AIR302 `airflow.operators.presto_check_operator.PrestoValueCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +85 | SQLValueCheckOperator() +86 | ValueCheckOperator() +87 | PrestoValueCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLValueCheckOperator` instead. + +AIR302_common_sql.py:99:1: AIR302 `airflow.operators.sql.BaseSQLOperator` is moved into `common-sql` provider in Airflow 3.0; + | + 97 | ) + 98 | + 99 | BaseSQLOperator() + | ^^^^^^^^^^^^^^^ AIR302 +100 | BranchSQLOperator() +101 | SQLTablecheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.BaseSQLOperator` instead. + +AIR302_common_sql.py:100:1: AIR302 `airflow.operators.sql.BranchSQLOperator` is moved into `common-sql` provider in Airflow 3.0; + | + 99 | BaseSQLOperator() +100 | BranchSQLOperator() + | ^^^^^^^^^^^^^^^^^ AIR302 +101 | SQLTablecheckOperator() +102 | SQLColumnCheckOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.BranchSQLOperator` instead. + +AIR302_common_sql.py:101:1: AIR302 `airflow.operators.sql.SQLTablecheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | + 99 | BaseSQLOperator() +100 | BranchSQLOperator() +101 | SQLTablecheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +102 | SQLColumnCheckOperator() +103 | _convert_to_float_if_possible() + | + = help: Install `apache-airflow-providers-common-sql>=1.1.0` and use `airflow.providers.common.sql.operators.sql.SQLTablecheckOperator` instead. + +AIR302_common_sql.py:102:1: AIR302 `airflow.operators.sql.SQLColumnCheckOperator` is moved into `common-sql` provider in Airflow 3.0; + | +100 | BranchSQLOperator() +101 | SQLTablecheckOperator() +102 | SQLColumnCheckOperator() + | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 +103 | _convert_to_float_if_possible() +104 | parse_boolean() + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.operators.sql.SQLColumnCheckOperator` instead. + +AIR302_common_sql.py:103:1: AIR302 `airflow.operators.sql._convert_to_float_if_possible` is moved into `common-sql` provider in Airflow 3.0; + | +101 | SQLTablecheckOperator() +102 | SQLColumnCheckOperator() +103 | _convert_to_float_if_possible() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +104 | parse_boolean() + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.operators.sql._convert_to_float_if_possible` instead. + +AIR302_common_sql.py:104:1: AIR302 `airflow.operators.sql.parse_boolean` is moved into `common-sql` provider in Airflow 3.0; + | +102 | SQLColumnCheckOperator() +103 | _convert_to_float_if_possible() +104 | parse_boolean() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.operators.sql.parse_boolean` instead. + +AIR302_common_sql.py:109:1: AIR302 `airflow.sensors.sql.SqlSensor` is moved into `common-sql` provider in Airflow 3.0; + | +107 | from airflow.sensors.sql import SqlSensor +108 | +109 | SqlSensor() + | ^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.sensors.sql.SqlSensor` instead. + +AIR302_common_sql.py:114:1: AIR302 `airflow.sensors.sql_sensor.SqlSensor` is moved into `common-sql` provider in Airflow 3.0; + | +112 | from airflow.sensors.sql_sensor import SqlSensor +113 | +114 | SqlSensor() + | ^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.sensors.sql.SqlSensor` instead. + +AIR302_common_sql.py:124:1: AIR302 `airflow.operators.jdbc_operator.JdbcOperator` is moved into `common-sql` provider in Airflow 3.0; + | +122 | from airflow.operators.sqlite_operator import SqliteOperator +123 | +124 | JdbcOperator() + | ^^^^^^^^^^^^ AIR302 +125 | MsSqlOperator() +126 | MySqlOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. + +AIR302_common_sql.py:125:1: AIR302 `airflow.operators.mssql_operator.MsSqlOperator` is moved into `common-sql` provider in Airflow 3.0; + | +124 | JdbcOperator() +125 | MsSqlOperator() + | ^^^^^^^^^^^^^ AIR302 +126 | MySqlOperator() +127 | OracleOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. + +AIR302_common_sql.py:126:1: AIR302 `airflow.operators.mysql_operator.MySqlOperator` is moved into `common-sql` provider in Airflow 3.0; + | +124 | JdbcOperator() +125 | MsSqlOperator() +126 | MySqlOperator() + | ^^^^^^^^^^^^^ AIR302 +127 | OracleOperator() +128 | PostgresOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. + +AIR302_common_sql.py:127:1: AIR302 `airflow.operators.oracle_operator.OracleOperator` is moved into `common-sql` provider in Airflow 3.0; + | +125 | MsSqlOperator() +126 | MySqlOperator() +127 | OracleOperator() + | ^^^^^^^^^^^^^^ AIR302 +128 | PostgresOperator() +129 | SqliteOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. + +AIR302_common_sql.py:128:1: AIR302 `airflow.operators.postgres_operator.PostgresOperator` is moved into `common-sql` provider in Airflow 3.0; + | +126 | MySqlOperator() +127 | OracleOperator() +128 | PostgresOperator() + | ^^^^^^^^^^^^^^^^ AIR302 +129 | SqliteOperator() + | + = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. + +AIR302_common_sql.py:129:1: AIR302 `airflow.operators.sqlite_operator.SqliteOperator` is moved into `common-sql` provider in Airflow 3.0; + | +127 | OracleOperator() +128 | PostgresOperator() +129 | SqliteOperator() + | ^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_daskexecutor.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_daskexecutor.py.snap new file mode 100644 index 0000000000..ba40037189 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_daskexecutor.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_daskexecutor.py:5:1: AIR302 `airflow.executors.dask_executor.DaskExecutor` is moved into `daskexecutor` provider in Airflow 3.0; + | +3 | from airflow.executors.dask_executor import DaskExecutor +4 | +5 | DaskExecutor() + | ^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-daskexecutor>=1.0.0` and use `airflow.providers.daskexecutor.executors.dask_executor.DaskExecutor` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_druid.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_druid.py.snap new file mode 100644 index 0000000000..992a7d3da5 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_druid.py.snap @@ -0,0 +1,40 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_druid.py:12:1: AIR302 `airflow.hooks.druid_hook.DruidDbApiHook` is moved into `apache-druid` provider in Airflow 3.0; + | +10 | ) +11 | +12 | DruidDbApiHook() + | ^^^^^^^^^^^^^^ AIR302 +13 | DruidHook() + | + = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.hooks.druid.DruidDbApiHook` instead. + +AIR302_druid.py:13:1: AIR302 `airflow.hooks.druid_hook.DruidHook` is moved into `apache-druid` provider in Airflow 3.0; + | +12 | DruidDbApiHook() +13 | DruidHook() + | ^^^^^^^^^ AIR302 +14 | +15 | HiveToDruidOperator() + | + = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.hooks.druid.DruidHook` instead. + +AIR302_druid.py:15:1: AIR302 `airflow.operators.hive_to_druid.HiveToDruidOperator` is moved into `apache-druid` provider in Airflow 3.0; + | +13 | DruidHook() +14 | +15 | HiveToDruidOperator() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +16 | HiveToDruidTransfer() + | + = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.transfers.hive_to_druid.HiveToDruidOperator` instead. + +AIR302_druid.py:16:1: AIR302 `airflow.operators.hive_to_druid.HiveToDruidTransfer` is moved into `apache-druid` provider in Airflow 3.0; + | +15 | HiveToDruidOperator() +16 | HiveToDruidTransfer() + | ^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-apache-druid>=1.0.0` and use `airflow.providers.apache.druid.transfers.hive_to_druid.HiveToDruidOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_fab.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_fab.py.snap new file mode 100644 index 0000000000..0889673ff4 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_fab.py.snap @@ -0,0 +1,190 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_fab.py:10:1: AIR302 `airflow.api.auth.backend.basic_auth.CLIENT_AUTH` is moved into `fab` provider in Airflow 3.0; + | + 8 | ) + 9 | +10 | CLIENT_AUTH + | ^^^^^^^^^^^ AIR302 +11 | init_app() +12 | auth_current_user() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.CLIENT_AUTH` instead. + +AIR302_fab.py:11:1: AIR302 `airflow.api.auth.backend.basic_auth.init_app` is moved into `fab` provider in Airflow 3.0; + | +10 | CLIENT_AUTH +11 | init_app() + | ^^^^^^^^ AIR302 +12 | auth_current_user() +13 | requires_authentication() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.init_app` instead. + +AIR302_fab.py:12:1: AIR302 `airflow.api.auth.backend.basic_auth.auth_current_user` is moved into `fab` provider in Airflow 3.0; + | +10 | CLIENT_AUTH +11 | init_app() +12 | auth_current_user() + | ^^^^^^^^^^^^^^^^^ AIR302 +13 | requires_authentication() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.auth_current_user` instead. + +AIR302_fab.py:13:1: AIR302 `airflow.api.auth.backend.basic_auth.requires_authentication` is moved into `fab` provider in Airflow 3.0; + | +11 | init_app() +12 | auth_current_user() +13 | requires_authentication() + | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +14 | +15 | from airflow.api.auth.backend.kerberos_auth import ( + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.basic_auth.requires_authentication` instead. + +AIR302_fab.py:23:1: AIR302 `airflow.api.auth.backend.kerberos_auth.log` is moved into `fab` provider in Airflow 3.0; + | +21 | ) +22 | +23 | log() + | ^^^ AIR302 +24 | CLIENT_AUTH +25 | find_user() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.log` instead. + +AIR302_fab.py:24:1: AIR302 `airflow.api.auth.backend.kerberos_auth.CLIENT_AUTH` is moved into `fab` provider in Airflow 3.0; + | +23 | log() +24 | CLIENT_AUTH + | ^^^^^^^^^^^ AIR302 +25 | find_user() +26 | init_app() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.CLIENT_AUTH` instead. + +AIR302_fab.py:25:1: AIR302 `airflow.api.auth.backend.kerberos_auth.find_user` is moved into `fab` provider in Airflow 3.0; + | +23 | log() +24 | CLIENT_AUTH +25 | find_user() + | ^^^^^^^^^ AIR302 +26 | init_app() +27 | requires_authentication() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.find_user` instead. + +AIR302_fab.py:26:1: AIR302 `airflow.api.auth.backend.kerberos_auth.init_app` is moved into `fab` provider in Airflow 3.0; + | +24 | CLIENT_AUTH +25 | find_user() +26 | init_app() + | ^^^^^^^^ AIR302 +27 | requires_authentication() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.init_app` instead. + +AIR302_fab.py:27:1: AIR302 `airflow.api.auth.backend.kerberos_auth.requires_authentication` is moved into `fab` provider in Airflow 3.0; + | +25 | find_user() +26 | init_app() +27 | requires_authentication() + | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +28 | +29 | from airflow.auth.managers.fab.api.auth.backend.kerberos_auth import ( + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.requires_authentication` instead. + +AIR302_fab.py:37:1: AIR302 `airflow.auth.managers.fab.api.auth.backend.kerberos_auth.log` is moved into `fab` provider in Airflow 3.0; + | +35 | ) +36 | +37 | log() + | ^^^ AIR302 +38 | CLIENT_AUTH +39 | find_user() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.log` instead. + +AIR302_fab.py:38:1: AIR302 `airflow.auth.managers.fab.api.auth.backend.kerberos_auth.CLIENT_AUTH` is moved into `fab` provider in Airflow 3.0; + | +37 | log() +38 | CLIENT_AUTH + | ^^^^^^^^^^^ AIR302 +39 | find_user() +40 | init_app() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.CLIENT_AUTH` instead. + +AIR302_fab.py:39:1: AIR302 `airflow.auth.managers.fab.api.auth.backend.kerberos_auth.find_user` is moved into `fab` provider in Airflow 3.0; + | +37 | log() +38 | CLIENT_AUTH +39 | find_user() + | ^^^^^^^^^ AIR302 +40 | init_app() +41 | requires_authentication() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.find_user` instead. + +AIR302_fab.py:40:1: AIR302 `airflow.auth.managers.fab.api.auth.backend.kerberos_auth.init_app` is moved into `fab` provider in Airflow 3.0; + | +38 | CLIENT_AUTH +39 | find_user() +40 | init_app() + | ^^^^^^^^ AIR302 +41 | requires_authentication() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.init_app` instead. + +AIR302_fab.py:41:1: AIR302 `airflow.auth.managers.fab.api.auth.backend.kerberos_auth.requires_authentication` is moved into `fab` provider in Airflow 3.0; + | +39 | find_user() +40 | init_app() +41 | requires_authentication() + | ^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +42 | +43 | from airflow.auth.managers.fab.fab_auth_manager import FabAuthManager + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth.requires_authentication` instead. + +AIR302_fab.py:49:1: AIR302 `airflow.auth.managers.fab.fab_auth_manager.FabAuthManager` is moved into `fab` provider in Airflow 3.0; + | +47 | ) +48 | +49 | FabAuthManager() + | ^^^^^^^^^^^^^^ AIR302 +50 | MAX_NUM_DATABASE_USER_SESSIONS +51 | FabAirflowSecurityManagerOverride() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager` instead. + +AIR302_fab.py:50:1: AIR302 `airflow.auth.managers.fab.security_manager.override.MAX_NUM_DATABASE_USER_SESSIONS` is moved into `fab` provider in Airflow 3.0; + | +49 | FabAuthManager() +50 | MAX_NUM_DATABASE_USER_SESSIONS + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +51 | FabAirflowSecurityManagerOverride() + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.security_manager.override.MAX_NUM_DATABASE_USER_SESSIONS` instead. + +AIR302_fab.py:51:1: AIR302 `airflow.auth.managers.fab.security_manager.override.FabAirflowSecurityManagerOverride` is moved into `fab` provider in Airflow 3.0; + | +49 | FabAuthManager() +50 | MAX_NUM_DATABASE_USER_SESSIONS +51 | FabAirflowSecurityManagerOverride() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +52 | +53 | from airflow.www.security import FabAirflowSecurityManagerOverride + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.security_manager.override.FabAirflowSecurityManagerOverride` instead. + +AIR302_fab.py:55:1: AIR302 `airflow.www.security.FabAirflowSecurityManagerOverride` is moved into `fab` provider in Airflow 3.0; + | +53 | from airflow.www.security import FabAirflowSecurityManagerOverride +54 | +55 | FabAirflowSecurityManagerOverride() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-fab>=1.0.0` and use `airflow.providers.fab.auth_manager.security_manager.override.FabAirflowSecurityManagerOverride` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_hdfs.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_hdfs.py.snap new file mode 100644 index 0000000000..8ff613fea1 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_hdfs.py.snap @@ -0,0 +1,20 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_hdfs.py:6:1: AIR302 `airflow.hooks.webhdfs_hook.WebHDFSHook` is moved into `apache-hdfs` provider in Airflow 3.0; + | +4 | from airflow.sensors.web_hdfs_sensor import WebHdfsSensor +5 | +6 | WebHDFSHook() + | ^^^^^^^^^^^ AIR302 +7 | WebHdfsSensor() + | + = help: Install `apache-airflow-providers-apache-hdfs>=1.0.0` and use `airflow.providers.apache.hdfs.hooks.webhdfs.WebHDFSHook` instead. + +AIR302_hdfs.py:7:1: AIR302 `airflow.sensors.web_hdfs_sensor.WebHdfsSensor` is moved into `apache-hdfs` provider in Airflow 3.0; + | +6 | WebHDFSHook() +7 | WebHdfsSensor() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-apache-hdfs>=1.0.0` and use `airflow.providers.apache.hdfs.sensors.web_hdfs.WebHdfsSensor` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_hive.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_hive.py.snap new file mode 100644 index 0000000000..aa035c4ff7 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_hive.py.snap @@ -0,0 +1,208 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_hive.py:36:1: AIR302 `airflow.macros.hive.closest_ds_partition` is moved into `apache-hive` provider in Airflow 3.0; + | +34 | from airflow.sensors.named_hive_partition_sensor import NamedHivePartitionSensor +35 | +36 | closest_ds_partition() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +37 | max_partition() + | + = help: Install `apache-airflow-providers-apache-hive>=5.1.0` and use `airflow.providers.apache.hive.macros.hive.closest_ds_partition` instead. + +AIR302_hive.py:37:1: AIR302 `airflow.macros.hive.max_partition` is moved into `apache-hive` provider in Airflow 3.0; + | +36 | closest_ds_partition() +37 | max_partition() + | ^^^^^^^^^^^^^ AIR302 +38 | +39 | HiveCliHook() + | + = help: Install `apache-airflow-providers-apache-hive>=5.1.0` and use `airflow.providers.apache.hive.macros.hive.max_partition` instead. + +AIR302_hive.py:39:1: AIR302 `airflow.hooks.hive_hooks.HiveCliHook` is moved into `apache-hive` provider in Airflow 3.0; + | +37 | max_partition() +38 | +39 | HiveCliHook() + | ^^^^^^^^^^^ AIR302 +40 | HiveMetastoreHook() +41 | HiveServer2Hook() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HiveCliHook` instead. + +AIR302_hive.py:40:1: AIR302 `airflow.hooks.hive_hooks.HiveMetastoreHook` is moved into `apache-hive` provider in Airflow 3.0; + | +39 | HiveCliHook() +40 | HiveMetastoreHook() + | ^^^^^^^^^^^^^^^^^ AIR302 +41 | HiveServer2Hook() +42 | HIVE_QUEUE_PRIORITIES + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HiveMetastoreHook` instead. + +AIR302_hive.py:41:1: AIR302 `airflow.hooks.hive_hooks.HiveServer2Hook` is moved into `apache-hive` provider in Airflow 3.0; + | +39 | HiveCliHook() +40 | HiveMetastoreHook() +41 | HiveServer2Hook() + | ^^^^^^^^^^^^^^^ AIR302 +42 | HIVE_QUEUE_PRIORITIES + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HiveServer2Hook` instead. + +AIR302_hive.py:42:1: AIR302 `airflow.hooks.hive_hooks.HIVE_QUEUE_PRIORITIES` is moved into `apache-hive` provider in Airflow 3.0; + | +40 | HiveMetastoreHook() +41 | HiveServer2Hook() +42 | HIVE_QUEUE_PRIORITIES + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +43 | +44 | HiveOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.hooks.hive.HIVE_QUEUE_PRIORITIES` instead. + +AIR302_hive.py:44:1: AIR302 `airflow.operators.hive_operator.HiveOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +42 | HIVE_QUEUE_PRIORITIES +43 | +44 | HiveOperator() + | ^^^^^^^^^^^^ AIR302 +45 | +46 | HiveStatsCollectionOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.operators.hive.HiveOperator` instead. + +AIR302_hive.py:46:1: AIR302 `airflow.operators.hive_stats_operator.HiveStatsCollectionOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +44 | HiveOperator() +45 | +46 | HiveStatsCollectionOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +47 | +48 | HiveToMySqlOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.operators.hive_stats.HiveStatsCollectionOperator` instead. + +AIR302_hive.py:48:1: AIR302 `airflow.operators.hive_to_mysql.HiveToMySqlOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +46 | HiveStatsCollectionOperator() +47 | +48 | HiveToMySqlOperator() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +49 | HiveToMySqlTransfer() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.hive_to_mysql.HiveToMySqlOperator` instead. + +AIR302_hive.py:49:1: AIR302 `airflow.operators.hive_to_mysql.HiveToMySqlTransfer` is moved into `apache-hive` provider in Airflow 3.0; + | +48 | HiveToMySqlOperator() +49 | HiveToMySqlTransfer() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +50 | +51 | HiveToSambaOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.hive_to_mysql.HiveToMySqlOperator` instead. + +AIR302_hive.py:51:1: AIR302 `airflow.operators.hive_to_samba_operator.HiveToSambaOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +49 | HiveToMySqlTransfer() +50 | +51 | HiveToSambaOperator() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +52 | +53 | MsSqlToHiveOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.hive_to_samba.HiveToSambaOperator` instead. + +AIR302_hive.py:53:1: AIR302 `airflow.operators.mssql_to_hive.MsSqlToHiveOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +51 | HiveToSambaOperator() +52 | +53 | MsSqlToHiveOperator() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +54 | MsSqlToHiveTransfer() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mssql_to_hive.MsSqlToHiveOperator` instead. + +AIR302_hive.py:54:1: AIR302 `airflow.operators.mssql_to_hive.MsSqlToHiveTransfer` is moved into `apache-hive` provider in Airflow 3.0; + | +53 | MsSqlToHiveOperator() +54 | MsSqlToHiveTransfer() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +55 | +56 | MySqlToHiveOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mssql_to_hive.MsSqlToHiveOperator` instead. + +AIR302_hive.py:56:1: AIR302 `airflow.operators.mysql_to_hive.MySqlToHiveOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +54 | MsSqlToHiveTransfer() +55 | +56 | MySqlToHiveOperator() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +57 | MySqlToHiveTransfer() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mysql_to_hive.MySqlToHiveOperator` instead. + +AIR302_hive.py:57:1: AIR302 `airflow.operators.mysql_to_hive.MySqlToHiveTransfer` is moved into `apache-hive` provider in Airflow 3.0; + | +56 | MySqlToHiveOperator() +57 | MySqlToHiveTransfer() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +58 | +59 | S3ToHiveOperator() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.mysql_to_hive.MySqlToHiveOperator` instead. + +AIR302_hive.py:59:1: AIR302 `airflow.operators.s3_to_hive_operator.S3ToHiveOperator` is moved into `apache-hive` provider in Airflow 3.0; + | +57 | MySqlToHiveTransfer() +58 | +59 | S3ToHiveOperator() + | ^^^^^^^^^^^^^^^^ AIR302 +60 | S3ToHiveTransfer() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.s3_to_hive.S3ToHiveOperator` instead. + +AIR302_hive.py:60:1: AIR302 `airflow.operators.s3_to_hive_operator.S3ToHiveTransfer` is moved into `apache-hive` provider in Airflow 3.0; + | +59 | S3ToHiveOperator() +60 | S3ToHiveTransfer() + | ^^^^^^^^^^^^^^^^ AIR302 +61 | +62 | HivePartitionSensor() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.transfers.s3_to_hive.S3ToHiveOperator` instead. + +AIR302_hive.py:62:1: AIR302 `airflow.sensors.hive_partition_sensor.HivePartitionSensor` is moved into `apache-hive` provider in Airflow 3.0; + | +60 | S3ToHiveTransfer() +61 | +62 | HivePartitionSensor() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +63 | +64 | MetastorePartitionSensor() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.sensors.hive_partition.HivePartitionSensor` instead. + +AIR302_hive.py:64:1: AIR302 `airflow.sensors.metastore_partition_sensor.MetastorePartitionSensor` is moved into `apache-hive` provider in Airflow 3.0; + | +62 | HivePartitionSensor() +63 | +64 | MetastorePartitionSensor() + | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +65 | +66 | NamedHivePartitionSensor() + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.sensors.metastore_partition.MetastorePartitionSensor` instead. + +AIR302_hive.py:66:1: AIR302 `airflow.sensors.named_hive_partition_sensor.NamedHivePartitionSensor` is moved into `apache-hive` provider in Airflow 3.0; + | +64 | MetastorePartitionSensor() +65 | +66 | NamedHivePartitionSensor() + | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-apache-hive>=1.0.0` and use `airflow.providers.apache.hive.sensors.named_hive_partition.NamedHivePartitionSensor` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_http.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_http.py.snap new file mode 100644 index 0000000000..d8ab77304d --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_http.py.snap @@ -0,0 +1,42 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_http.py:7:1: AIR302 `airflow.hooks.http_hook.HttpHook` is moved into `http` provider in Airflow 3.0; + | +5 | from airflow.sensors.http_sensor import HttpSensor +6 | +7 | HttpHook() + | ^^^^^^^^ AIR302 +8 | SimpleHttpOperator() +9 | HttpSensor() + | + = help: Install `apache-airflow-providers-http>=1.0.0` and use `airflow.providers.http.hooks.http.HttpHook` instead. + +AIR302_http.py:8:1: AIR302 [*] `airflow.operators.http_operator.SimpleHttpOperator` is moved into `http` provider in Airflow 3.0; + | +7 | HttpHook() +8 | SimpleHttpOperator() + | ^^^^^^^^^^^^^^^^^^ AIR302 +9 | HttpSensor() + | + = help: Install `apache-airflow-providers-http>=5.0.0` and use `airflow.providers.http.operators.http.HttpOperator` instead. + +ℹ Safe fix +3 3 | from airflow.hooks.http_hook import HttpHook +4 4 | from airflow.operators.http_operator import SimpleHttpOperator +5 5 | from airflow.sensors.http_sensor import HttpSensor + 6 |+from airflow.providers.http.operators.http import HttpOperator +6 7 | +7 8 | HttpHook() +8 |-SimpleHttpOperator() + 9 |+HttpOperator() +9 10 | HttpSensor() + +AIR302_http.py:9:1: AIR302 `airflow.sensors.http_sensor.HttpSensor` is moved into `http` provider in Airflow 3.0; + | +7 | HttpHook() +8 | SimpleHttpOperator() +9 | HttpSensor() + | ^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-http>=1.0.0` and use `airflow.providers.http.sensors.http.HttpSensor` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_jdbc.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_jdbc.py.snap new file mode 100644 index 0000000000..ab257a2b24 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_jdbc.py.snap @@ -0,0 +1,20 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_jdbc.py:8:1: AIR302 `airflow.hooks.jdbc_hook.JdbcHook` is moved into `jdbc` provider in Airflow 3.0; + | +6 | ) +7 | +8 | JdbcHook() + | ^^^^^^^^ AIR302 +9 | jaydebeapi() + | + = help: Install `apache-airflow-providers-jdbc>=1.0.0` and use `airflow.providers.jdbc.hooks.jdbc.JdbcHook` instead. + +AIR302_jdbc.py:9:1: AIR302 `airflow.hooks.jdbc_hook.jaydebeapi` is moved into `jdbc` provider in Airflow 3.0; + | +8 | JdbcHook() +9 | jaydebeapi() + | ^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-jdbc>=1.0.0` and use `airflow.providers.jdbc.hooks.jdbc.jaydebeapi` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_kubernetes.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_kubernetes.py.snap new file mode 100644 index 0000000000..cd35c51ba2 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_kubernetes.py.snap @@ -0,0 +1,599 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_kubernetes.py:29:1: AIR302 `airflow.executors.kubernetes_executor_types.ALL_NAMESPACES` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +27 | ) +28 | +29 | ALL_NAMESPACES + | ^^^^^^^^^^^^^^ AIR302 +30 | POD_EXECUTOR_DONE_KEY + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types.ALL_NAMESPACES` instead. + +AIR302_kubernetes.py:30:1: AIR302 `airflow.executors.kubernetes_executor_types.POD_EXECUTOR_DONE_KEY` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +29 | ALL_NAMESPACES +30 | POD_EXECUTOR_DONE_KEY + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +31 | +32 | K8SModel() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.executors.kubernetes_executor_types.POD_EXECUTOR_DONE_KEY` instead. + +AIR302_kubernetes.py:32:1: AIR302 `airflow.kubernetes.k8s_model.K8SModel` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +30 | POD_EXECUTOR_DONE_KEY +31 | +32 | K8SModel() + | ^^^^^^^^ AIR302 +33 | append_to_pod() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.k8s_model.K8SModel` instead. + +AIR302_kubernetes.py:33:1: AIR302 `airflow.kubernetes.k8s_model.append_to_pod` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +32 | K8SModel() +33 | append_to_pod() + | ^^^^^^^^^^^^^ AIR302 +34 | +35 | _disable_verify_ssl() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.k8s_model.append_to_pod` instead. + +AIR302_kubernetes.py:35:1: AIR302 `airflow.kubernetes.kube_client._disable_verify_ssl` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +33 | append_to_pod() +34 | +35 | _disable_verify_ssl() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +36 | _enable_tcp_keepalive() +37 | get_kube_client() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client._disable_verify_ssl` instead. + +AIR302_kubernetes.py:36:1: AIR302 `airflow.kubernetes.kube_client._enable_tcp_keepalive` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +35 | _disable_verify_ssl() +36 | _enable_tcp_keepalive() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +37 | get_kube_client() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client._enable_tcp_keepalive` instead. + +AIR302_kubernetes.py:37:1: AIR302 `airflow.kubernetes.kube_client.get_kube_client` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +35 | _disable_verify_ssl() +36 | _enable_tcp_keepalive() +37 | get_kube_client() + | ^^^^^^^^^^^^^^^ AIR302 +38 | +39 | add_pod_suffix() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client.get_kube_client` instead. + +AIR302_kubernetes.py:39:1: AIR302 [*] `airflow.kubernetes.kubernetes_helper_functions.add_pod_suffix` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +37 | get_kube_client() +38 | +39 | add_pod_suffix() + | ^^^^^^^^^^^^^^ AIR302 +40 | create_pod_id() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=10.0.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_unique_suffix` instead. + +ℹ Safe fix +25 25 | Port, +26 26 | Resources, +27 27 | ) + 28 |+from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import add_unique_suffix +28 29 | +29 30 | ALL_NAMESPACES +30 31 | POD_EXECUTOR_DONE_KEY +-------------------------------------------------------------------------------- +36 37 | _enable_tcp_keepalive() +37 38 | get_kube_client() +38 39 | +39 |-add_pod_suffix() + 40 |+add_unique_suffix() +40 41 | create_pod_id() +41 42 | +42 43 | annotations_for_logging_task_metadata() + +AIR302_kubernetes.py:40:1: AIR302 [*] `airflow.kubernetes.kubernetes_helper_functions.create_pod_id` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +39 | add_pod_suffix() +40 | create_pod_id() + | ^^^^^^^^^^^^^ AIR302 +41 | +42 | annotations_for_logging_task_metadata() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=10.0.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.create_unique_id` instead. + +ℹ Safe fix +25 25 | Port, +26 26 | Resources, +27 27 | ) + 28 |+from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import create_unique_id +28 29 | +29 30 | ALL_NAMESPACES +30 31 | POD_EXECUTOR_DONE_KEY +-------------------------------------------------------------------------------- +37 38 | get_kube_client() +38 39 | +39 40 | add_pod_suffix() +40 |-create_pod_id() + 41 |+create_unique_id() +41 42 | +42 43 | annotations_for_logging_task_metadata() +43 44 | annotations_to_key() + +AIR302_kubernetes.py:42:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.annotations_for_logging_task_metadata` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +40 | create_pod_id() +41 | +42 | annotations_for_logging_task_metadata() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +43 | annotations_to_key() +44 | get_logs_task_metadata() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.annotations_for_logging_task_metadata` instead. + +AIR302_kubernetes.py:43:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.annotations_to_key` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +42 | annotations_for_logging_task_metadata() +43 | annotations_to_key() + | ^^^^^^^^^^^^^^^^^^ AIR302 +44 | get_logs_task_metadata() +45 | rand_str() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.annotations_to_key` instead. + +AIR302_kubernetes.py:44:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.get_logs_task_metadata` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +42 | annotations_for_logging_task_metadata() +43 | annotations_to_key() +44 | get_logs_task_metadata() + | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 +45 | rand_str() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.get_logs_task_metadata` instead. + +AIR302_kubernetes.py:45:1: AIR302 `airflow.kubernetes.kubernetes_helper_functions.rand_str` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +43 | annotations_to_key() +44 | get_logs_task_metadata() +45 | rand_str() + | ^^^^^^^^ AIR302 +46 | +47 | Port() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.rand_str` instead. + +AIR302_kubernetes.py:47:1: AIR302 [*] `airflow.kubernetes.pod.Port` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +45 | rand_str() +46 | +47 | Port() + | ^^^^ AIR302 +48 | Resources() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1ContainerPort` instead. + +ℹ Safe fix +25 25 | Port, +26 26 | Resources, +27 27 | ) + 28 |+from kubernetes.client.models import V1ContainerPort +28 29 | +29 30 | ALL_NAMESPACES +30 31 | POD_EXECUTOR_DONE_KEY +-------------------------------------------------------------------------------- +44 45 | get_logs_task_metadata() +45 46 | rand_str() +46 47 | +47 |-Port() + 48 |+V1ContainerPort() +48 49 | Resources() +49 50 | +50 51 | + +AIR302_kubernetes.py:48:1: AIR302 [*] `airflow.kubernetes.pod.Resources` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +47 | Port() +48 | Resources() + | ^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1ResourceRequirements` instead. + +ℹ Safe fix +25 25 | Port, +26 26 | Resources, +27 27 | ) + 28 |+from kubernetes.client.models import V1ResourceRequirements +28 29 | +29 30 | ALL_NAMESPACES +30 31 | POD_EXECUTOR_DONE_KEY +-------------------------------------------------------------------------------- +45 46 | rand_str() +46 47 | +47 48 | Port() +48 |-Resources() + 49 |+V1ResourceRequirements() +49 50 | +50 51 | +51 52 | from airflow.kubernetes.pod_generator import ( + +AIR302_kubernetes.py:64:1: AIR302 `airflow.kubernetes.pod_generator.datetime_to_label_safe_datestring` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +62 | ) +63 | +64 | datetime_to_label_safe_datestring() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +65 | extend_object_field() +66 | label_safe_datestring_to_datetime() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.datetime_to_label_safe_datestring` instead. + +AIR302_kubernetes.py:65:1: AIR302 `airflow.kubernetes.pod_generator.extend_object_field` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +64 | datetime_to_label_safe_datestring() +65 | extend_object_field() + | ^^^^^^^^^^^^^^^^^^^ AIR302 +66 | label_safe_datestring_to_datetime() +67 | make_safe_label_value() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.extend_object_field` instead. + +AIR302_kubernetes.py:66:1: AIR302 `airflow.kubernetes.pod_generator.label_safe_datestring_to_datetime` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +64 | datetime_to_label_safe_datestring() +65 | extend_object_field() +66 | label_safe_datestring_to_datetime() + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +67 | make_safe_label_value() +68 | merge_objects() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.label_safe_datestring_to_datetime` instead. + +AIR302_kubernetes.py:67:1: AIR302 `airflow.kubernetes.pod_generator.make_safe_label_value` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +65 | extend_object_field() +66 | label_safe_datestring_to_datetime() +67 | make_safe_label_value() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +68 | merge_objects() +69 | PodGenerator() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.make_safe_label_value` instead. + +AIR302_kubernetes.py:68:1: AIR302 `airflow.kubernetes.pod_generator.merge_objects` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +66 | label_safe_datestring_to_datetime() +67 | make_safe_label_value() +68 | merge_objects() + | ^^^^^^^^^^^^^ AIR302 +69 | PodGenerator() +70 | PodDefaults() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.merge_objects` instead. + +AIR302_kubernetes.py:69:1: AIR302 `airflow.kubernetes.pod_generator.PodGenerator` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +67 | make_safe_label_value() +68 | merge_objects() +69 | PodGenerator() + | ^^^^^^^^^^^^ AIR302 +70 | PodDefaults() +71 | PodGeneratorDeprecated() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.PodGenerator` instead. + +AIR302_kubernetes.py:70:1: AIR302 `airflow.kubernetes.pod_generator.PodDefaults` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +68 | merge_objects() +69 | PodGenerator() +70 | PodDefaults() + | ^^^^^^^^^^^ AIR302 +71 | PodGeneratorDeprecated() +72 | add_pod_suffix() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults` instead. + +AIR302_kubernetes.py:71:1: AIR302 `airflow.kubernetes.pod_generator.PodGeneratorDeprecated` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +69 | PodGenerator() +70 | PodDefaults() +71 | PodGeneratorDeprecated() + | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 +72 | add_pod_suffix() +73 | rand_str() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.PodGenerator` instead. + +AIR302_kubernetes.py:72:1: AIR302 [*] `airflow.kubernetes.pod_generator.add_pod_suffix` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +70 | PodDefaults() +71 | PodGeneratorDeprecated() +72 | add_pod_suffix() + | ^^^^^^^^^^^^^^ AIR302 +73 | rand_str() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=10.0.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_unique_suffix` instead. + +ℹ Safe fix +60 60 | merge_objects, +61 61 | rand_str, +62 62 | ) + 63 |+from airflow.providers.cncf.kubernetes.kubernetes_helper_functions import add_unique_suffix +63 64 | +64 65 | datetime_to_label_safe_datestring() +65 66 | extend_object_field() +-------------------------------------------------------------------------------- +69 70 | PodGenerator() +70 71 | PodDefaults() +71 72 | PodGeneratorDeprecated() +72 |-add_pod_suffix() + 73 |+add_unique_suffix() +73 74 | rand_str() +74 75 | +75 76 | + +AIR302_kubernetes.py:73:1: AIR302 `airflow.kubernetes.pod_generator.rand_str` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +71 | PodGeneratorDeprecated() +72 | add_pod_suffix() +73 | rand_str() + | ^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kubernetes_helper_functions.rand_str` instead. + +AIR302_kubernetes.py:86:1: AIR302 `airflow.kubernetes.pod_generator_deprecated.PodDefaults` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +84 | ) +85 | +86 | PodDefaults() + | ^^^^^^^^^^^ AIR302 +87 | PodGenerator() +88 | make_safe_label_value() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults` instead. + +AIR302_kubernetes.py:87:1: AIR302 `airflow.kubernetes.pod_generator_deprecated.PodGenerator` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +86 | PodDefaults() +87 | PodGenerator() + | ^^^^^^^^^^^^ AIR302 +88 | make_safe_label_value() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.PodGenerator` instead. + +AIR302_kubernetes.py:88:1: AIR302 `airflow.kubernetes.pod_generator_deprecated.make_safe_label_value` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +86 | PodDefaults() +87 | PodGenerator() +88 | make_safe_label_value() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +89 | +90 | PodLauncher() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.pod_generator.make_safe_label_value` instead. + +AIR302_kubernetes.py:90:1: AIR302 [*] `airflow.kubernetes.pod_launcher.PodLauncher` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +88 | make_safe_label_value() +89 | +90 | PodLauncher() + | ^^^^^^^^^^^ AIR302 +91 | PodStatus() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use `airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager` instead. + +ℹ Safe fix +82 82 | PodLauncher, +83 83 | PodStatus, +84 84 | ) + 85 |+from airflow.providers.cncf.kubernetes.utils.pod_manager import PodManager +85 86 | +86 87 | PodDefaults() +87 88 | PodGenerator() +88 89 | make_safe_label_value() +89 90 | +90 |-PodLauncher() + 91 |+PodManager() +91 92 | PodStatus() +92 93 | +93 94 | + +AIR302_kubernetes.py:91:1: AIR302 [*] `airflow.kubernetes.pod_launcher.PodStatus` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +90 | PodLauncher() +91 | PodStatus() + | ^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use ` airflow.providers.cncf.kubernetes.utils.pod_manager.PodPhase` instead. + +ℹ Safe fix +82 82 | PodLauncher, +83 83 | PodStatus, +84 84 | ) + 85 |+from airflow.providers.cncf.kubernetes.utils.pod_manager import PodPhase +85 86 | +86 87 | PodDefaults() +87 88 | PodGenerator() +88 89 | make_safe_label_value() +89 90 | +90 91 | PodLauncher() +91 |-PodStatus() + 92 |+PodPhase() +92 93 | +93 94 | +94 95 | from airflow.kubernetes.pod_launcher_deprecated import ( + +AIR302_kubernetes.py:108:1: AIR302 `airflow.kubernetes.pod_launcher_deprecated.PodDefaults` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +106 | from airflow.kubernetes.volume_mount import VolumeMount +107 | +108 | PodDefaults() + | ^^^^^^^^^^^ AIR302 +109 | PodLauncher() +110 | PodStatus() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.utils.xcom_sidecar.PodDefaults` instead. + +AIR302_kubernetes.py:109:1: AIR302 [*] `airflow.kubernetes.pod_launcher_deprecated.PodLauncher` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +108 | PodDefaults() +109 | PodLauncher() + | ^^^^^^^^^^^ AIR302 +110 | PodStatus() +111 | get_kube_client() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use `airflow.providers.cncf.kubernetes.utils.pod_manager.PodManager` instead. + +ℹ Safe fix +104 104 | ) +105 105 | from airflow.kubernetes.volume import Volume +106 106 | from airflow.kubernetes.volume_mount import VolumeMount + 107 |+from airflow.providers.cncf.kubernetes.utils.pod_manager import PodManager +107 108 | +108 109 | PodDefaults() +109 |-PodLauncher() + 110 |+PodManager() +110 111 | PodStatus() +111 112 | get_kube_client() +112 113 | + +AIR302_kubernetes.py:110:1: AIR302 [*] `airflow.kubernetes.pod_launcher_deprecated.PodStatus` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +108 | PodDefaults() +109 | PodLauncher() +110 | PodStatus() + | ^^^^^^^^^ AIR302 +111 | get_kube_client() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=3.0.0` and use ` airflow.providers.cncf.kubernetes.utils.pod_manager.PodPhase` instead. + +ℹ Safe fix +104 104 | ) +105 105 | from airflow.kubernetes.volume import Volume +106 106 | from airflow.kubernetes.volume_mount import VolumeMount + 107 |+from airflow.providers.cncf.kubernetes.utils.pod_manager import PodPhase +107 108 | +108 109 | PodDefaults() +109 110 | PodLauncher() +110 |-PodStatus() + 111 |+PodPhase() +111 112 | get_kube_client() +112 113 | +113 114 | PodRuntimeInfoEnv() + +AIR302_kubernetes.py:111:1: AIR302 `airflow.kubernetes.pod_launcher_deprecated.get_kube_client` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +109 | PodLauncher() +110 | PodStatus() +111 | get_kube_client() + | ^^^^^^^^^^^^^^^ AIR302 +112 | +113 | PodRuntimeInfoEnv() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.kube_client.get_kube_client` instead. + +AIR302_kubernetes.py:113:1: AIR302 [*] `airflow.kubernetes.pod_runtime_info_env.PodRuntimeInfoEnv` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +111 | get_kube_client() +112 | +113 | PodRuntimeInfoEnv() + | ^^^^^^^^^^^^^^^^^ AIR302 +114 | K8SModel() +115 | Secret() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1EnvVar` instead. + +ℹ Safe fix +104 104 | ) +105 105 | from airflow.kubernetes.volume import Volume +106 106 | from airflow.kubernetes.volume_mount import VolumeMount + 107 |+from kubernetes.client.models import V1EnvVar +107 108 | +108 109 | PodDefaults() +109 110 | PodLauncher() +110 111 | PodStatus() +111 112 | get_kube_client() +112 113 | +113 |-PodRuntimeInfoEnv() + 114 |+V1EnvVar() +114 115 | K8SModel() +115 116 | Secret() +116 117 | Volume() + +AIR302_kubernetes.py:114:1: AIR302 `airflow.kubernetes.secret.K8SModel` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +113 | PodRuntimeInfoEnv() +114 | K8SModel() + | ^^^^^^^^ AIR302 +115 | Secret() +116 | Volume() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.k8s_model.K8SModel` instead. + +AIR302_kubernetes.py:115:1: AIR302 `airflow.kubernetes.secret.Secret` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +113 | PodRuntimeInfoEnv() +114 | K8SModel() +115 | Secret() + | ^^^^^^ AIR302 +116 | Volume() +117 | VolumeMount() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `airflow.providers.cncf.kubernetes.secret.Secret` instead. + +AIR302_kubernetes.py:116:1: AIR302 [*] `airflow.kubernetes.volume.Volume` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +114 | K8SModel() +115 | Secret() +116 | Volume() + | ^^^^^^ AIR302 +117 | VolumeMount() + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1Volume` instead. + +ℹ Safe fix +104 104 | ) +105 105 | from airflow.kubernetes.volume import Volume +106 106 | from airflow.kubernetes.volume_mount import VolumeMount + 107 |+from kubernetes.client.models import V1Volume +107 108 | +108 109 | PodDefaults() +109 110 | PodLauncher() +-------------------------------------------------------------------------------- +113 114 | PodRuntimeInfoEnv() +114 115 | K8SModel() +115 116 | Secret() +116 |-Volume() + 117 |+V1Volume() +117 118 | VolumeMount() + +AIR302_kubernetes.py:117:1: AIR302 [*] `airflow.kubernetes.volume_mount.VolumeMount` is moved into `cncf-kubernetes` provider in Airflow 3.0; + | +115 | Secret() +116 | Volume() +117 | VolumeMount() + | ^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-cncf-kubernetes>=7.4.0` and use `kubernetes.client.models.V1VolumeMount` instead. + +ℹ Safe fix +104 104 | ) +105 105 | from airflow.kubernetes.volume import Volume +106 106 | from airflow.kubernetes.volume_mount import VolumeMount + 107 |+from kubernetes.client.models import V1VolumeMount +107 108 | +108 109 | PodDefaults() +109 110 | PodLauncher() +-------------------------------------------------------------------------------- +114 115 | K8SModel() +115 116 | Secret() +116 117 | Volume() +117 |-VolumeMount() + 118 |+V1VolumeMount() diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_mysql.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_mysql.py.snap new file mode 100644 index 0000000000..d40283a7dd --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_mysql.py.snap @@ -0,0 +1,31 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_mysql.py:9:1: AIR302 `airflow.hooks.mysql_hook.MySqlHook` is moved into `mysql` provider in Airflow 3.0; + | + 7 | ) + 8 | + 9 | MySqlHook() + | ^^^^^^^^^ AIR302 +10 | PrestoToMySqlOperator() +11 | PrestoToMySqlTransfer() + | + = help: Install `apache-airflow-providers-mysql>=1.0.0` and use `airflow.providers.mysql.hooks.mysql.MySqlHook` instead. + +AIR302_mysql.py:10:1: AIR302 `airflow.operators.presto_to_mysql.PrestoToMySqlOperator` is moved into `mysql` provider in Airflow 3.0; + | + 9 | MySqlHook() +10 | PrestoToMySqlOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +11 | PrestoToMySqlTransfer() + | + = help: Install `apache-airflow-providers-mysql>=1.0.0` and use `airflow.providers.mysql.transfers.presto_to_mysql.PrestoToMySqlOperator` instead. + +AIR302_mysql.py:11:1: AIR302 `airflow.operators.presto_to_mysql.PrestoToMySqlTransfer` is moved into `mysql` provider in Airflow 3.0; + | + 9 | MySqlHook() +10 | PrestoToMySqlOperator() +11 | PrestoToMySqlTransfer() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-mysql>=1.0.0` and use `airflow.providers.mysql.transfers.presto_to_mysql.PrestoToMySqlOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_oracle.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_oracle.py.snap new file mode 100644 index 0000000000..6b087c4715 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_oracle.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_oracle.py:5:1: AIR302 `airflow.hooks.oracle_hook.OracleHook` is moved into `oracle` provider in Airflow 3.0; + | +3 | from airflow.hooks.oracle_hook import OracleHook +4 | +5 | OracleHook() + | ^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-oracle>=1.0.0` and use `airflow.providers.oracle.hooks.oracle.OracleHook` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_papermill.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_papermill.py.snap new file mode 100644 index 0000000000..b0ebbed9d6 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_papermill.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_papermill.py:5:1: AIR302 `airflow.operators.papermill_operator.PapermillOperator` is moved into `papermill` provider in Airflow 3.0; + | +3 | from airflow.operators.papermill_operator import PapermillOperator +4 | +5 | PapermillOperator() + | ^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-papermill>=1.0.0` and use `airflow.providers.papermill.operators.papermill.PapermillOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_pig.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_pig.py.snap new file mode 100644 index 0000000000..10c5ee05fb --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_pig.py.snap @@ -0,0 +1,20 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_pig.py:6:1: AIR302 `airflow.hooks.pig_hook.PigCliHook` is moved into `apache-pig` provider in Airflow 3.0; + | +4 | from airflow.operators.pig_operator import PigOperator +5 | +6 | PigCliHook() + | ^^^^^^^^^^ AIR302 +7 | PigOperator() + | + = help: Install `apache-airflow-providers-apache-pig>=1.0.0` and use `airflow.providers.apache.pig.hooks.pig.PigCliHook` instead. + +AIR302_pig.py:7:1: AIR302 `airflow.operators.pig_operator.PigOperator` is moved into `apache-pig` provider in Airflow 3.0; + | +6 | PigCliHook() +7 | PigOperator() + | ^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-apache-pig>=1.0.0` and use `airflow.providers.apache.pig.operators.pig.PigOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_postgres.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_postgres.py.snap new file mode 100644 index 0000000000..f54468142b --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_postgres.py.snap @@ -0,0 +1,19 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_postgres.py:6:1: AIR302 `airflow.hooks.postgres_hook.PostgresHook` is moved into `postgres` provider in Airflow 3.0; + | +4 | from airflow.operators.postgres_operator import Mapping +5 | +6 | PostgresHook() + | ^^^^^^^^^^^^ AIR302 +7 | Mapping() + | + = help: Install `apache-airflow-providers-postgres>=1.0.0` and use `airflow.providers.postgres.hooks.postgres.PostgresHook` instead. + +AIR302_postgres.py:7:1: AIR302 `airflow.operators.postgres_operator.Mapping` is removed in Airflow 3.0 + | +6 | PostgresHook() +7 | Mapping() + | ^^^^^^^ AIR302 + | diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_presto.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_presto.py.snap new file mode 100644 index 0000000000..cb03cfaf25 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_presto.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_presto.py:5:1: AIR302 `airflow.hooks.presto_hook.PrestoHook` is moved into `presto` provider in Airflow 3.0; + | +3 | from airflow.hooks.presto_hook import PrestoHook +4 | +5 | PrestoHook() + | ^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-presto>=1.0.0` and use `airflow.providers.presto.hooks.presto.PrestoHook` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_samba.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_samba.py.snap new file mode 100644 index 0000000000..470f3faa0e --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_samba.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_samba.py:5:1: AIR302 `airflow.hooks.samba_hook.SambaHook` is moved into `samba` provider in Airflow 3.0; + | +3 | from airflow.hooks.samba_hook import SambaHook +4 | +5 | SambaHook() + | ^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-samba>=1.0.0` and use `airflow.providers.samba.hooks.samba.SambaHook` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_slack.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_slack.py.snap new file mode 100644 index 0000000000..40b728f9f5 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_slack.py.snap @@ -0,0 +1,31 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_slack.py:6:1: AIR302 `airflow.hooks.slack_hook.SlackHook` is moved into `slack` provider in Airflow 3.0; + | +4 | from airflow.operators.slack_operator import SlackAPIOperator, SlackAPIPostOperator +5 | +6 | SlackHook() + | ^^^^^^^^^ AIR302 +7 | SlackAPIOperator() +8 | SlackAPIPostOperator() + | + = help: Install `apache-airflow-providers-slack>=1.0.0` and use `airflow.providers.slack.hooks.slack.SlackHook` instead. + +AIR302_slack.py:7:1: AIR302 `airflow.operators.slack_operator.SlackAPIOperator` is moved into `slack` provider in Airflow 3.0; + | +6 | SlackHook() +7 | SlackAPIOperator() + | ^^^^^^^^^^^^^^^^ AIR302 +8 | SlackAPIPostOperator() + | + = help: Install `apache-airflow-providers-slack>=1.0.0` and use `airflow.providers.slack.operators.slack.SlackAPIOperator` instead. + +AIR302_slack.py:8:1: AIR302 `airflow.operators.slack_operator.SlackAPIPostOperator` is moved into `slack` provider in Airflow 3.0; + | +6 | SlackHook() +7 | SlackAPIOperator() +8 | SlackAPIPostOperator() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-slack>=1.0.0` and use `airflow.providers.slack.operators.slack.SlackAPIPostOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_smtp.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_smtp.py.snap new file mode 100644 index 0000000000..5bf6522a4d --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_smtp.py.snap @@ -0,0 +1,22 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_smtp.py:5:1: AIR302 `airflow.operators.email_operator.EmailOperator` is moved into `smtp` provider in Airflow 3.0; + | +3 | from airflow.operators.email_operator import EmailOperator +4 | +5 | EmailOperator() + | ^^^^^^^^^^^^^ AIR302 +6 | +7 | from airflow.operators.email import EmailOperator + | + = help: Install `apache-airflow-providers-smtp>=1.0.0` and use `airflow.providers.smtp.operators.smtp.EmailOperator` instead. + +AIR302_smtp.py:9:1: AIR302 `airflow.operators.email.EmailOperator` is moved into `smtp` provider in Airflow 3.0; + | +7 | from airflow.operators.email import EmailOperator +8 | +9 | EmailOperator() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-smtp>=1.0.0` and use `airflow.providers.smtp.operators.smtp.EmailOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_sqlite.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_sqlite.py.snap new file mode 100644 index 0000000000..6b3b7dcbc4 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_sqlite.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_sqlite.py:5:1: AIR302 `airflow.hooks.sqlite_hook.SqliteHook` is moved into `sqlite` provider in Airflow 3.0; + | +3 | from airflow.hooks.sqlite_hook import SqliteHook +4 | +5 | SqliteHook() + | ^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-sqlite>=1.0.0` and use `airflow.providers.sqlite.hooks.sqlite.SqliteHook` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_standard.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_standard.py.snap new file mode 100644 index 0000000000..f922fd2ef8 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_standard.py.snap @@ -0,0 +1,157 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_standard.py:25:1: AIR302 `airflow.operators.bash_operator.BashOperator` is moved into `standard` provider in Airflow 3.0; + | +23 | ) +24 | +25 | BashOperator() + | ^^^^^^^^^^^^ AIR302 +26 | +27 | TriggerDagRunLink() + | + = help: Install `apache-airflow-providers-standard>=0.0.1` and use `airflow.providers.standard.operators.bash.BashOperator` instead. + +AIR302_standard.py:27:1: AIR302 `airflow.operators.dagrun_operator.TriggerDagRunLink` is moved into `standard` provider in Airflow 3.0; + | +25 | BashOperator() +26 | +27 | TriggerDagRunLink() + | ^^^^^^^^^^^^^^^^^ AIR302 +28 | TriggerDagRunOperator() +29 | DummyOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.trigger_dagrun.TriggerDagRunLink` instead. + +AIR302_standard.py:28:1: AIR302 `airflow.operators.dagrun_operator.TriggerDagRunOperator` is moved into `standard` provider in Airflow 3.0; + | +27 | TriggerDagRunLink() +28 | TriggerDagRunOperator() + | ^^^^^^^^^^^^^^^^^^^^^ AIR302 +29 | DummyOperator() +30 | EmptyOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.trigger_dagrun.TriggerDagRunOperator` instead. + +AIR302_standard.py:29:1: AIR302 `airflow.operators.dummy.DummyOperator` is moved into `standard` provider in Airflow 3.0; + | +27 | TriggerDagRunLink() +28 | TriggerDagRunOperator() +29 | DummyOperator() + | ^^^^^^^^^^^^^ AIR302 +30 | EmptyOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.empty.EmptyOperator` instead. + +AIR302_standard.py:30:1: AIR302 `airflow.operators.dummy.EmptyOperator` is moved into `standard` provider in Airflow 3.0; + | +28 | TriggerDagRunOperator() +29 | DummyOperator() +30 | EmptyOperator() + | ^^^^^^^^^^^^^ AIR302 +31 | +32 | LatestOnlyOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.empty.EmptyOperator` instead. + +AIR302_standard.py:32:1: AIR302 `airflow.operators.latest_only_operator.LatestOnlyOperator` is moved into `standard` provider in Airflow 3.0; + | +30 | EmptyOperator() +31 | +32 | LatestOnlyOperator() + | ^^^^^^^^^^^^^^^^^^ AIR302 +33 | +34 | BranchPythonOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.3` and use `airflow.providers.standard.operators.latest_only.LatestOnlyOperator` instead. + +AIR302_standard.py:34:1: AIR302 `airflow.operators.python_operator.BranchPythonOperator` is moved into `standard` provider in Airflow 3.0; + | +32 | LatestOnlyOperator() +33 | +34 | BranchPythonOperator() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +35 | PythonOperator() +36 | PythonVirtualenvOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.1` and use `airflow.providers.standard.operators.python.BranchPythonOperator` instead. + +AIR302_standard.py:35:1: AIR302 `airflow.operators.python_operator.PythonOperator` is moved into `standard` provider in Airflow 3.0; + | +34 | BranchPythonOperator() +35 | PythonOperator() + | ^^^^^^^^^^^^^^ AIR302 +36 | PythonVirtualenvOperator() +37 | ShortCircuitOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.1` and use `airflow.providers.standard.operators.python.PythonOperator` instead. + +AIR302_standard.py:36:1: AIR302 `airflow.operators.python_operator.PythonVirtualenvOperator` is moved into `standard` provider in Airflow 3.0; + | +34 | BranchPythonOperator() +35 | PythonOperator() +36 | PythonVirtualenvOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^ AIR302 +37 | ShortCircuitOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.1` and use `airflow.providers.standard.operators.python.PythonVirtualenvOperator` instead. + +AIR302_standard.py:37:1: AIR302 `airflow.operators.python_operator.ShortCircuitOperator` is moved into `standard` provider in Airflow 3.0; + | +35 | PythonOperator() +36 | PythonVirtualenvOperator() +37 | ShortCircuitOperator() + | ^^^^^^^^^^^^^^^^^^^^ AIR302 +38 | +39 | ExternalTaskMarker() + | + = help: Install `apache-airflow-providers-standard>=0.0.1` and use `airflow.providers.standard.operators.python.ShortCircuitOperator` instead. + +AIR302_standard.py:39:1: AIR302 `airflow.sensors.external_task_sensor.ExternalTaskMarker` is moved into `standard` provider in Airflow 3.0; + | +37 | ShortCircuitOperator() +38 | +39 | ExternalTaskMarker() + | ^^^^^^^^^^^^^^^^^^ AIR302 +40 | ExternalTaskSensor() +41 | ExternalTaskSensorLink() + | + = help: Install `apache-airflow-providers-standard>=0.0.3` and use `airflow.providers.standard.sensors.external_task.ExternalTaskMarker` instead. + +AIR302_standard.py:40:1: AIR302 `airflow.sensors.external_task_sensor.ExternalTaskSensor` is moved into `standard` provider in Airflow 3.0; + | +39 | ExternalTaskMarker() +40 | ExternalTaskSensor() + | ^^^^^^^^^^^^^^^^^^ AIR302 +41 | ExternalTaskSensorLink() + | + = help: Install `apache-airflow-providers-standard>=0.0.3` and use `airflow.providers.standard.sensors.external_task.ExternalTaskSensor` instead. + +AIR302_standard.py:41:1: AIR302 `airflow.sensors.external_task_sensor.ExternalTaskSensorLink` is moved into `standard` provider in Airflow 3.0; + | +39 | ExternalTaskMarker() +40 | ExternalTaskSensor() +41 | ExternalTaskSensorLink() + | ^^^^^^^^^^^^^^^^^^^^^^ AIR302 +42 | +43 | from airflow.operators.dummy_operator import ( + | + = help: Install `apache-airflow-providers-standard>=0.0.3` and use `airflow.providers.standard.sensors.external_task.ExternalTaskSensorLink` instead. + +AIR302_standard.py:48:1: AIR302 `airflow.operators.dummy_operator.DummyOperator` is moved into `standard` provider in Airflow 3.0; + | +46 | ) +47 | +48 | DummyOperator() + | ^^^^^^^^^^^^^ AIR302 +49 | EmptyOperator() + | + = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.empty.EmptyOperator` instead. + +AIR302_standard.py:49:1: AIR302 `airflow.operators.dummy_operator.EmptyOperator` is moved into `standard` provider in Airflow 3.0; + | +48 | DummyOperator() +49 | EmptyOperator() + | ^^^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-standard>=0.0.2` and use `airflow.providers.standard.operators.empty.EmptyOperator` instead. diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_zendesk.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_zendesk.py.snap new file mode 100644 index 0000000000..731774ac96 --- /dev/null +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_zendesk.py.snap @@ -0,0 +1,11 @@ +--- +source: crates/ruff_linter/src/rules/airflow/mod.rs +--- +AIR302_zendesk.py:5:1: AIR302 `airflow.hooks.zendesk_hook.ZendeskHook` is moved into `zendesk` provider in Airflow 3.0; + | +3 | from airflow.hooks.zendesk_hook import ZendeskHook +4 | +5 | ZendeskHook() + | ^^^^^^^^^^^ AIR302 + | + = help: Install `apache-airflow-providers-zendesk>=1.0.0` and use `airflow.providers.zendesk.hooks.zendesk.ZendeskHook` instead.