[`airflow`] Extend `AIR302` with additional symbols (#17085)

## Summary

* ``airflow.auth.managers.base_auth_manager.is_authorized_dataset`` has
been moved to
``airflow.api_fastapi.auth.managers.base_auth_manager.is_authorized_asset``
in Airflow 3.0
* ``airflow.auth.managers.models.resource_details.DatasetDetails`` has
been moved to
``airflow.api_fastapi.auth.managers.models.resource_details.AssetDetails``
in Airflow 3.0
* Dag arguments `default_view` and `orientation` has been removed in
Airflow 3.0
* `airflow.models.baseoperatorlink.BaseOperatorLink` has been moved to
`airflow.sdk.definitions.baseoperatorlink.BaseOperatorLink` in Airflow
3.0
* ``airflow.notifications.basenotifier.BaseNotifier`` has been moved to
``airflow.sdk.BaseNotifier`` in Airflow 3.0
* ``airflow.utils.log.secrets_masker`` has been moved to
``airflow.sdk.execution_time.secrets_masker`` in Airflow 3.0
* ``airflow...DAG.allow_future_exec_dates`` has been removed in Airflow
3.0
* `airflow.utils.db.create_session` has een removed in Airflow 3.0
* `airflow.sensors.base_sensor_operator.BaseSensorOperator` has been
moved to `airflow.sdk.bases.sensor.BaseSensorOperator` removed Airflow
3.0
* `airflow.utils.file.TemporaryDirectory` has been removed in Airflow
3.0 and can be replaced by `tempfile.TemporaryDirectory`
* `airflow.utils.file.mkdirs` has been removed in Airflow 3.0 and can be
replaced by `pathlib.Path({path}).mkdir`

## Test Plan

Test fixture has been added for these changes
This commit is contained in:
Wei Lee 2025-04-02 23:08:52 +08:00 committed by GitHub
parent 33bd08f49b
commit fc2a0950eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 844 additions and 735 deletions

View File

@ -1,3 +1,5 @@
from __future__ import annotations
from datetime import timedelta
from airflow import DAG, dag
@ -26,7 +28,14 @@ def sla_callback(*arg, **kwargs):
DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
DAG(dag_id="class_sla_callback", fail_stop=True)
DAG(dag_id="class_fail_stop", fail_stop=True)
DAG(dag_id="class_default_view", default_view="dag_default_view")
DAG(dag_id="class_orientation", orientation="BT")
allow_future_exec_dates_dag = DAG(dag_id="class_allow_future_exec_dates")
allow_future_exec_dates_dag.allow_future_exec_dates
@dag(schedule="0 * * * *")

View File

@ -45,6 +45,8 @@ from airflow.lineage.hook import DatasetLineageInfo
from airflow.listeners.spec.dataset import on_dataset_changed, on_dataset_created
from airflow.metrics.validators import AllowListValidator, BlockListValidator
from airflow.models.baseoperator import chain, chain_linear, cross_downstream
from airflow.models.baseoperatorlink import BaseOperatorLink
from airflow.notifications.basenotifier import BaseNotifier
from airflow.operators import dummy_operator
from airflow.operators.branch_operator import BaseBranchOperator
from airflow.operators.dagrun_operator import TriggerDagRunLink, TriggerDagRunOperator
@ -104,10 +106,12 @@ from airflow.utils.dates import (
round_time,
scale_time_units,
)
from airflow.utils.db import create_session
from airflow.utils.decorators import apply_defaults
from airflow.utils.file import TemporaryDirectory, mkdirs
from airflow.utils.helpers import chain as helper_chain
from airflow.utils.helpers import cross_downstream as helper_cross_downstream
from airflow.utils.log import secrets_masker
from airflow.utils.state import SHUTDOWN, terminating_states
from airflow.utils.trigger_rule import TriggerRule
from airflow.www.auth import has_access, has_access_dataset
@ -163,6 +167,12 @@ BlockListValidator()
# airflow.models.baseoperator
chain, chain_linear, cross_downstream
# airflow.models.baseoperatorlink
BaseOperatorLink()
# ariflow.notifications.basenotifier
BaseNotifier()
# airflow.operators.dummy
EmptyOperator()
DummyOperator()
@ -282,6 +292,9 @@ test_cycle
# airflow.utils.dag_parsing_context
get_parsing_context
# airflow.utils.db
create_session
# airflow.utils.decorators
apply_defaults
@ -293,6 +306,9 @@ mkdirs
helper_chain
helper_cross_downstream
# airflow.utils.log
secrets_masker
# airflow.utils.state
SHUTDOWN
terminating_states

View File

@ -186,6 +186,12 @@ fn check_function_parameters(checker: &Checker, function_def: &StmtFunctionDef)
fn check_call_arguments(checker: &Checker, qualified_name: &QualifiedName, arguments: &Arguments) {
match qualified_name.segments() {
["airflow", .., "DAG" | "dag"] => {
// with replacement
checker.report_diagnostics(diagnostic_for_argument(
arguments,
"fail_stop",
Some("fail_fast"),
));
checker.report_diagnostics(diagnostic_for_argument(
arguments,
"schedule_interval",
@ -196,16 +202,14 @@ fn check_call_arguments(checker: &Checker, qualified_name: &QualifiedName, argum
"timetable",
Some("schedule"),
));
// without replacement
checker.report_diagnostics(diagnostic_for_argument(arguments, "default_view", None));
checker.report_diagnostics(diagnostic_for_argument(arguments, "orientation", None));
checker.report_diagnostics(diagnostic_for_argument(
arguments,
"sla_miss_callback",
None,
));
checker.report_diagnostics(diagnostic_for_argument(
arguments,
"fail_stop",
Some("fail_fast"),
));
}
_ => {
if is_airflow_auth_manager(qualified_name.segments()) {
@ -562,10 +566,14 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) {
// airflow.auth.managers
["airflow", "auth", "managers", "models", "resource_details", "DatasetDetails"] => {
Replacement::Name("airflow.auth.managers.models.resource_details.AssetDetails")
Replacement::Name(
"airflow.api_fastapi.auth.managers.models.resource_details.AssetDetails",
)
}
["airflow", "auth", "managers", "base_auth_manager", "is_authorized_dataset"] => {
Replacement::Name("airflow.auth.managers.base_auth_manager.is_authorized_asset")
Replacement::Name(
"airflow.api_fastapi.auth.managers.base_auth_manager.is_authorized_asset",
)
}
// airflow.configuration
@ -648,6 +656,14 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) {
["airflow", "models", "baseoperator", "cross_downstream"] => {
Replacement::Name("airflow.sdk.cross_downstream")
}
["airflow", "models", "baseoperatorlink", "BaseOperatorLink"] => {
Replacement::Name("airflow.sdk.definitions.baseoperatorlink.BaseOperatorLink")
}
// airflow.notifications
["airflow", "notifications", "basenotifier", "BaseNotifier"] => {
Replacement::Name("airflow.sdk.BaseNotifier")
}
// airflow.operators
["airflow", "operators", "subdag", ..] => {
@ -696,7 +712,7 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) {
// airflow.sensors
["airflow", "sensors", "base_sensor_operator", "BaseSensorOperator"] => {
Replacement::Name("airflow.sensors.base.BaseSensorOperator")
Replacement::Name("airflow.sdk.bases.sensor.BaseSensorOperator")
}
["airflow", "sensors", "date_time_sensor", "DateTimeSensor"] => {
Replacement::Name("airflow.sensors.date_time.DateTimeSensor")
@ -738,6 +754,9 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) {
Replacement::Name("airflow.sdk.get_parsing_context")
}
// airflow.utils.db
["db", "create_session"] => Replacement::None,
// airflow.utils.decorators
["decorators", "apply_defaults"] => Replacement::Message(
"`apply_defaults` is now unconditionally done and can be safely removed.",
@ -751,13 +770,18 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) {
}
// airflow.utils.file
["file", "TemporaryDirectory"] => Replacement::None,
["file", "mkdirs"] => Replacement::Name("pendulum.today('UTC').add(days=-N, ...)"),
["file", "TemporaryDirectory"] => Replacement::Name("tempfile.TemporaryDirectory"),
["file", "mkdirs"] => Replacement::Name("pathlib.Path({path}).mkdir"),
// airflow.utils.helpers
["helpers", "chain"] => Replacement::Name("airflow.sdk.chain"),
["helpers", "cross_downstream"] => Replacement::Name("airflow.sdk.cross_downstream"),
// airflow.utils.log.secrets_masker
["log", "secrets_masker"] => {
Replacement::Name("airflow.sdk.execution_time.secrets_masker")
}
// airflow.utils.state
["state", "SHUTDOWN" | "terminating_states"] => Replacement::None,

View File

@ -1,273 +1,294 @@
---
source: crates/ruff_linter/src/rules/airflow/mod.rs
snapshot_kind: text
---
AIR302_args.py:18:39: AIR302 [*] `schedule_interval` is removed in Airflow 3.0
AIR302_args.py:20:39: AIR302 [*] `schedule_interval` is removed in Airflow 3.0
|
16 | DAG(dag_id="class_schedule", schedule="@hourly")
17 |
18 | DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
| ^^^^^^^^^^^^^^^^^ AIR302
18 | DAG(dag_id="class_schedule", schedule="@hourly")
19 |
20 | DAG(dag_id="class_timetable", timetable=NullTimetable())
20 | DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
| ^^^^^^^^^^^^^^^^^ AIR302
21 |
22 | DAG(dag_id="class_timetable", timetable=NullTimetable())
|
= help: Use `schedule` instead
Safe fix
15 15 |
16 16 | DAG(dag_id="class_schedule", schedule="@hourly")
17 17 |
18 |-DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
18 |+DAG(dag_id="class_schedule_interval", schedule="@hourly")
18 18 | DAG(dag_id="class_schedule", schedule="@hourly")
19 19 |
20 20 | DAG(dag_id="class_timetable", timetable=NullTimetable())
20 |-DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
20 |+DAG(dag_id="class_schedule_interval", schedule="@hourly")
21 21 |
22 22 | DAG(dag_id="class_timetable", timetable=NullTimetable())
23 23 |
AIR302_args.py:20:31: AIR302 [*] `timetable` is removed in Airflow 3.0
AIR302_args.py:22:31: AIR302 [*] `timetable` is removed in Airflow 3.0
|
18 | DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
19 |
20 | DAG(dag_id="class_timetable", timetable=NullTimetable())
20 | DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
21 |
22 | DAG(dag_id="class_timetable", timetable=NullTimetable())
| ^^^^^^^^^ AIR302
|
= help: Use `schedule` instead
Safe fix
17 17 |
18 18 | DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
19 19 |
20 |-DAG(dag_id="class_timetable", timetable=NullTimetable())
20 |+DAG(dag_id="class_timetable", schedule=NullTimetable())
20 20 | DAG(dag_id="class_schedule_interval", schedule_interval="@hourly")
21 21 |
22 22 |
23 23 | def sla_callback(*arg, **kwargs):
22 |-DAG(dag_id="class_timetable", timetable=NullTimetable())
22 |+DAG(dag_id="class_timetable", schedule=NullTimetable())
23 23 |
24 24 |
25 25 | def sla_callback(*arg, **kwargs):
AIR302_args.py:27:34: AIR302 `sla_miss_callback` is removed in Airflow 3.0
AIR302_args.py:29:34: AIR302 `sla_miss_callback` is removed in Airflow 3.0
|
27 | DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
29 | DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
| ^^^^^^^^^^^^^^^^^ AIR302
28 |
29 | DAG(dag_id="class_sla_callback", fail_stop=True)
30 |
31 | DAG(dag_id="class_fail_stop", fail_stop=True)
|
AIR302_args.py:29:34: AIR302 [*] `fail_stop` is removed in Airflow 3.0
AIR302_args.py:31:31: AIR302 [*] `fail_stop` is removed in Airflow 3.0
|
27 | DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
28 |
29 | DAG(dag_id="class_sla_callback", fail_stop=True)
| ^^^^^^^^^ AIR302
29 | DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
30 |
31 | DAG(dag_id="class_fail_stop", fail_stop=True)
| ^^^^^^^^^ AIR302
32 |
33 | DAG(dag_id="class_default_view", default_view="dag_default_view")
|
= help: Use `fail_fast` instead
Safe fix
26 26 |
27 27 | DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
28 28 |
29 |-DAG(dag_id="class_sla_callback", fail_stop=True)
29 |+DAG(dag_id="class_sla_callback", fail_fast=True)
29 29 | DAG(dag_id="class_sla_callback", sla_miss_callback=sla_callback)
30 30 |
31 31 |
32 32 | @dag(schedule="0 * * * *")
31 |-DAG(dag_id="class_fail_stop", fail_stop=True)
31 |+DAG(dag_id="class_fail_stop", fail_fast=True)
32 32 |
33 33 | DAG(dag_id="class_default_view", default_view="dag_default_view")
34 34 |
AIR302_args.py:37:6: AIR302 [*] `schedule_interval` is removed in Airflow 3.0
AIR302_args.py:33:34: AIR302 `default_view` is removed in Airflow 3.0
|
37 | @dag(schedule_interval="0 * * * *")
31 | DAG(dag_id="class_fail_stop", fail_stop=True)
32 |
33 | DAG(dag_id="class_default_view", default_view="dag_default_view")
| ^^^^^^^^^^^^ AIR302
34 |
35 | DAG(dag_id="class_orientation", orientation="BT")
|
AIR302_args.py:35:33: AIR302 `orientation` is removed in Airflow 3.0
|
33 | DAG(dag_id="class_default_view", default_view="dag_default_view")
34 |
35 | DAG(dag_id="class_orientation", orientation="BT")
| ^^^^^^^^^^^ AIR302
36 |
37 | allow_future_exec_dates_dag = DAG(dag_id="class_allow_future_exec_dates")
|
AIR302_args.py:46:6: AIR302 [*] `schedule_interval` is removed in Airflow 3.0
|
46 | @dag(schedule_interval="0 * * * *")
| ^^^^^^^^^^^^^^^^^ AIR302
38 | def decorator_schedule_interval():
39 | pass
47 | def decorator_schedule_interval():
48 | pass
|
= help: Use `schedule` instead
Safe fix
34 34 | pass
35 35 |
36 36 |
37 |-@dag(schedule_interval="0 * * * *")
37 |+@dag(schedule="0 * * * *")
38 38 | def decorator_schedule_interval():
39 39 | pass
40 40 |
AIR302_args.py:42:6: AIR302 [*] `timetable` is removed in Airflow 3.0
|
42 | @dag(timetable=NullTimetable())
| ^^^^^^^^^ AIR302
43 | def decorator_timetable():
44 | pass
|
= help: Use `schedule` instead
Safe fix
39 39 | pass
40 40 |
41 41 |
42 |-@dag(timetable=NullTimetable())
42 |+@dag(schedule=NullTimetable())
43 43 | def decorator_timetable():
44 44 | pass
43 43 | pass
44 44 |
45 45 |
46 |-@dag(schedule_interval="0 * * * *")
46 |+@dag(schedule="0 * * * *")
47 47 | def decorator_schedule_interval():
48 48 | pass
49 49 |
AIR302_args.py:47:6: AIR302 `sla_miss_callback` is removed in Airflow 3.0
AIR302_args.py:51:6: AIR302 [*] `timetable` is removed in Airflow 3.0
|
47 | @dag(sla_miss_callback=sla_callback)
51 | @dag(timetable=NullTimetable())
| ^^^^^^^^^ AIR302
52 | def decorator_timetable():
53 | pass
|
= help: Use `schedule` instead
Safe fix
48 48 | pass
49 49 |
50 50 |
51 |-@dag(timetable=NullTimetable())
51 |+@dag(schedule=NullTimetable())
52 52 | def decorator_timetable():
53 53 | pass
54 54 |
AIR302_args.py:56:6: AIR302 `sla_miss_callback` is removed in Airflow 3.0
|
56 | @dag(sla_miss_callback=sla_callback)
| ^^^^^^^^^^^^^^^^^ AIR302
48 | def decorator_sla_callback():
49 | pass
57 | def decorator_sla_callback():
58 | pass
|
AIR302_args.py:55:39: AIR302 [*] `execution_date` is removed in Airflow 3.0
AIR302_args.py:64:39: AIR302 [*] `execution_date` is removed in Airflow 3.0
|
53 | def decorator_deprecated_operator_args():
54 | trigger_dagrun_op = trigger_dagrun.TriggerDagRunOperator(
55 | task_id="trigger_dagrun_op1", execution_date="2024-12-04"
62 | def decorator_deprecated_operator_args():
63 | trigger_dagrun_op = trigger_dagrun.TriggerDagRunOperator(
64 | task_id="trigger_dagrun_op1", execution_date="2024-12-04"
| ^^^^^^^^^^^^^^ AIR302
56 | )
57 | trigger_dagrun_op2 = TriggerDagRunOperator(
65 | )
66 | trigger_dagrun_op2 = TriggerDagRunOperator(
|
= help: Use `logical_date` instead
Safe fix
52 52 | @dag()
53 53 | def decorator_deprecated_operator_args():
54 54 | trigger_dagrun_op = trigger_dagrun.TriggerDagRunOperator(
55 |- task_id="trigger_dagrun_op1", execution_date="2024-12-04"
55 |+ task_id="trigger_dagrun_op1", logical_date="2024-12-04"
56 56 | )
57 57 | trigger_dagrun_op2 = TriggerDagRunOperator(
58 58 | task_id="trigger_dagrun_op2", execution_date="2024-12-04"
61 61 | @dag()
62 62 | def decorator_deprecated_operator_args():
63 63 | trigger_dagrun_op = trigger_dagrun.TriggerDagRunOperator(
64 |- task_id="trigger_dagrun_op1", execution_date="2024-12-04"
64 |+ task_id="trigger_dagrun_op1", logical_date="2024-12-04"
65 65 | )
66 66 | trigger_dagrun_op2 = TriggerDagRunOperator(
67 67 | task_id="trigger_dagrun_op2", execution_date="2024-12-04"
AIR302_args.py:58:39: AIR302 [*] `execution_date` is removed in Airflow 3.0
AIR302_args.py:67:39: AIR302 [*] `execution_date` is removed in Airflow 3.0
|
56 | )
57 | trigger_dagrun_op2 = TriggerDagRunOperator(
58 | task_id="trigger_dagrun_op2", execution_date="2024-12-04"
65 | )
66 | trigger_dagrun_op2 = TriggerDagRunOperator(
67 | task_id="trigger_dagrun_op2", execution_date="2024-12-04"
| ^^^^^^^^^^^^^^ AIR302
59 | )
68 | )
|
= help: Use `logical_date` instead
Safe fix
55 55 | task_id="trigger_dagrun_op1", execution_date="2024-12-04"
56 56 | )
57 57 | trigger_dagrun_op2 = TriggerDagRunOperator(
58 |- task_id="trigger_dagrun_op2", execution_date="2024-12-04"
58 |+ task_id="trigger_dagrun_op2", logical_date="2024-12-04"
59 59 | )
60 60 |
61 61 | branch_dt_op = datetime.BranchDateTimeOperator(
64 64 | task_id="trigger_dagrun_op1", execution_date="2024-12-04"
65 65 | )
66 66 | trigger_dagrun_op2 = TriggerDagRunOperator(
67 |- task_id="trigger_dagrun_op2", execution_date="2024-12-04"
67 |+ task_id="trigger_dagrun_op2", logical_date="2024-12-04"
68 68 | )
69 69 |
70 70 | branch_dt_op = datetime.BranchDateTimeOperator(
AIR302_args.py:62:33: AIR302 [*] `use_task_execution_day` is removed in Airflow 3.0
AIR302_args.py:71:33: AIR302 [*] `use_task_execution_day` is removed in Airflow 3.0
|
61 | branch_dt_op = datetime.BranchDateTimeOperator(
62 | task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
70 | branch_dt_op = datetime.BranchDateTimeOperator(
71 | task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
| ^^^^^^^^^^^^^^^^^^^^^^ AIR302
63 | )
64 | branch_dt_op2 = BranchDateTimeOperator(
72 | )
73 | branch_dt_op2 = BranchDateTimeOperator(
|
= help: Use `use_task_logical_date` instead
Safe fix
59 59 | )
60 60 |
61 61 | branch_dt_op = datetime.BranchDateTimeOperator(
62 |- task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
62 |+ task_id="branch_dt_op", use_task_logical_date=True, task_concurrency=5
63 63 | )
64 64 | branch_dt_op2 = BranchDateTimeOperator(
65 65 | task_id="branch_dt_op2",
68 68 | )
69 69 |
70 70 | branch_dt_op = datetime.BranchDateTimeOperator(
71 |- task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
71 |+ task_id="branch_dt_op", use_task_logical_date=True, task_concurrency=5
72 72 | )
73 73 | branch_dt_op2 = BranchDateTimeOperator(
74 74 | task_id="branch_dt_op2",
AIR302_args.py:62:62: AIR302 [*] `task_concurrency` is removed in Airflow 3.0
AIR302_args.py:71:62: AIR302 [*] `task_concurrency` is removed in Airflow 3.0
|
61 | branch_dt_op = datetime.BranchDateTimeOperator(
62 | task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
70 | branch_dt_op = datetime.BranchDateTimeOperator(
71 | task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
| ^^^^^^^^^^^^^^^^ AIR302
63 | )
64 | branch_dt_op2 = BranchDateTimeOperator(
72 | )
73 | branch_dt_op2 = BranchDateTimeOperator(
|
= help: Use `max_active_tis_per_dag` instead
Safe fix
59 59 | )
60 60 |
61 61 | branch_dt_op = datetime.BranchDateTimeOperator(
62 |- task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
62 |+ task_id="branch_dt_op", use_task_execution_day=True, max_active_tis_per_dag=5
63 63 | )
64 64 | branch_dt_op2 = BranchDateTimeOperator(
65 65 | task_id="branch_dt_op2",
68 68 | )
69 69 |
70 70 | branch_dt_op = datetime.BranchDateTimeOperator(
71 |- task_id="branch_dt_op", use_task_execution_day=True, task_concurrency=5
71 |+ task_id="branch_dt_op", use_task_execution_day=True, max_active_tis_per_dag=5
72 72 | )
73 73 | branch_dt_op2 = BranchDateTimeOperator(
74 74 | task_id="branch_dt_op2",
AIR302_args.py:66:9: AIR302 [*] `use_task_execution_day` is removed in Airflow 3.0
AIR302_args.py:75:9: AIR302 [*] `use_task_execution_day` is removed in Airflow 3.0
|
64 | branch_dt_op2 = BranchDateTimeOperator(
65 | task_id="branch_dt_op2",
66 | use_task_execution_day=True,
73 | branch_dt_op2 = BranchDateTimeOperator(
74 | task_id="branch_dt_op2",
75 | use_task_execution_day=True,
| ^^^^^^^^^^^^^^^^^^^^^^ AIR302
67 | sla=timedelta(seconds=10),
68 | )
76 | sla=timedelta(seconds=10),
77 | )
|
= help: Use `use_task_logical_date` instead
Safe fix
63 63 | )
64 64 | branch_dt_op2 = BranchDateTimeOperator(
65 65 | task_id="branch_dt_op2",
66 |- use_task_execution_day=True,
66 |+ use_task_logical_date=True,
67 67 | sla=timedelta(seconds=10),
68 68 | )
69 69 |
72 72 | )
73 73 | branch_dt_op2 = BranchDateTimeOperator(
74 74 | task_id="branch_dt_op2",
75 |- use_task_execution_day=True,
75 |+ use_task_logical_date=True,
76 76 | sla=timedelta(seconds=10),
77 77 | )
78 78 |
AIR302_args.py:67:9: AIR302 `sla` is removed in Airflow 3.0
AIR302_args.py:76:9: AIR302 `sla` is removed in Airflow 3.0
|
65 | task_id="branch_dt_op2",
66 | use_task_execution_day=True,
67 | sla=timedelta(seconds=10),
74 | task_id="branch_dt_op2",
75 | use_task_execution_day=True,
76 | sla=timedelta(seconds=10),
| ^^^ AIR302
68 | )
77 | )
|
AIR302_args.py:89:15: AIR302 `filename_template` is removed in Airflow 3.0
|
88 | # deprecated filename_template argument in FileTaskHandler
89 | S3TaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
90 | HdfsTaskHandler(filename_template="/tmp/test")
91 | ElasticsearchTaskHandler(filename_template="/tmp/test")
|
AIR302_args.py:98:15: AIR302 `filename_template` is removed in Airflow 3.0
|
97 | # deprecated filename_template argument in FileTaskHandler
98 | S3TaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
99 | HdfsTaskHandler(filename_template="/tmp/test")
100 | ElasticsearchTaskHandler(filename_template="/tmp/test")
|
AIR302_args.py:90:17: AIR302 `filename_template` is removed in Airflow 3.0
|
88 | # deprecated filename_template argument in FileTaskHandler
89 | S3TaskHandler(filename_template="/tmp/test")
90 | HdfsTaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
91 | ElasticsearchTaskHandler(filename_template="/tmp/test")
92 | GCSTaskHandler(filename_template="/tmp/test")
|
AIR302_args.py:99:17: AIR302 `filename_template` is removed in Airflow 3.0
|
97 | # deprecated filename_template argument in FileTaskHandler
98 | S3TaskHandler(filename_template="/tmp/test")
99 | HdfsTaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
100 | ElasticsearchTaskHandler(filename_template="/tmp/test")
101 | GCSTaskHandler(filename_template="/tmp/test")
|
AIR302_args.py:91:26: AIR302 `filename_template` is removed in Airflow 3.0
|
89 | S3TaskHandler(filename_template="/tmp/test")
90 | HdfsTaskHandler(filename_template="/tmp/test")
91 | ElasticsearchTaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
92 | GCSTaskHandler(filename_template="/tmp/test")
|
AIR302_args.py:100:26: AIR302 `filename_template` is removed in Airflow 3.0
|
98 | S3TaskHandler(filename_template="/tmp/test")
99 | HdfsTaskHandler(filename_template="/tmp/test")
100 | ElasticsearchTaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
101 | GCSTaskHandler(filename_template="/tmp/test")
|
AIR302_args.py:92:16: AIR302 `filename_template` is removed in Airflow 3.0
|
90 | HdfsTaskHandler(filename_template="/tmp/test")
91 | ElasticsearchTaskHandler(filename_template="/tmp/test")
92 | GCSTaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
93 |
94 | FabAuthManager(None)
|
AIR302_args.py:101:16: AIR302 `filename_template` is removed in Airflow 3.0
|
99 | HdfsTaskHandler(filename_template="/tmp/test")
100 | ElasticsearchTaskHandler(filename_template="/tmp/test")
101 | GCSTaskHandler(filename_template="/tmp/test")
| ^^^^^^^^^^^^^^^^^ AIR302
102 |
103 | FabAuthManager(None)
|
AIR302_args.py:94:15: AIR302 `appbuilder` is removed in Airflow 3.0; The constructor takes no parameter now
|
92 | GCSTaskHandler(filename_template="/tmp/test")
93 |
94 | FabAuthManager(None)
| ^^^^^^ AIR302
|
AIR302_args.py:103:15: AIR302 `appbuilder` is removed in Airflow 3.0; The constructor takes no parameter now
|
101 | GCSTaskHandler(filename_template="/tmp/test")
102 |
103 | FabAuthManager(None)
| ^^^^^^ AIR302
|