diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR311_names.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR311_names.py index 712957f3b1..9b4ce1e38e 100644 --- a/crates/ruff_linter/resources/test/fixtures/airflow/AIR311_names.py +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR311_names.py @@ -74,3 +74,36 @@ DatasetOrTimeSchedule() # airflow.utils.dag_parsing_context get_parsing_context() + +from airflow.decorators.base import ( + DecoratedMappedOperator, + DecoratedOperator, + TaskDecorator, + get_unique_task_id, + task_decorator_factory, +) + +# airflow.decorators.base +DecoratedMappedOperator() +DecoratedOperator() +TaskDecorator() +get_unique_task_id() +task_decorator_factory() + + +from airflow.models import Param + +# airflow.models +Param() + + +from airflow.sensors.base import ( + BaseSensorOperator, + PokeReturnValue, + poke_mode_only, +) + +# airflow.sensors.base +BaseSensorOperator() +PokeReturnValue() +poke_mode_only() diff --git a/crates/ruff_linter/resources/test/fixtures/airflow/AIR312.py b/crates/ruff_linter/resources/test/fixtures/airflow/AIR312.py index 0752511706..ae644bf9a5 100644 --- a/crates/ruff_linter/resources/test/fixtures/airflow/AIR312.py +++ b/crates/ruff_linter/resources/test/fixtures/airflow/AIR312.py @@ -9,7 +9,6 @@ from airflow.operators.empty import EmptyOperator from airflow.operators.latest_only import LatestOnlyOperator from airflow.operators.trigger_dagrun import TriggerDagRunOperator from airflow.operators.weekday import BranchDayOfWeekOperator -from airflow.sensors.date_time import DateTimeSensor FSHook() PackageIndexHook() @@ -22,7 +21,6 @@ EmptyOperator() LatestOnlyOperator() BranchDayOfWeekOperator() -DateTimeSensor() from airflow.operators.python import ( BranchPythonOperator, @@ -30,16 +28,23 @@ from airflow.operators.python import ( PythonVirtualenvOperator, ShortCircuitOperator, ) +from airflow.sensors.bash import BashSensor +from airflow.sensors.date_time import DateTimeSensor + +BranchPythonOperator() +PythonOperator() +PythonVirtualenvOperator() +ShortCircuitOperator() + +BashSensor() +DateTimeSensor() from airflow.sensors.date_time import DateTimeSensorAsync from airflow.sensors.external_task import ( ExternalTaskMarker, ExternalTaskSensor, ) -from airflow.sensors.time_sensor import ( - TimeSensor, - TimeSensorAsync, -) from airflow.sensors.filesystem import FileSensor +from airflow.sensors.python import PythonSensor BranchPythonOperator() PythonOperator() @@ -49,6 +54,13 @@ DateTimeSensorAsync() ExternalTaskMarker() ExternalTaskSensor() FileSensor() +PythonSensor() + +from airflow.sensors.time_sensor import ( + TimeSensor, + TimeSensorAsync, +) + TimeSensor() TimeSensorAsync() 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 9963635c2e..5f88370c37 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 @@ -215,6 +215,12 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan version: "0.0.1", } } + ["airflow", "sensors", "bash", "BashSensor"] => ProviderReplacement::AutoImport { + module: "airflow.providers.standard.sensor.bash", + name: "BashSensor", + provider: "standard", + version: "0.0.1", + }, [ "airflow", "sensors", @@ -243,6 +249,12 @@ fn check_names_moved_to_provider(checker: &Checker, expr: &Expr, ranged: TextRan provider: "standard", version: "0.0.2", }, + ["airflow", "sensors", "python", "PythonSensor"] => ProviderReplacement::AutoImport { + module: "airflow.providers.standard.sensors.python", + name: "PythonSensor", + provider: "standard", + version: "0.0.1", + }, [ "airflow", "sensors", diff --git a/crates/ruff_linter/src/rules/airflow/rules/suggested_to_update_3_0.rs b/crates/ruff_linter/src/rules/airflow/rules/suggested_to_update_3_0.rs index c2c7a64fa3..41bc35d352 100644 --- a/crates/ruff_linter/src/rules/airflow/rules/suggested_to_update_3_0.rs +++ b/crates/ruff_linter/src/rules/airflow/rules/suggested_to_update_3_0.rs @@ -227,6 +227,19 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) { module: "airflow.sdk", name: (*rest).to_string(), }, + [ + "airflow", + "decorators", + "base", + rest @ ("DecoratedMappedOperator" + | "DecoratedOperator" + | "TaskDecorator" + | "get_unique_task_id" + | "task_decorator_factory"), + ] => Replacement::SourceModuleMoved { + module: "airflow.sdk.bases.decorator", + name: (*rest).to_string(), + }, // airflow.io ["airflow", "io", "path", "ObjectStoragePath"] => Replacement::SourceModuleMoved { @@ -245,6 +258,10 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) { name: (*rest).to_string(), } } + ["airflow", "models", "Param"] => Replacement::AutoImport { + module: "airflow.sdk.definitions.param", + name: "Param", + }, // airflow.models.baseoperator [ @@ -260,16 +277,30 @@ fn check_name(checker: &Checker, expr: &Expr, range: TextRange) { module: "airflow.sdk", name: "BaseOperatorLink", }, + // airflow.model..DAG ["airflow", "models", .., "DAG"] => Replacement::SourceModuleMoved { module: "airflow.sdk", name: "DAG".to_string(), }, + + // airflow.sensors.base + [ + "airflow", + "sensors", + "base", + rest @ ("BaseSensorOperator" | "PokeReturnValue" | "poke_mode_only"), + ] => Replacement::SourceModuleMoved { + module: "airflow.sdk", + name: (*rest).to_string(), + }, + // airflow.timetables ["airflow", "timetables", "datasets", "DatasetOrTimeSchedule"] => Replacement::AutoImport { module: "airflow.timetables.assets", name: "AssetOrTimeSchedule", }, + // airflow.utils [ "airflow", diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR311_AIR311_names.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR311_AIR311_names.py.snap index fa121a1dce..5db2299127 100644 --- a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR311_AIR311_names.py.snap +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR311_AIR311_names.py.snap @@ -614,6 +614,8 @@ AIR311 [*] `airflow.utils.dag_parsing_context.get_parsing_context` is removed in 75 | # airflow.utils.dag_parsing_context 76 | get_parsing_context() | ^^^^^^^^^^^^^^^^^^^ +77 | +78 | from airflow.decorators.base import ( | help: Use `get_parsing_context` from `airflow.sdk` instead. @@ -626,3 +628,211 @@ help: Use `get_parsing_context` from `airflow.sdk` instead. 71 71 | 72 72 | # airflow.timetables.datasets 73 73 | DatasetOrTimeSchedule() + +AIR311 [*] `airflow.decorators.base.DecoratedMappedOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:87:1 + | +86 | # airflow.decorators.base +87 | DecoratedMappedOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^ +88 | DecoratedOperator() +89 | TaskDecorator() + | +help: Use `DecoratedMappedOperator` from `airflow.sdk.bases.decorator` instead. + +ℹ Unsafe fix +76 76 | get_parsing_context() +77 77 | +78 78 | from airflow.decorators.base import ( +79 |- DecoratedMappedOperator, +80 79 | DecoratedOperator, +81 80 | TaskDecorator, +82 81 | get_unique_task_id, +83 82 | task_decorator_factory, +84 83 | ) + 84 |+from airflow.sdk.bases.decorator import DecoratedMappedOperator +85 85 | +86 86 | # airflow.decorators.base +87 87 | DecoratedMappedOperator() + +AIR311 [*] `airflow.decorators.base.DecoratedOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:88:1 + | +86 | # airflow.decorators.base +87 | DecoratedMappedOperator() +88 | DecoratedOperator() + | ^^^^^^^^^^^^^^^^^ +89 | TaskDecorator() +90 | get_unique_task_id() + | +help: Use `DecoratedOperator` from `airflow.sdk.bases.decorator` instead. + +ℹ Unsafe fix +77 77 | +78 78 | from airflow.decorators.base import ( +79 79 | DecoratedMappedOperator, +80 |- DecoratedOperator, +81 80 | TaskDecorator, +82 81 | get_unique_task_id, +83 82 | task_decorator_factory, +84 83 | ) + 84 |+from airflow.sdk.bases.decorator import DecoratedOperator +85 85 | +86 86 | # airflow.decorators.base +87 87 | DecoratedMappedOperator() + +AIR311 [*] `airflow.decorators.base.TaskDecorator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:89:1 + | +87 | DecoratedMappedOperator() +88 | DecoratedOperator() +89 | TaskDecorator() + | ^^^^^^^^^^^^^ +90 | get_unique_task_id() +91 | task_decorator_factory() + | +help: Use `TaskDecorator` from `airflow.sdk.bases.decorator` instead. + +ℹ Unsafe fix +78 78 | from airflow.decorators.base import ( +79 79 | DecoratedMappedOperator, +80 80 | DecoratedOperator, +81 |- TaskDecorator, +82 81 | get_unique_task_id, +83 82 | task_decorator_factory, +84 83 | ) + 84 |+from airflow.sdk.bases.decorator import TaskDecorator +85 85 | +86 86 | # airflow.decorators.base +87 87 | DecoratedMappedOperator() + +AIR311 [*] `airflow.decorators.base.get_unique_task_id` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:90:1 + | +88 | DecoratedOperator() +89 | TaskDecorator() +90 | get_unique_task_id() + | ^^^^^^^^^^^^^^^^^^ +91 | task_decorator_factory() + | +help: Use `get_unique_task_id` from `airflow.sdk.bases.decorator` instead. + +ℹ Unsafe fix +79 79 | DecoratedMappedOperator, +80 80 | DecoratedOperator, +81 81 | TaskDecorator, +82 |- get_unique_task_id, +83 82 | task_decorator_factory, +84 83 | ) + 84 |+from airflow.sdk.bases.decorator import get_unique_task_id +85 85 | +86 86 | # airflow.decorators.base +87 87 | DecoratedMappedOperator() + +AIR311 [*] `airflow.decorators.base.task_decorator_factory` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:91:1 + | +89 | TaskDecorator() +90 | get_unique_task_id() +91 | task_decorator_factory() + | ^^^^^^^^^^^^^^^^^^^^^^ + | +help: Use `task_decorator_factory` from `airflow.sdk.bases.decorator` instead. + +ℹ Unsafe fix +80 80 | DecoratedOperator, +81 81 | TaskDecorator, +82 82 | get_unique_task_id, +83 |- task_decorator_factory, +84 83 | ) + 84 |+from airflow.sdk.bases.decorator import task_decorator_factory +85 85 | +86 86 | # airflow.decorators.base +87 87 | DecoratedMappedOperator() + +AIR311 [*] `airflow.models.Param` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:97:1 + | +96 | # airflow.models +97 | Param() + | ^^^^^ + | +help: Use `Param` from `airflow.sdk.definitions.param` instead. + +ℹ Unsafe fix +91 91 | task_decorator_factory() +92 92 | +93 93 | +94 |-from airflow.models import Param + 94 |+from airflow.sdk.definitions.param import Param +95 95 | +96 96 | # airflow.models +97 97 | Param() + +AIR311 [*] `airflow.sensors.base.BaseSensorOperator` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:107:1 + | +106 | # airflow.sensors.base +107 | BaseSensorOperator() + | ^^^^^^^^^^^^^^^^^^ +108 | PokeReturnValue() +109 | poke_mode_only() + | +help: Use `BaseSensorOperator` from `airflow.sdk` instead. + +ℹ Unsafe fix +98 98 | +99 99 | +100 100 | from airflow.sensors.base import ( +101 |- BaseSensorOperator, +102 101 | PokeReturnValue, +103 102 | poke_mode_only, +104 103 | ) + 104 |+from airflow.sdk import BaseSensorOperator +105 105 | +106 106 | # airflow.sensors.base +107 107 | BaseSensorOperator() + +AIR311 [*] `airflow.sensors.base.PokeReturnValue` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:108:1 + | +106 | # airflow.sensors.base +107 | BaseSensorOperator() +108 | PokeReturnValue() + | ^^^^^^^^^^^^^^^ +109 | poke_mode_only() + | +help: Use `PokeReturnValue` from `airflow.sdk` instead. + +ℹ Unsafe fix +99 99 | +100 100 | from airflow.sensors.base import ( +101 101 | BaseSensorOperator, +102 |- PokeReturnValue, +103 102 | poke_mode_only, +104 103 | ) + 104 |+from airflow.sdk import PokeReturnValue +105 105 | +106 106 | # airflow.sensors.base +107 107 | BaseSensorOperator() + +AIR311 [*] `airflow.sensors.base.poke_mode_only` is removed in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR311_names.py:109:1 + | +107 | BaseSensorOperator() +108 | PokeReturnValue() +109 | poke_mode_only() + | ^^^^^^^^^^^^^^ + | +help: Use `poke_mode_only` from `airflow.sdk` instead. + +ℹ Unsafe fix +100 100 | from airflow.sensors.base import ( +101 101 | BaseSensorOperator, +102 102 | PokeReturnValue, +103 |- poke_mode_only, +104 103 | ) + 104 |+from airflow.sdk import poke_mode_only +105 105 | +106 106 | # airflow.sensors.base +107 107 | BaseSensorOperator() diff --git a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR312_AIR312.py.snap b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR312_AIR312.py.snap index 628ffe31dc..14276da4c4 100644 --- a/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR312_AIR312.py.snap +++ b/crates/ruff_linter/src/rules/airflow/snapshots/ruff_linter__rules__airflow__tests__AIR312_AIR312.py.snap @@ -2,14 +2,14 @@ source: crates/ruff_linter/src/rules/airflow/mod.rs --- AIR312 [*] `airflow.hooks.filesystem.FSHook` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:14:1 + --> AIR312.py:13:1 | -12 | from airflow.sensors.date_time import DateTimeSensor -13 | -14 | FSHook() +11 | from airflow.operators.weekday import BranchDayOfWeekOperator +12 | +13 | FSHook() | ^^^^^^ -15 | PackageIndexHook() -16 | SubprocessHook() +14 | PackageIndexHook() +15 | SubprocessHook() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `FSHook` from `airflow.providers.standard.hooks.filesystem` instead. @@ -21,21 +21,21 @@ help: Install `apache-airflow-providers-standard>=0.0.1` and use `FSHook` from ` 5 4 | from airflow.hooks.subprocess import SubprocessHook 6 5 | from airflow.operators.bash import BashOperator -------------------------------------------------------------------------------- +9 8 | from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.hooks.filesystem import FSHook -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.hooks.filesystem import FSHook +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.hooks.package_index.PackageIndexHook` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:15:1 + --> AIR312.py:14:1 | -14 | FSHook() -15 | PackageIndexHook() +13 | FSHook() +14 | PackageIndexHook() | ^^^^^^^^^^^^^^^^ -16 | SubprocessHook() +15 | SubprocessHook() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `PackageIndexHook` from `airflow.providers.standard.hooks.package_index` instead. @@ -48,23 +48,23 @@ help: Install `apache-airflow-providers-standard>=0.0.1` and use `PackageIndexHo 6 5 | from airflow.operators.bash import BashOperator 7 6 | from airflow.operators.datetime import BranchDateTimeOperator -------------------------------------------------------------------------------- +9 8 | from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.hooks.package_index import PackageIndexHook -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.hooks.package_index import PackageIndexHook +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.hooks.subprocess.SubprocessHook` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:16:1 + --> AIR312.py:15:1 | -14 | FSHook() -15 | PackageIndexHook() -16 | SubprocessHook() +13 | FSHook() +14 | PackageIndexHook() +15 | SubprocessHook() | ^^^^^^^^^^^^^^ -17 | -18 | BashOperator() +16 | +17 | BashOperator() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `SubprocessHook` from `airflow.providers.standard.hooks.subprocess` instead. @@ -76,24 +76,23 @@ help: Install `apache-airflow-providers-standard>=0.0.3` and use `SubprocessHook 6 5 | from airflow.operators.bash import BashOperator 7 6 | from airflow.operators.datetime import BranchDateTimeOperator 8 7 | from airflow.operators.empty import EmptyOperator --------------------------------------------------------------------------------- +9 8 | from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.hooks.subprocess import SubprocessHook -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.hooks.subprocess import SubprocessHook +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.bash.BashOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:18:1 + --> AIR312.py:17:1 | -16 | SubprocessHook() -17 | -18 | BashOperator() +15 | SubprocessHook() +16 | +17 | BashOperator() | ^^^^^^^^^^^^ -19 | BranchDateTimeOperator() -20 | TriggerDagRunOperator() +18 | BranchDateTimeOperator() +19 | TriggerDagRunOperator() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `BashOperator` from `airflow.providers.standard.operators.bash` instead. @@ -107,20 +106,19 @@ help: Install `apache-airflow-providers-standard>=0.0.1` and use `BashOperator` 9 8 | from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.operators.bash import BashOperator -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.operators.bash import BashOperator +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.datetime.BranchDateTimeOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:19:1 + --> AIR312.py:18:1 | -18 | BashOperator() -19 | BranchDateTimeOperator() +17 | BashOperator() +18 | BranchDateTimeOperator() | ^^^^^^^^^^^^^^^^^^^^^^ -20 | TriggerDagRunOperator() -21 | EmptyOperator() +19 | TriggerDagRunOperator() +20 | EmptyOperator() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `BranchDateTimeOperator` from `airflow.providers.standard.operators.datetime` instead. @@ -133,20 +131,19 @@ help: Install `apache-airflow-providers-standard>=0.0.1` and use `BranchDateTime 9 8 | from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.operators.datetime import BranchDateTimeOperator -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.operators.datetime import BranchDateTimeOperator +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.trigger_dagrun.TriggerDagRunOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:20:1 + --> AIR312.py:19:1 | -18 | BashOperator() -19 | BranchDateTimeOperator() -20 | TriggerDagRunOperator() +17 | BashOperator() +18 | BranchDateTimeOperator() +19 | TriggerDagRunOperator() | ^^^^^^^^^^^^^^^^^^^^^ -21 | EmptyOperator() +20 | EmptyOperator() | help: Install `apache-airflow-providers-standard>=0.0.2` and use `TriggerDagRunOperator` from `airflow.providers.standard.operators.trigger_dagrun` instead. @@ -156,21 +153,20 @@ help: Install `apache-airflow-providers-standard>=0.0.2` and use `TriggerDagRunO 9 9 | from airflow.operators.latest_only import LatestOnlyOperator 10 |-from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.operators.trigger_dagrun import TriggerDagRunOperator -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.operators.trigger_dagrun import TriggerDagRunOperator +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.empty.EmptyOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:21:1 + --> AIR312.py:20:1 | -19 | BranchDateTimeOperator() -20 | TriggerDagRunOperator() -21 | EmptyOperator() +18 | BranchDateTimeOperator() +19 | TriggerDagRunOperator() +20 | EmptyOperator() | ^^^^^^^^^^^^^ -22 | -23 | LatestOnlyOperator() +21 | +22 | LatestOnlyOperator() | help: Install `apache-airflow-providers-standard>=0.0.2` and use `EmptyOperator` from `airflow.providers.standard.operators.empty` instead. @@ -182,21 +178,19 @@ help: Install `apache-airflow-providers-standard>=0.0.2` and use `EmptyOperator` 9 8 | from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.operators.empty import EmptyOperator -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.operators.empty import EmptyOperator +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.latest_only.LatestOnlyOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:23:1 + --> AIR312.py:22:1 | -21 | EmptyOperator() -22 | -23 | LatestOnlyOperator() +20 | EmptyOperator() +21 | +22 | LatestOnlyOperator() | ^^^^^^^^^^^^^^^^^^ -24 | BranchDayOfWeekOperator() -25 | DateTimeSensor() +23 | BranchDayOfWeekOperator() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `LatestOnlyOperator` from `airflow.providers.standard.operators.latest_only` instead. @@ -207,19 +201,19 @@ help: Install `apache-airflow-providers-standard>=0.0.3` and use `LatestOnlyOper 9 |-from airflow.operators.latest_only import LatestOnlyOperator 10 9 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 10 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.operators.latest_only import LatestOnlyOperator -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.operators.latest_only import LatestOnlyOperator +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.weekday.BranchDayOfWeekOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:24:1 + --> AIR312.py:23:1 | -23 | LatestOnlyOperator() -24 | BranchDayOfWeekOperator() +22 | LatestOnlyOperator() +23 | BranchDayOfWeekOperator() | ^^^^^^^^^^^^^^^^^^^^^^^ -25 | DateTimeSensor() +24 | +25 | from airflow.operators.python import ( | help: Install `apache-airflow-providers-standard>=0.0.1` and use `BranchDayOfWeekOperator` from `airflow.providers.standard.operators.weekday` instead. @@ -228,514 +222,651 @@ help: Install `apache-airflow-providers-standard>=0.0.1` and use `BranchDayOfWee 9 9 | from airflow.operators.latest_only import LatestOnlyOperator 10 10 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator 11 |-from airflow.operators.weekday import BranchDayOfWeekOperator -12 11 | from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.operators.weekday import BranchDayOfWeekOperator -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() - -AIR312 [*] `airflow.sensors.date_time.DateTimeSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:25:1 - | -23 | LatestOnlyOperator() -24 | BranchDayOfWeekOperator() -25 | DateTimeSensor() - | ^^^^^^^^^^^^^^ -26 | -27 | from airflow.operators.python import ( - | -help: Install `apache-airflow-providers-standard>=0.0.1` and use `DateTimeSensor` from `airflow.providers.standard.sensors.date_time` instead. - -ℹ Unsafe fix -9 9 | from airflow.operators.latest_only import LatestOnlyOperator -10 10 | from airflow.operators.trigger_dagrun import TriggerDagRunOperator -11 11 | from airflow.operators.weekday import BranchDayOfWeekOperator -12 |-from airflow.sensors.date_time import DateTimeSensor - 12 |+from airflow.providers.standard.sensors.date_time import DateTimeSensor -13 13 | -14 14 | FSHook() -15 15 | PackageIndexHook() + 11 |+from airflow.providers.standard.operators.weekday import BranchDayOfWeekOperator +12 12 | +13 13 | FSHook() +14 14 | PackageIndexHook() AIR312 [*] `airflow.operators.python.BranchPythonOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:44:1 + --> AIR312.py:34:1 | -42 | from airflow.sensors.filesystem import FileSensor -43 | -44 | BranchPythonOperator() +32 | from airflow.sensors.date_time import DateTimeSensor +33 | +34 | BranchPythonOperator() | ^^^^^^^^^^^^^^^^^^^^ -45 | PythonOperator() -46 | PythonVirtualenvOperator() +35 | PythonOperator() +36 | PythonVirtualenvOperator() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `BranchPythonOperator` from `airflow.providers.standard.operators.python` instead. ℹ Unsafe fix -25 25 | DateTimeSensor() -26 26 | -27 27 | from airflow.operators.python import ( -28 |- BranchPythonOperator, -29 28 | PythonOperator, -30 29 | PythonVirtualenvOperator, -31 30 | ShortCircuitOperator, --------------------------------------------------------------------------------- -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.operators.python import BranchPythonOperator -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +23 23 | BranchDayOfWeekOperator() +24 24 | +25 25 | from airflow.operators.python import ( +26 |- BranchPythonOperator, +27 26 | PythonOperator, +28 27 | PythonVirtualenvOperator, +29 28 | ShortCircuitOperator, +30 29 | ) +31 30 | from airflow.sensors.bash import BashSensor +32 31 | from airflow.sensors.date_time import DateTimeSensor + 32 |+from airflow.providers.standard.operators.python import BranchPythonOperator +33 33 | +34 34 | BranchPythonOperator() +35 35 | PythonOperator() AIR312 [*] `airflow.operators.python.PythonOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:45:1 + --> AIR312.py:35:1 | -44 | BranchPythonOperator() -45 | PythonOperator() +34 | BranchPythonOperator() +35 | PythonOperator() | ^^^^^^^^^^^^^^ -46 | PythonVirtualenvOperator() -47 | ShortCircuitOperator() +36 | PythonVirtualenvOperator() +37 | ShortCircuitOperator() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `PythonOperator` from `airflow.providers.standard.operators.python` instead. ℹ Unsafe fix -26 26 | -27 27 | from airflow.operators.python import ( -28 28 | BranchPythonOperator, -29 |- PythonOperator, -30 29 | PythonVirtualenvOperator, -31 30 | ShortCircuitOperator, -32 31 | ) --------------------------------------------------------------------------------- -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.operators.python import PythonOperator -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +24 24 | +25 25 | from airflow.operators.python import ( +26 26 | BranchPythonOperator, +27 |- PythonOperator, +28 27 | PythonVirtualenvOperator, +29 28 | ShortCircuitOperator, +30 29 | ) +31 30 | from airflow.sensors.bash import BashSensor +32 31 | from airflow.sensors.date_time import DateTimeSensor + 32 |+from airflow.providers.standard.operators.python import PythonOperator +33 33 | +34 34 | BranchPythonOperator() +35 35 | PythonOperator() AIR312 [*] `airflow.operators.python.PythonVirtualenvOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:46:1 + --> AIR312.py:36:1 | -44 | BranchPythonOperator() -45 | PythonOperator() -46 | PythonVirtualenvOperator() +34 | BranchPythonOperator() +35 | PythonOperator() +36 | PythonVirtualenvOperator() | ^^^^^^^^^^^^^^^^^^^^^^^^ -47 | ShortCircuitOperator() -48 | DateTimeSensorAsync() +37 | ShortCircuitOperator() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `PythonVirtualenvOperator` from `airflow.providers.standard.operators.python` instead. ℹ Unsafe fix -27 27 | from airflow.operators.python import ( -28 28 | BranchPythonOperator, -29 29 | PythonOperator, -30 |- PythonVirtualenvOperator, -31 30 | ShortCircuitOperator, -32 31 | ) -33 32 | from airflow.sensors.date_time import DateTimeSensorAsync --------------------------------------------------------------------------------- -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.operators.python import PythonVirtualenvOperator -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +25 25 | from airflow.operators.python import ( +26 26 | BranchPythonOperator, +27 27 | PythonOperator, +28 |- PythonVirtualenvOperator, +29 28 | ShortCircuitOperator, +30 29 | ) +31 30 | from airflow.sensors.bash import BashSensor +32 31 | from airflow.sensors.date_time import DateTimeSensor + 32 |+from airflow.providers.standard.operators.python import PythonVirtualenvOperator +33 33 | +34 34 | BranchPythonOperator() +35 35 | PythonOperator() AIR312 [*] `airflow.operators.python.ShortCircuitOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:47:1 + --> AIR312.py:37:1 | -45 | PythonOperator() -46 | PythonVirtualenvOperator() -47 | ShortCircuitOperator() +35 | PythonOperator() +36 | PythonVirtualenvOperator() +37 | ShortCircuitOperator() | ^^^^^^^^^^^^^^^^^^^^ -48 | DateTimeSensorAsync() -49 | ExternalTaskMarker() +38 | +39 | BashSensor() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `ShortCircuitOperator` from `airflow.providers.standard.operators.python` instead. ℹ Unsafe fix -28 28 | BranchPythonOperator, -29 29 | PythonOperator, -30 30 | PythonVirtualenvOperator, -31 |- ShortCircuitOperator, -32 31 | ) -33 32 | from airflow.sensors.date_time import DateTimeSensorAsync -34 33 | from airflow.sensors.external_task import ( +26 26 | BranchPythonOperator, +27 27 | PythonOperator, +28 28 | PythonVirtualenvOperator, +29 |- ShortCircuitOperator, +30 29 | ) +31 30 | from airflow.sensors.bash import BashSensor +32 31 | from airflow.sensors.date_time import DateTimeSensor + 32 |+from airflow.providers.standard.operators.python import ShortCircuitOperator +33 33 | +34 34 | BranchPythonOperator() +35 35 | PythonOperator() + +AIR312 [*] `airflow.sensors.bash.BashSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:39:1 + | +37 | ShortCircuitOperator() +38 | +39 | BashSensor() + | ^^^^^^^^^^ +40 | DateTimeSensor() +41 | from airflow.sensors.date_time import DateTimeSensorAsync + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `BashSensor` from `airflow.providers.standard.sensor.bash` instead. + +ℹ Unsafe fix +28 28 | PythonVirtualenvOperator, +29 29 | ShortCircuitOperator, +30 30 | ) +31 |-from airflow.sensors.bash import BashSensor +32 31 | from airflow.sensors.date_time import DateTimeSensor + 32 |+from airflow.providers.standard.sensor.bash import BashSensor +33 33 | +34 34 | BranchPythonOperator() +35 35 | PythonOperator() + +AIR312 [*] `airflow.sensors.date_time.DateTimeSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:40:1 + | +39 | BashSensor() +40 | DateTimeSensor() + | ^^^^^^^^^^^^^^ +41 | from airflow.sensors.date_time import DateTimeSensorAsync +42 | from airflow.sensors.external_task import ( + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `DateTimeSensor` from `airflow.providers.standard.sensors.date_time` instead. + +ℹ Unsafe fix +29 29 | ShortCircuitOperator, +30 30 | ) +31 31 | from airflow.sensors.bash import BashSensor +32 |-from airflow.sensors.date_time import DateTimeSensor + 32 |+from airflow.providers.standard.sensors.date_time import DateTimeSensor +33 33 | +34 34 | BranchPythonOperator() +35 35 | PythonOperator() + +AIR312 [*] `airflow.operators.python.BranchPythonOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:49:1 + | +47 | from airflow.sensors.python import PythonSensor +48 | +49 | BranchPythonOperator() + | ^^^^^^^^^^^^^^^^^^^^ +50 | PythonOperator() +51 | PythonVirtualenvOperator() + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `BranchPythonOperator` from `airflow.providers.standard.operators.python` instead. + +ℹ Unsafe fix +23 23 | BranchDayOfWeekOperator() +24 24 | +25 25 | from airflow.operators.python import ( +26 |- BranchPythonOperator, +27 26 | PythonOperator, +28 27 | PythonVirtualenvOperator, +29 28 | ShortCircuitOperator, -------------------------------------------------------------------------------- -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.operators.python import ShortCircuitOperator -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.operators.python import BranchPythonOperator +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() + +AIR312 [*] `airflow.operators.python.PythonOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:50:1 + | +49 | BranchPythonOperator() +50 | PythonOperator() + | ^^^^^^^^^^^^^^ +51 | PythonVirtualenvOperator() +52 | ShortCircuitOperator() + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `PythonOperator` from `airflow.providers.standard.operators.python` instead. + +ℹ Unsafe fix +24 24 | +25 25 | from airflow.operators.python import ( +26 26 | BranchPythonOperator, +27 |- PythonOperator, +28 27 | PythonVirtualenvOperator, +29 28 | ShortCircuitOperator, +30 29 | ) +-------------------------------------------------------------------------------- +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.operators.python import PythonOperator +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() + +AIR312 [*] `airflow.operators.python.PythonVirtualenvOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:51:1 + | +49 | BranchPythonOperator() +50 | PythonOperator() +51 | PythonVirtualenvOperator() + | ^^^^^^^^^^^^^^^^^^^^^^^^ +52 | ShortCircuitOperator() +53 | DateTimeSensorAsync() + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `PythonVirtualenvOperator` from `airflow.providers.standard.operators.python` instead. + +ℹ Unsafe fix +25 25 | from airflow.operators.python import ( +26 26 | BranchPythonOperator, +27 27 | PythonOperator, +28 |- PythonVirtualenvOperator, +29 28 | ShortCircuitOperator, +30 29 | ) +31 30 | from airflow.sensors.bash import BashSensor +-------------------------------------------------------------------------------- +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.operators.python import PythonVirtualenvOperator +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() + +AIR312 [*] `airflow.operators.python.ShortCircuitOperator` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:52:1 + | +50 | PythonOperator() +51 | PythonVirtualenvOperator() +52 | ShortCircuitOperator() + | ^^^^^^^^^^^^^^^^^^^^ +53 | DateTimeSensorAsync() +54 | ExternalTaskMarker() + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `ShortCircuitOperator` from `airflow.providers.standard.operators.python` instead. + +ℹ Unsafe fix +26 26 | BranchPythonOperator, +27 27 | PythonOperator, +28 28 | PythonVirtualenvOperator, +29 |- ShortCircuitOperator, +30 29 | ) +31 30 | from airflow.sensors.bash import BashSensor +32 31 | from airflow.sensors.date_time import DateTimeSensor +-------------------------------------------------------------------------------- +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.operators.python import ShortCircuitOperator +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() AIR312 [*] `airflow.sensors.date_time.DateTimeSensorAsync` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:48:1 + --> AIR312.py:53:1 | -46 | PythonVirtualenvOperator() -47 | ShortCircuitOperator() -48 | DateTimeSensorAsync() +51 | PythonVirtualenvOperator() +52 | ShortCircuitOperator() +53 | DateTimeSensorAsync() | ^^^^^^^^^^^^^^^^^^^ -49 | ExternalTaskMarker() -50 | ExternalTaskSensor() +54 | ExternalTaskMarker() +55 | ExternalTaskSensor() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `DateTimeSensorAsync` from `airflow.providers.standard.sensors.date_time` instead. ℹ Unsafe fix -30 30 | PythonVirtualenvOperator, -31 31 | ShortCircuitOperator, -32 32 | ) -33 |-from airflow.sensors.date_time import DateTimeSensorAsync -34 33 | from airflow.sensors.external_task import ( -35 34 | ExternalTaskMarker, -36 35 | ExternalTaskSensor, --------------------------------------------------------------------------------- -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.sensors.date_time import DateTimeSensorAsync -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +38 38 | +39 39 | BashSensor() +40 40 | DateTimeSensor() +41 |-from airflow.sensors.date_time import DateTimeSensorAsync +42 41 | from airflow.sensors.external_task import ( +43 42 | ExternalTaskMarker, +44 43 | ExternalTaskSensor, +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.sensors.date_time import DateTimeSensorAsync +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() AIR312 [*] `airflow.sensors.external_task.ExternalTaskMarker` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:49:1 + --> AIR312.py:54:1 | -47 | ShortCircuitOperator() -48 | DateTimeSensorAsync() -49 | ExternalTaskMarker() +52 | ShortCircuitOperator() +53 | DateTimeSensorAsync() +54 | ExternalTaskMarker() | ^^^^^^^^^^^^^^^^^^ -50 | ExternalTaskSensor() -51 | FileSensor() +55 | ExternalTaskSensor() +56 | FileSensor() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `ExternalTaskMarker` from `airflow.providers.standard.sensors.external_task` instead. ℹ Unsafe fix -32 32 | ) -33 33 | from airflow.sensors.date_time import DateTimeSensorAsync -34 34 | from airflow.sensors.external_task import ( -35 |- ExternalTaskMarker, -36 35 | ExternalTaskSensor, -37 36 | ) -38 37 | from airflow.sensors.time_sensor import ( --------------------------------------------------------------------------------- -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.sensors.external_task import ExternalTaskMarker -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +40 40 | DateTimeSensor() +41 41 | from airflow.sensors.date_time import DateTimeSensorAsync +42 42 | from airflow.sensors.external_task import ( +43 |- ExternalTaskMarker, +44 43 | ExternalTaskSensor, +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.sensors.external_task import ExternalTaskMarker +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() AIR312 [*] `airflow.sensors.external_task.ExternalTaskSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:50:1 + --> AIR312.py:55:1 | -48 | DateTimeSensorAsync() -49 | ExternalTaskMarker() -50 | ExternalTaskSensor() +53 | DateTimeSensorAsync() +54 | ExternalTaskMarker() +55 | ExternalTaskSensor() | ^^^^^^^^^^^^^^^^^^ -51 | FileSensor() -52 | TimeSensor() +56 | FileSensor() +57 | PythonSensor() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `ExternalTaskSensor` from `airflow.providers.standard.sensors.external_task` instead. ℹ Unsafe fix -33 33 | from airflow.sensors.date_time import DateTimeSensorAsync -34 34 | from airflow.sensors.external_task import ( -35 35 | ExternalTaskMarker, -36 |- ExternalTaskSensor, -37 36 | ) -38 37 | from airflow.sensors.time_sensor import ( -39 38 | TimeSensor, -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.sensors.external_task import ExternalTaskSensor -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +41 41 | from airflow.sensors.date_time import DateTimeSensorAsync +42 42 | from airflow.sensors.external_task import ( +43 43 | ExternalTaskMarker, +44 |- ExternalTaskSensor, +45 44 | ) +46 45 | from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.sensors.external_task import ExternalTaskSensor +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() AIR312 [*] `airflow.sensors.filesystem.FileSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:51:1 + --> AIR312.py:56:1 | -49 | ExternalTaskMarker() -50 | ExternalTaskSensor() -51 | FileSensor() +54 | ExternalTaskMarker() +55 | ExternalTaskSensor() +56 | FileSensor() | ^^^^^^^^^^ -52 | TimeSensor() -53 | TimeSensorAsync() +57 | PythonSensor() | help: Install `apache-airflow-providers-standard>=0.0.2` and use `FileSensor` from `airflow.providers.standard.sensors.filesystem` instead. ℹ Unsafe fix -39 39 | TimeSensor, -40 40 | TimeSensorAsync, -41 41 | ) -42 |-from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.sensors.filesystem import FileSensor -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +43 43 | ExternalTaskMarker, +44 44 | ExternalTaskSensor, +45 45 | ) +46 |-from airflow.sensors.filesystem import FileSensor +47 46 | from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.sensors.filesystem import FileSensor +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() + +AIR312 [*] `airflow.sensors.python.PythonSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. + --> AIR312.py:57:1 + | +55 | ExternalTaskSensor() +56 | FileSensor() +57 | PythonSensor() + | ^^^^^^^^^^^^ +58 | +59 | from airflow.sensors.time_sensor import ( + | +help: Install `apache-airflow-providers-standard>=0.0.1` and use `PythonSensor` from `airflow.providers.standard.sensors.python` instead. + +ℹ Unsafe fix +44 44 | ExternalTaskSensor, +45 45 | ) +46 46 | from airflow.sensors.filesystem import FileSensor +47 |-from airflow.sensors.python import PythonSensor + 47 |+from airflow.providers.standard.sensors.python import PythonSensor +48 48 | +49 49 | BranchPythonOperator() +50 50 | PythonOperator() AIR312 [*] `airflow.sensors.time_sensor.TimeSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:52:1 + --> AIR312.py:64:1 | -50 | ExternalTaskSensor() -51 | FileSensor() -52 | TimeSensor() +62 | ) +63 | +64 | TimeSensor() | ^^^^^^^^^^ -53 | TimeSensorAsync() +65 | TimeSensorAsync() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `TimeSensor` from `airflow.providers.standard.sensors.time` instead. ℹ Unsafe fix -36 36 | ExternalTaskSensor, -37 37 | ) -38 38 | from airflow.sensors.time_sensor import ( -39 |- TimeSensor, -40 39 | TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.sensors.time import TimeSensor -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +57 57 | PythonSensor() +58 58 | +59 59 | from airflow.sensors.time_sensor import ( +60 |- TimeSensor, +61 60 | TimeSensorAsync, +62 61 | ) + 62 |+from airflow.providers.standard.sensors.time import TimeSensor +63 63 | +64 64 | TimeSensor() +65 65 | TimeSensorAsync() AIR312 [*] `airflow.sensors.time_sensor.TimeSensorAsync` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:53:1 + --> AIR312.py:65:1 | -51 | FileSensor() -52 | TimeSensor() -53 | TimeSensorAsync() +64 | TimeSensor() +65 | TimeSensorAsync() | ^^^^^^^^^^^^^^^ -54 | -55 | from airflow.sensors.time_delta import ( +66 | +67 | from airflow.sensors.time_delta import ( | help: Install `apache-airflow-providers-standard>=0.0.1` and use `TimeSensorAsync` from `airflow.providers.standard.sensors.time` instead. ℹ Unsafe fix -37 37 | ) -38 38 | from airflow.sensors.time_sensor import ( -39 39 | TimeSensor, -40 |- TimeSensorAsync, -41 40 | ) -42 41 | from airflow.sensors.filesystem import FileSensor - 42 |+from airflow.providers.standard.sensors.time import TimeSensorAsync -43 43 | -44 44 | BranchPythonOperator() -45 45 | PythonOperator() +58 58 | +59 59 | from airflow.sensors.time_sensor import ( +60 60 | TimeSensor, +61 |- TimeSensorAsync, +62 61 | ) + 62 |+from airflow.providers.standard.sensors.time import TimeSensorAsync +63 63 | +64 64 | TimeSensor() +65 65 | TimeSensorAsync() AIR312 [*] `airflow.sensors.time_delta.TimeDeltaSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:70:1 + --> AIR312.py:82:1 | -68 | ) -69 | -70 | TimeDeltaSensor() +80 | ) +81 | +82 | TimeDeltaSensor() | ^^^^^^^^^^^^^^^ -71 | TimeDeltaSensorAsync() -72 | DayOfWeekSensor() +83 | TimeDeltaSensorAsync() +84 | DayOfWeekSensor() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `TimeDeltaSensor` from `airflow.providers.standard.sensors.time_delta` instead. ℹ Unsafe fix -53 53 | TimeSensorAsync() -54 54 | -55 55 | from airflow.sensors.time_delta import ( -56 |- TimeDeltaSensor, -57 56 | TimeDeltaSensorAsync, -58 57 | ) -59 58 | from airflow.sensors.weekday import DayOfWeekSensor +65 65 | TimeSensorAsync() +66 66 | +67 67 | from airflow.sensors.time_delta import ( +68 |- TimeDeltaSensor, +69 68 | TimeDeltaSensorAsync, +70 69 | ) +71 70 | from airflow.sensors.weekday import DayOfWeekSensor -------------------------------------------------------------------------------- -66 65 | DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.sensors.time_delta import TimeDeltaSensor -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +78 77 | DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.sensors.time_delta import TimeDeltaSensor +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.sensors.time_delta.TimeDeltaSensorAsync` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:71:1 + --> AIR312.py:83:1 | -70 | TimeDeltaSensor() -71 | TimeDeltaSensorAsync() +82 | TimeDeltaSensor() +83 | TimeDeltaSensorAsync() | ^^^^^^^^^^^^^^^^^^^^ -72 | DayOfWeekSensor() -73 | DagStateTrigger() +84 | DayOfWeekSensor() +85 | DagStateTrigger() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `TimeDeltaSensorAsync` from `airflow.providers.standard.sensors.time_delta` instead. ℹ Unsafe fix -54 54 | -55 55 | from airflow.sensors.time_delta import ( -56 56 | TimeDeltaSensor, -57 |- TimeDeltaSensorAsync, -58 57 | ) -59 58 | from airflow.sensors.weekday import DayOfWeekSensor -60 59 | from airflow.triggers.external_task import ( +66 66 | +67 67 | from airflow.sensors.time_delta import ( +68 68 | TimeDeltaSensor, +69 |- TimeDeltaSensorAsync, +70 69 | ) +71 70 | from airflow.sensors.weekday import DayOfWeekSensor +72 71 | from airflow.triggers.external_task import ( -------------------------------------------------------------------------------- -66 65 | DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.sensors.time_delta import TimeDeltaSensorAsync -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +78 77 | DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.sensors.time_delta import TimeDeltaSensorAsync +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.sensors.weekday.DayOfWeekSensor` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:72:1 + --> AIR312.py:84:1 | -70 | TimeDeltaSensor() -71 | TimeDeltaSensorAsync() -72 | DayOfWeekSensor() +82 | TimeDeltaSensor() +83 | TimeDeltaSensorAsync() +84 | DayOfWeekSensor() | ^^^^^^^^^^^^^^^ -73 | DagStateTrigger() -74 | WorkflowTrigger() +85 | DagStateTrigger() +86 | WorkflowTrigger() | help: Install `apache-airflow-providers-standard>=0.0.1` and use `DayOfWeekSensor` from `airflow.providers.standard.sensors.weekday` instead. ℹ Unsafe fix -56 56 | TimeDeltaSensor, -57 57 | TimeDeltaSensorAsync, -58 58 | ) -59 |-from airflow.sensors.weekday import DayOfWeekSensor -60 59 | from airflow.triggers.external_task import ( -61 60 | DagStateTrigger, -62 61 | WorkflowTrigger, +68 68 | TimeDeltaSensor, +69 69 | TimeDeltaSensorAsync, +70 70 | ) +71 |-from airflow.sensors.weekday import DayOfWeekSensor +72 71 | from airflow.triggers.external_task import ( +73 72 | DagStateTrigger, +74 73 | WorkflowTrigger, -------------------------------------------------------------------------------- -66 65 | DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.sensors.weekday import DayOfWeekSensor -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +78 77 | DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.sensors.weekday import DayOfWeekSensor +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.triggers.external_task.DagStateTrigger` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:73:1 + --> AIR312.py:85:1 | -71 | TimeDeltaSensorAsync() -72 | DayOfWeekSensor() -73 | DagStateTrigger() +83 | TimeDeltaSensorAsync() +84 | DayOfWeekSensor() +85 | DagStateTrigger() | ^^^^^^^^^^^^^^^ -74 | WorkflowTrigger() -75 | FileTrigger() +86 | WorkflowTrigger() +87 | FileTrigger() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `DagStateTrigger` from `airflow.providers.standard.triggers.external_task` instead. ℹ Unsafe fix -58 58 | ) -59 59 | from airflow.sensors.weekday import DayOfWeekSensor -60 60 | from airflow.triggers.external_task import ( -61 |- DagStateTrigger, -62 61 | WorkflowTrigger, -63 62 | ) -64 63 | from airflow.triggers.file import FileTrigger +70 70 | ) +71 71 | from airflow.sensors.weekday import DayOfWeekSensor +72 72 | from airflow.triggers.external_task import ( +73 |- DagStateTrigger, +74 73 | WorkflowTrigger, +75 74 | ) +76 75 | from airflow.triggers.file import FileTrigger -------------------------------------------------------------------------------- -66 65 | DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.triggers.external_task import DagStateTrigger -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +78 77 | DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.triggers.external_task import DagStateTrigger +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.triggers.external_task.WorkflowTrigger` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:74:1 + --> AIR312.py:86:1 | -72 | DayOfWeekSensor() -73 | DagStateTrigger() -74 | WorkflowTrigger() +84 | DayOfWeekSensor() +85 | DagStateTrigger() +86 | WorkflowTrigger() | ^^^^^^^^^^^^^^^ -75 | FileTrigger() -76 | DateTimeTrigger() +87 | FileTrigger() +88 | DateTimeTrigger() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `WorkflowTrigger` from `airflow.providers.standard.triggers.external_task` instead. ℹ Unsafe fix -59 59 | from airflow.sensors.weekday import DayOfWeekSensor -60 60 | from airflow.triggers.external_task import ( -61 61 | DagStateTrigger, -62 |- WorkflowTrigger, -63 62 | ) -64 63 | from airflow.triggers.file import FileTrigger -65 64 | from airflow.triggers.temporal import ( -66 65 | DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.triggers.external_task import WorkflowTrigger -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +71 71 | from airflow.sensors.weekday import DayOfWeekSensor +72 72 | from airflow.triggers.external_task import ( +73 73 | DagStateTrigger, +74 |- WorkflowTrigger, +75 74 | ) +76 75 | from airflow.triggers.file import FileTrigger +77 76 | from airflow.triggers.temporal import ( +78 77 | DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.triggers.external_task import WorkflowTrigger +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.triggers.file.FileTrigger` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:75:1 + --> AIR312.py:87:1 | -73 | DagStateTrigger() -74 | WorkflowTrigger() -75 | FileTrigger() +85 | DagStateTrigger() +86 | WorkflowTrigger() +87 | FileTrigger() | ^^^^^^^^^^^ -76 | DateTimeTrigger() -77 | TimeDeltaTrigger() +88 | DateTimeTrigger() +89 | TimeDeltaTrigger() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `FileTrigger` from `airflow.providers.standard.triggers.file` instead. ℹ Unsafe fix -61 61 | DagStateTrigger, -62 62 | WorkflowTrigger, -63 63 | ) -64 |-from airflow.triggers.file import FileTrigger -65 64 | from airflow.triggers.temporal import ( -66 65 | DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.triggers.file import FileTrigger -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +73 73 | DagStateTrigger, +74 74 | WorkflowTrigger, +75 75 | ) +76 |-from airflow.triggers.file import FileTrigger +77 76 | from airflow.triggers.temporal import ( +78 77 | DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.triggers.file import FileTrigger +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.triggers.temporal.DateTimeTrigger` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:76:1 + --> AIR312.py:88:1 | -74 | WorkflowTrigger() -75 | FileTrigger() -76 | DateTimeTrigger() +86 | WorkflowTrigger() +87 | FileTrigger() +88 | DateTimeTrigger() | ^^^^^^^^^^^^^^^ -77 | TimeDeltaTrigger() +89 | TimeDeltaTrigger() | help: Install `apache-airflow-providers-standard>=0.0.3` and use `DateTimeTrigger` from `airflow.providers.standard.triggers.temporal` instead. ℹ Unsafe fix -63 63 | ) -64 64 | from airflow.triggers.file import FileTrigger -65 65 | from airflow.triggers.temporal import ( -66 |- DateTimeTrigger, -67 66 | TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.triggers.temporal import DateTimeTrigger -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +75 75 | ) +76 76 | from airflow.triggers.file import FileTrigger +77 77 | from airflow.triggers.temporal import ( +78 |- DateTimeTrigger, +79 78 | TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.triggers.temporal import DateTimeTrigger +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() AIR312 [*] `airflow.triggers.temporal.TimeDeltaTrigger` is deprecated and moved into `standard` provider in Airflow 3.0; It still works in Airflow 3.0 but is expected to be removed in a future version. - --> AIR312.py:77:1 + --> AIR312.py:89:1 | -75 | FileTrigger() -76 | DateTimeTrigger() -77 | TimeDeltaTrigger() +87 | FileTrigger() +88 | DateTimeTrigger() +89 | TimeDeltaTrigger() | ^^^^^^^^^^^^^^^^ | help: Install `apache-airflow-providers-standard>=0.0.3` and use `TimeDeltaTrigger` from `airflow.providers.standard.triggers.temporal` instead. ℹ Unsafe fix -64 64 | from airflow.triggers.file import FileTrigger -65 65 | from airflow.triggers.temporal import ( -66 66 | DateTimeTrigger, -67 |- TimeDeltaTrigger, -68 67 | ) - 68 |+from airflow.providers.standard.triggers.temporal import TimeDeltaTrigger -69 69 | -70 70 | TimeDeltaSensor() -71 71 | TimeDeltaSensorAsync() +76 76 | from airflow.triggers.file import FileTrigger +77 77 | from airflow.triggers.temporal import ( +78 78 | DateTimeTrigger, +79 |- TimeDeltaTrigger, +80 79 | ) + 80 |+from airflow.providers.standard.triggers.temporal import TimeDeltaTrigger +81 81 | +82 82 | TimeDeltaSensor() +83 83 | TimeDeltaSensorAsync() diff --git a/crates/ty_python_semantic/resources/mdtest/annotations/callable.md b/crates/ty_python_semantic/resources/mdtest/annotations/callable.md index 1a7974089e..37f5923496 100644 --- a/crates/ty_python_semantic/resources/mdtest/annotations/callable.md +++ b/crates/ty_python_semantic/resources/mdtest/annotations/callable.md @@ -398,7 +398,7 @@ def f_okay(c: Callable[[], None]): c.__qualname__ = "my_callable" result = getattr_static(c, "__qualname__") - reveal_type(result) # revealed: Never + reveal_type(result) # revealed: property if isinstance(result, property) and result.fset: c.__qualname__ = "my_callable" # okay ``` diff --git a/crates/ty_python_semantic/src/types.rs b/crates/ty_python_semantic/src/types.rs index ebeb85dafc..424971ee6a 100644 --- a/crates/ty_python_semantic/src/types.rs +++ b/crates/ty_python_semantic/src/types.rs @@ -3395,19 +3395,14 @@ impl<'db> Type<'db> { let name_str = name.as_str(); match self { - Type::Union(union) => union - .map_with_boundness(db, |elem| { - elem.member_lookup_with_policy(db, name_str.into(), policy) - .place - }) - .into(), + Type::Union(union) => union.map_with_boundness_and_qualifiers(db, |elem| { + elem.member_lookup_with_policy(db, name_str.into(), policy) + }), Type::Intersection(intersection) => intersection - .map_with_boundness(db, |elem| { + .map_with_boundness_and_qualifiers(db, |elem| { elem.member_lookup_with_policy(db, name_str.into(), policy) - .place - }) - .into(), + }), Type::Dynamic(..) | Type::Never => Place::bound(self).into(), @@ -10177,8 +10172,8 @@ impl<'db> IntersectionType<'db> { let mut builder = IntersectionBuilder::new(db); let mut qualifiers = TypeQualifiers::empty(); - let mut any_unbound = false; - let mut any_possibly_unbound = false; + let mut all_unbound = true; + let mut any_definitely_bound = false; for ty in self.positive_elements_or_object(db) { let PlaceAndQualifiers { place: member, @@ -10186,12 +10181,11 @@ impl<'db> IntersectionType<'db> { } = transform_fn(&ty); qualifiers |= new_qualifiers; match member { - Place::Unbound => { - any_unbound = true; - } + Place::Unbound => {} Place::Type(ty_member, member_boundness) => { - if member_boundness == Boundness::PossiblyUnbound { - any_possibly_unbound = true; + all_unbound = false; + if member_boundness == Boundness::Bound { + any_definitely_bound = true; } builder = builder.add_positive(ty_member); @@ -10200,15 +10194,15 @@ impl<'db> IntersectionType<'db> { } PlaceAndQualifiers { - place: if any_unbound { + place: if all_unbound { Place::Unbound } else { Place::Type( builder.build(), - if any_possibly_unbound { - Boundness::PossiblyUnbound - } else { + if any_definitely_bound { Boundness::Bound + } else { + Boundness::PossiblyUnbound }, ) },