Skip to content

Commit 2ceba6a

Browse files
authored
[airflow] Add autofixes for AIR302 and AIR312 (#17942)
<!-- Thank you for contributing to Ruff! To help us out with reviewing, please consider the following: - Does this pull request include a summary of the change? (See below.) - Does this pull request include a descriptive title? - Does this pull request include references to any relevant issues? --> ## Summary <!-- What's the purpose of the change? What does it do, and why? --> `ProviderReplacement::Name` was designed back when we only wanted to do linting. Now we also want to fix the user code. It would be easier for us to replace them with better AutoImport struct. ## Test Plan <!-- How was it tested? --> The test fixture has been updated as some cases can now be fixed
1 parent d3a7cb3 commit 2ceba6a

File tree

4 files changed

+103
-52
lines changed

4 files changed

+103
-52
lines changed

crates/ruff_linter/src/rules/airflow/helpers.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ pub(crate) enum Replacement {
3131
#[derive(Clone, Debug, Eq, PartialEq)]
3232
pub(crate) enum ProviderReplacement {
3333
None,
34-
ProviderName {
35-
name: &'static str,
36-
provider: &'static str,
37-
version: &'static str,
38-
},
3934
AutoImport {
4035
module: &'static str,
4136
name: &'static str,

crates/ruff_linter/src/rules/airflow/rules/moved_to_provider_in_3.rs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,7 @@ impl Violation for Airflow3MovedToProvider {
4646
ProviderReplacement::None => {
4747
format!("`{deprecated}` is removed in Airflow 3.0")
4848
}
49-
ProviderReplacement::ProviderName {
50-
name: _,
51-
provider,
52-
version: _,
53-
}
54-
| ProviderReplacement::AutoImport {
49+
ProviderReplacement::AutoImport {
5550
name: _,
5651
module: _,
5752
provider,
@@ -72,15 +67,6 @@ impl Violation for Airflow3MovedToProvider {
7267
let Airflow3MovedToProvider { replacement, .. } = self;
7368
match replacement {
7469
ProviderReplacement::None => {None}
75-
ProviderReplacement::ProviderName {
76-
name,
77-
provider,
78-
version,
79-
} => {
80-
Some(format!(
81-
"Install `apache-airflow-providers-{provider}>={version}` and use `{name}` instead."
82-
))
83-
},
8470
ProviderReplacement::AutoImport {
8571
name,
8672
module,
@@ -122,7 +108,6 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
122108
};
123109

124110
let replacement = match qualified_name.segments() {
125-
// ProviderName: for cases that only one name has been moved
126111
// apache-airflow-providers-amazon
127112
["airflow", "hooks", "S3_hook", rest @ ("S3Hook" | "provide_bucket_name")] => {
128113
ProviderReplacement::SourceModuleMovedToProvider {
@@ -238,8 +223,9 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
238223
}
239224
["airflow", "operators", "druid_check_operator", "DruidCheckOperator"]
240225
| ["airflow", "operators", "presto_check_operator", "PrestoCheckOperator"] => {
241-
ProviderReplacement::ProviderName {
242-
name: "airflow.providers.common.sql.operators.sql.SQLCheckOperator",
226+
ProviderReplacement::AutoImport {
227+
module: "airflow.providers.common.sql.operators.sql",
228+
name: "SQLCheckOperator",
243229
provider: "common-sql",
244230
version: "1.1.0",
245231
}
@@ -255,8 +241,9 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
255241
}
256242
}
257243
["airflow", "operators", "presto_check_operator", "PrestoIntervalCheckOperator"] => {
258-
ProviderReplacement::ProviderName {
259-
name: "airflow.providers.common.sql.operators.sql.SQLIntervalCheckOperator",
244+
ProviderReplacement::AutoImport {
245+
module: "airflow.providers.common.sql.operators.sql",
246+
name: "SQLIntervalCheckOperator",
260247
provider: "common-sql",
261248
version: "1.1.0",
262249
}
@@ -281,8 +268,9 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
281268
}
282269
}
283270
["airflow", "operators", "presto_check_operator", "PrestoValueCheckOperator"] => {
284-
ProviderReplacement::ProviderName {
285-
name: "airflow.providers.common.sql.operators.sql.SQLValueCheckOperator",
271+
ProviderReplacement::AutoImport {
272+
module: "airflow.providers.common.sql.operators.sql",
273+
name: "SQLValueCheckOperator",
286274
provider: "common-sql",
287275
version: "1.1.0",
288276
}
@@ -320,8 +308,9 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
320308
| ["airflow", "operators", "oracle_operator", "OracleOperator"]
321309
| ["airflow", "operators", "postgres_operator", "PostgresOperator"]
322310
| ["airflow", "operators", "sqlite_operator", "SqliteOperator"] => {
323-
ProviderReplacement::ProviderName {
324-
name: "airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator",
311+
ProviderReplacement::AutoImport {
312+
module: "airflow.providers.common.sql.operators.sql",
313+
name: "SQLExecuteQueryOperator",
325314
provider: "common-sql",
326315
version: "1.3.0",
327316
}
@@ -943,7 +932,7 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
943932
ProviderReplacement::SourceModuleMovedToProvider { module, name, .. } => {
944933
Some((module, name.as_str()))
945934
}
946-
_ => None,
935+
ProviderReplacement::None => None,
947936
} {
948937
if is_guarded_by_try_except(expr, module, name, semantic) {
949938
return;

crates/ruff_linter/src/rules/airflow/rules/suggested_to_move_to_provider_in_3.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,7 @@ impl Violation for Airflow3SuggestedToMoveToProvider {
4747
ProviderReplacement::None => {
4848
format!("`{deprecated}` is removed in Airflow 3.0")
4949
}
50-
ProviderReplacement::ProviderName {
51-
name: _,
52-
provider,
53-
version: _,
54-
}
55-
| ProviderReplacement::AutoImport {
50+
ProviderReplacement::AutoImport {
5651
name: _,
5752
module: _,
5853
provider,
@@ -76,15 +71,6 @@ impl Violation for Airflow3SuggestedToMoveToProvider {
7671
let Airflow3SuggestedToMoveToProvider { replacement, .. } = self;
7772
match replacement {
7873
ProviderReplacement::None => None,
79-
ProviderReplacement::ProviderName {
80-
name,
81-
provider,
82-
version,
83-
} => {
84-
Some(format!(
85-
"Install `apache-airflow-providers-{provider}>={version}` and use `{name}` instead."
86-
))
87-
},
8874
ProviderReplacement::AutoImport {
8975
module,
9076
name,
@@ -285,7 +271,7 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan
285271
ProviderReplacement::SourceModuleMovedToProvider { module, name, .. } => {
286272
Some((module, name.as_str()))
287273
}
288-
_ => None,
274+
ProviderReplacement::None => None,
289275
} {
290276
if is_guarded_by_try_except(expr, module, name, semantic) {
291277
return;

crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR302_AIR302_common_sql.py.snap

Lines changed: 87 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ AIR302_common_sql.py:114:1: AIR302 `airflow.sensors.sql_sensor.SqlSensor` is mov
289289
|
290290
= help: Install `apache-airflow-providers-common-sql>=1.0.0` and use `airflow.providers.common.sql.sensors.sql.SqlSensor` instead.
291291

292-
AIR302_common_sql.py:124:1: AIR302 `airflow.operators.jdbc_operator.JdbcOperator` is moved into `common-sql` provider in Airflow 3.0;
292+
AIR302_common_sql.py:124:1: AIR302 [*] `airflow.operators.jdbc_operator.JdbcOperator` is moved into `common-sql` provider in Airflow 3.0;
293293
|
294294
122 | from airflow.operators.sqlite_operator import SqliteOperator
295295
123 |
@@ -300,7 +300,19 @@ AIR302_common_sql.py:124:1: AIR302 `airflow.operators.jdbc_operator.JdbcOperator
300300
|
301301
= help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead.
302302

303-
AIR302_common_sql.py:125:1: AIR302 `airflow.operators.mssql_operator.MsSqlOperator` is moved into `common-sql` provider in Airflow 3.0;
303+
Safe fix
304+
120 120 | from airflow.operators.oracle_operator import OracleOperator
305+
121 121 | from airflow.operators.postgres_operator import PostgresOperator
306+
122 122 | from airflow.operators.sqlite_operator import SqliteOperator
307+
123 |+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
308+
123 124 |
309+
124 |-JdbcOperator()
310+
125 |+SQLExecuteQueryOperator()
311+
125 126 | MsSqlOperator()
312+
126 127 | MySqlOperator()
313+
127 128 | OracleOperator()
314+
315+
AIR302_common_sql.py:125:1: AIR302 [*] `airflow.operators.mssql_operator.MsSqlOperator` is moved into `common-sql` provider in Airflow 3.0;
304316
|
305317
124 | JdbcOperator()
306318
125 | MsSqlOperator()
@@ -310,7 +322,20 @@ AIR302_common_sql.py:125:1: AIR302 `airflow.operators.mssql_operator.MsSqlOperat
310322
|
311323
= help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead.
312324

313-
AIR302_common_sql.py:126:1: AIR302 `airflow.operators.mysql_operator.MySqlOperator` is moved into `common-sql` provider in Airflow 3.0;
325+
Safe fix
326+
120 120 | from airflow.operators.oracle_operator import OracleOperator
327+
121 121 | from airflow.operators.postgres_operator import PostgresOperator
328+
122 122 | from airflow.operators.sqlite_operator import SqliteOperator
329+
123 |+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
330+
123 124 |
331+
124 125 | JdbcOperator()
332+
125 |-MsSqlOperator()
333+
126 |+SQLExecuteQueryOperator()
334+
126 127 | MySqlOperator()
335+
127 128 | OracleOperator()
336+
128 129 | PostgresOperator()
337+
338+
AIR302_common_sql.py:126:1: AIR302 [*] `airflow.operators.mysql_operator.MySqlOperator` is moved into `common-sql` provider in Airflow 3.0;
314339
|
315340
124 | JdbcOperator()
316341
125 | MsSqlOperator()
@@ -321,7 +346,21 @@ AIR302_common_sql.py:126:1: AIR302 `airflow.operators.mysql_operator.MySqlOperat
321346
|
322347
= help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead.
323348

324-
AIR302_common_sql.py:127:1: AIR302 `airflow.operators.oracle_operator.OracleOperator` is moved into `common-sql` provider in Airflow 3.0;
349+
Safe fix
350+
120 120 | from airflow.operators.oracle_operator import OracleOperator
351+
121 121 | from airflow.operators.postgres_operator import PostgresOperator
352+
122 122 | from airflow.operators.sqlite_operator import SqliteOperator
353+
123 |+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
354+
123 124 |
355+
124 125 | JdbcOperator()
356+
125 126 | MsSqlOperator()
357+
126 |-MySqlOperator()
358+
127 |+SQLExecuteQueryOperator()
359+
127 128 | OracleOperator()
360+
128 129 | PostgresOperator()
361+
129 130 | SqliteOperator()
362+
363+
AIR302_common_sql.py:127:1: AIR302 [*] `airflow.operators.oracle_operator.OracleOperator` is moved into `common-sql` provider in Airflow 3.0;
325364
|
326365
125 | MsSqlOperator()
327366
126 | MySqlOperator()
@@ -332,7 +371,21 @@ AIR302_common_sql.py:127:1: AIR302 `airflow.operators.oracle_operator.OracleOper
332371
|
333372
= help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead.
334373

335-
AIR302_common_sql.py:128:1: AIR302 `airflow.operators.postgres_operator.PostgresOperator` is moved into `common-sql` provider in Airflow 3.0;
374+
Safe fix
375+
120 120 | from airflow.operators.oracle_operator import OracleOperator
376+
121 121 | from airflow.operators.postgres_operator import PostgresOperator
377+
122 122 | from airflow.operators.sqlite_operator import SqliteOperator
378+
123 |+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
379+
123 124 |
380+
124 125 | JdbcOperator()
381+
125 126 | MsSqlOperator()
382+
126 127 | MySqlOperator()
383+
127 |-OracleOperator()
384+
128 |+SQLExecuteQueryOperator()
385+
128 129 | PostgresOperator()
386+
129 130 | SqliteOperator()
387+
388+
AIR302_common_sql.py:128:1: AIR302 [*] `airflow.operators.postgres_operator.PostgresOperator` is moved into `common-sql` provider in Airflow 3.0;
336389
|
337390
126 | MySqlOperator()
338391
127 | OracleOperator()
@@ -342,11 +395,39 @@ AIR302_common_sql.py:128:1: AIR302 `airflow.operators.postgres_operator.Postgres
342395
|
343396
= help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead.
344397

345-
AIR302_common_sql.py:129:1: AIR302 `airflow.operators.sqlite_operator.SqliteOperator` is moved into `common-sql` provider in Airflow 3.0;
398+
Safe fix
399+
120 120 | from airflow.operators.oracle_operator import OracleOperator
400+
121 121 | from airflow.operators.postgres_operator import PostgresOperator
401+
122 122 | from airflow.operators.sqlite_operator import SqliteOperator
402+
123 |+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
403+
123 124 |
404+
124 125 | JdbcOperator()
405+
125 126 | MsSqlOperator()
406+
126 127 | MySqlOperator()
407+
127 128 | OracleOperator()
408+
128 |-PostgresOperator()
409+
129 |+SQLExecuteQueryOperator()
410+
129 130 | SqliteOperator()
411+
412+
AIR302_common_sql.py:129:1: AIR302 [*] `airflow.operators.sqlite_operator.SqliteOperator` is moved into `common-sql` provider in Airflow 3.0;
346413
|
347414
127 | OracleOperator()
348415
128 | PostgresOperator()
349416
129 | SqliteOperator()
350417
| ^^^^^^^^^^^^^^ AIR302
351418
|
352419
= help: Install `apache-airflow-providers-common-sql>=1.3.0` and use `airflow.providers.common.sql.operators.sql.SQLExecuteQueryOperator` instead.
420+
421+
Safe fix
422+
120 120 | from airflow.operators.oracle_operator import OracleOperator
423+
121 121 | from airflow.operators.postgres_operator import PostgresOperator
424+
122 122 | from airflow.operators.sqlite_operator import SqliteOperator
425+
123 |+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
426+
123 124 |
427+
124 125 | JdbcOperator()
428+
125 126 | MsSqlOperator()
429+
126 127 | MySqlOperator()
430+
127 128 | OracleOperator()
431+
128 129 | PostgresOperator()
432+
129 |-SqliteOperator()
433+
130 |+SQLExecuteQueryOperator()

0 commit comments

Comments
 (0)