From d56611758648ea084d69ac0ea34ddac1e5ecd277 Mon Sep 17 00:00:00 2001 From: vincbeck Date: Thu, 27 Mar 2025 13:26:12 -0400 Subject: [PATCH] Remove fab from preinstalled providers --- .pre-commit-config.yaml | 13 +---- airflow-core/docs/img/airflow_erd.sha256 | 2 +- airflow-core/pyproject.toml | 2 +- .../airflow/cli/commands/scheduler_command.py | 13 ++++- .../airflow/cli/commands/triggerer_command.py | 14 +++++- .../0028_3_0_0_drop_ab_user_id_foreign_key.py | 50 ++++++++++++++----- .../cli/commands/test_scheduler_command.py | 2 +- .../templates/pyproject_TEMPLATE.toml.jinja2 | 1 - dev/breeze/tests/test_selective_checks.py | 2 +- .../src/tests_common/test_utils/db.py | 4 +- providers/airbyte/pyproject.toml | 1 - providers/alibaba/pyproject.toml | 1 - providers/amazon/pyproject.toml | 1 - .../aws/auth_manager/router/test_login.py | 2 + providers/apache/beam/pyproject.toml | 1 - providers/apache/cassandra/pyproject.toml | 1 - providers/apache/drill/pyproject.toml | 1 - providers/apache/druid/pyproject.toml | 1 - providers/apache/flink/pyproject.toml | 1 - providers/apache/hdfs/pyproject.toml | 1 - providers/apache/hive/pyproject.toml | 1 - providers/apache/iceberg/pyproject.toml | 1 - providers/apache/impala/pyproject.toml | 1 - providers/apache/kafka/pyproject.toml | 1 - providers/apache/kylin/pyproject.toml | 1 - providers/apache/livy/pyproject.toml | 1 - providers/apache/pig/pyproject.toml | 1 - providers/apache/pinot/pyproject.toml | 1 - providers/apache/spark/pyproject.toml | 1 - providers/apprise/pyproject.toml | 1 - providers/arangodb/pyproject.toml | 1 - providers/asana/pyproject.toml | 1 - providers/atlassian/jira/pyproject.toml | 1 - providers/celery/README.rst | 1 + providers/celery/pyproject.toml | 5 +- .../providers/celery/cli/celery_command.py | 13 ++++- .../providers/celery/get_provider_info.py | 5 +- providers/cloudant/pyproject.toml | 1 - providers/cncf/kubernetes/pyproject.toml | 1 - providers/cohere/pyproject.toml | 1 - providers/common/compat/pyproject.toml | 1 - providers/common/io/pyproject.toml | 1 - providers/common/messaging/pyproject.toml | 1 - providers/common/sql/pyproject.toml | 1 - providers/databricks/pyproject.toml | 1 - providers/datadog/pyproject.toml | 1 - providers/dbt/cloud/pyproject.toml | 1 - providers/dingding/pyproject.toml | 1 - providers/discord/pyproject.toml | 1 - providers/docker/pyproject.toml | 1 - providers/edge/pyproject.toml | 1 - providers/elasticsearch/pyproject.toml | 1 - providers/exasol/pyproject.toml | 1 - providers/fab/pyproject.toml | 1 - .../airflow/providers/fab/www}/serve_logs.py | 0 .../tests/unit/fab/www}/test_serve_logs.py | 2 +- providers/facebook/pyproject.toml | 1 - providers/ftp/pyproject.toml | 1 - providers/git/pyproject.toml | 1 - providers/github/pyproject.toml | 1 - providers/google/pyproject.toml | 4 +- .../common/auth_backend/google_openid.py | 10 +++- .../providers/google/get_provider_info.py | 1 + .../common/auth_backend/test_google_openid.py | 4 ++ providers/grpc/pyproject.toml | 1 - providers/hashicorp/pyproject.toml | 1 - providers/http/pyproject.toml | 1 - providers/imap/pyproject.toml | 1 - providers/influxdb/pyproject.toml | 1 - providers/jdbc/pyproject.toml | 1 - providers/jenkins/pyproject.toml | 1 - providers/microsoft/azure/README.rst | 1 + providers/microsoft/azure/pyproject.toml | 2 +- .../microsoft/azure/get_provider_info.py | 1 + providers/microsoft/mssql/pyproject.toml | 1 - providers/microsoft/psrp/pyproject.toml | 1 - providers/microsoft/winrm/pyproject.toml | 1 - providers/mongo/pyproject.toml | 1 - providers/mysql/pyproject.toml | 1 - providers/neo4j/pyproject.toml | 1 - providers/odbc/pyproject.toml | 1 - providers/openai/pyproject.toml | 1 - providers/openfaas/pyproject.toml | 1 - providers/openlineage/pyproject.toml | 1 - providers/opensearch/pyproject.toml | 1 - providers/opsgenie/pyproject.toml | 1 - providers/oracle/pyproject.toml | 1 - providers/pagerduty/pyproject.toml | 1 - providers/papermill/pyproject.toml | 1 - providers/pgvector/pyproject.toml | 1 - providers/pinecone/pyproject.toml | 1 - providers/postgres/pyproject.toml | 1 - providers/presto/pyproject.toml | 1 - providers/qdrant/pyproject.toml | 1 - providers/redis/pyproject.toml | 1 - providers/salesforce/pyproject.toml | 1 - providers/samba/pyproject.toml | 1 - providers/segment/pyproject.toml | 1 - providers/sendgrid/pyproject.toml | 1 - providers/sftp/pyproject.toml | 1 - providers/singularity/pyproject.toml | 1 - providers/slack/pyproject.toml | 1 - providers/smtp/pyproject.toml | 1 - providers/snowflake/pyproject.toml | 1 - providers/sqlite/pyproject.toml | 1 - providers/ssh/pyproject.toml | 1 - providers/standard/pyproject.toml | 1 - providers/tableau/pyproject.toml | 1 - providers/telegram/pyproject.toml | 1 - providers/teradata/pyproject.toml | 1 - providers/trino/pyproject.toml | 1 - providers/vertica/pyproject.toml | 1 - providers/weaviate/pyproject.toml | 1 - providers/yandex/pyproject.toml | 1 - providers/ydb/pyproject.toml | 1 - providers/zendesk/pyproject.toml | 1 - 116 files changed, 115 insertions(+), 131 deletions(-) rename {airflow-core/src/airflow/utils => providers/fab/src/airflow/providers/fab/www}/serve_logs.py (100%) rename {airflow-core/tests/unit/utils => providers/fab/tests/unit/fab/www}/test_serve_logs.py (99%) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 906cfa1cf7479..49fcd592cf8ab 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1186,17 +1186,8 @@ repos: \bab_register_user\b pass_filenames: true files: ^airflow-core/src/airflow/migrations/versions/.*\.py$ - # These migrations contain FAB related changes but existed before moving FAB auth manager - # to its own provider - exclude: > - (?ix)^( - airflow-core/src/airflow/migrations/versions/00.*\.py| - airflow-core/src/airflow/migrations/versions/0106.*\.py| - airflow-core/src/airflow/migrations/versions/0118.*\.py| - airflow-core/src/airflow/migrations/versions/0119.*\.py| - airflow-core/src/airflow/migrations/versions/0121.*\.py| - airflow-core/src/airflow/migrations/versions/0124.*\.py - )$ + exclude: + airflow-core/src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py ## ADD MOST PRE-COMMITS ABOVE THAT LINE # The below pre-commits are those requiring CI image to be built - id: mypy-dev diff --git a/airflow-core/docs/img/airflow_erd.sha256 b/airflow-core/docs/img/airflow_erd.sha256 index cf3c6d096af47..3d2e9716ff6e7 100644 --- a/airflow-core/docs/img/airflow_erd.sha256 +++ b/airflow-core/docs/img/airflow_erd.sha256 @@ -1 +1 @@ -c0f6d179e576a7c14406900cc3eaf8995246b5e7e781f1de0c0c794e4b10c6da \ No newline at end of file +aa423e4d2c250ceca76fd28b7fd788fc476f7e235326c187b6804916853e6ebf \ No newline at end of file diff --git a/airflow-core/pyproject.toml b/airflow-core/pyproject.toml index d57059c3c9d08..af1ba6a2fdcff 100644 --- a/airflow-core/pyproject.toml +++ b/airflow-core/pyproject.toml @@ -136,12 +136,12 @@ dependencies = [ # Werkzug 3 breaks Flask-Login 0.6.2 # we should remove this limitation when FAB supports Flask 2.3 "werkzeug>=2.0,<4", + "wtforms>=3.0,<4", # pre-installed providers "apache-airflow-providers-common-compat>=1.6.0", "apache-airflow-providers-common-io>=1.5.2", "apache-airflow-providers-common-sql>=1.24.1", "apache-airflow-providers-openlineage>=2.1.2", - "apache-airflow-providers-fab>=2.0.0", "apache-airflow-providers-smtp>=2.0.1", "apache-airflow-providers-standard>=0.2.0", "apache-airflow-providers-sqlite>=4.0.1", diff --git a/airflow-core/src/airflow/cli/commands/scheduler_command.py b/airflow-core/src/airflow/cli/commands/scheduler_command.py index 88206c76ba1a7..37cb4847f3824 100644 --- a/airflow-core/src/airflow/cli/commands/scheduler_command.py +++ b/airflow-core/src/airflow/cli/commands/scheduler_command.py @@ -29,6 +29,7 @@ from airflow.executors.executor_loader import ExecutorLoader from airflow.jobs.job import Job, run_job from airflow.jobs.scheduler_job_runner import SchedulerJobRunner +from airflow.providers.celery.version_compat import AIRFLOW_V_3_0_PLUS from airflow.utils import cli as cli_utils from airflow.utils.providers_configuration_loader import providers_configuration_loaded from airflow.utils.scheduler_health import serve_health_check @@ -60,7 +61,17 @@ def scheduler(args: Namespace): @contextmanager def _serve_logs(skip_serve_logs: bool = False): """Start serve_logs sub-process.""" - from airflow.utils.serve_logs import serve_logs + if AIRFLOW_V_3_0_PLUS: + try: + from airflow.providers.fab.www.serve_logs import serve_logs + except ImportError: + raise ImportError( + "Celery requires FAB provider to be installed in order to run this command. " + "Please install the FAB provider by running: " + "pip install apache-airflow-providers-celery[fab]" + ) + else: + from airflow.utils.serve_logs import serve_logs # type: ignore[no-redef] sub_proc = None executor_class, _ = ExecutorLoader.import_default_executor_cls() diff --git a/airflow-core/src/airflow/cli/commands/triggerer_command.py b/airflow-core/src/airflow/cli/commands/triggerer_command.py index 7b935e160ca5e..b953006e5c996 100644 --- a/airflow-core/src/airflow/cli/commands/triggerer_command.py +++ b/airflow-core/src/airflow/cli/commands/triggerer_command.py @@ -28,14 +28,26 @@ from airflow.configuration import conf from airflow.jobs.job import Job, run_job from airflow.jobs.triggerer_job_runner import TriggererJobRunner +from airflow.providers.celery.version_compat import AIRFLOW_V_3_0_PLUS from airflow.utils import cli as cli_utils from airflow.utils.providers_configuration_loader import providers_configuration_loaded -from airflow.utils.serve_logs import serve_logs @contextmanager def _serve_logs(skip_serve_logs: bool = False) -> Generator[None, None, None]: """Start serve_logs sub-process.""" + if AIRFLOW_V_3_0_PLUS: + try: + from airflow.providers.fab.www.serve_logs import serve_logs + except ImportError: + raise ImportError( + "Celery requires FAB provider to be installed in order to run this command. " + "Please install the FAB provider by running: " + "pip install apache-airflow-providers-celery[fab]" + ) + else: + from airflow.utils.serve_logs import serve_logs # type: ignore[no-redef] + sub_proc = None if skip_serve_logs is False: port = conf.getint("logging", "trigger_log_server_port", fallback=8794) diff --git a/airflow-core/src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py b/airflow-core/src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py index 8a9c77042e95f..383319cd6d9e7 100644 --- a/airflow-core/src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py +++ b/airflow-core/src/airflow/migrations/versions/0028_3_0_0_drop_ab_user_id_foreign_key.py @@ -28,6 +28,7 @@ from __future__ import annotations from alembic import op +from sqlalchemy import inspect # revision identifiers, used by Alembic. revision = "044f740568ec" @@ -37,29 +38,54 @@ airflow_version = "3.0.0" +def table_exists(table_name): + """Check if a table exists in the database.""" + inspector = inspect(op.get_bind()) + return table_name in inspector.get_table_names() + + +def constraint_exists(table_name, constraint_name): + """Check if a foreign key constraint exists on a table.""" + inspector = inspect(op.get_bind()) + foreign_keys = inspector.get_foreign_keys(table_name) + return any(fk["name"] == constraint_name for fk in foreign_keys) + + +def index_exists(table_name, index_name): + """Check if an index exists on a table.""" + inspector = inspect(op.get_bind()) + indexes = inspector.get_indexes(table_name) + return any(idx["name"] == index_name for idx in indexes) + + def upgrade(): """Apply Drop ab_user.id foreign key.""" - with op.batch_alter_table("dag_run_note", schema=None) as batch_op: - batch_op.drop_constraint("dag_run_note_user_fkey", type_="foreignkey") + if constraint_exists("dag_run_note", "dag_run_note_user_fkey"): + with op.batch_alter_table("dag_run_note", schema=None) as batch_op: + batch_op.drop_constraint("dag_run_note_user_fkey", type_="foreignkey") - with op.batch_alter_table("task_instance_note", schema=None) as batch_op: - batch_op.drop_constraint("task_instance_note_user_fkey", type_="foreignkey") + if constraint_exists("task_instance_note", "task_instance_note_user_fkey"): + with op.batch_alter_table("task_instance_note", schema=None) as batch_op: + batch_op.drop_constraint("task_instance_note_user_fkey", type_="foreignkey") if op.get_bind().dialect.name == "mysql": - with op.batch_alter_table("dag_run_note", schema=None) as batch_op: - batch_op.drop_index("dag_run_note_user_fkey") + if index_exists("dag_run_note", "dag_run_note_user_fkey"): + with op.batch_alter_table("dag_run_note", schema=None) as batch_op: + batch_op.drop_index("dag_run_note_user_fkey") - with op.batch_alter_table("task_instance_note", schema=None) as batch_op: - batch_op.drop_index("task_instance_note_user_fkey") + if index_exists("task_instance_note", "task_instance_note_user_fkey"): + with op.batch_alter_table("task_instance_note", schema=None) as batch_op: + batch_op.drop_index("task_instance_note_user_fkey") def downgrade(): """Unapply Drop ab_user.id foreign key.""" - with op.batch_alter_table("task_instance_note", schema=None) as batch_op: - batch_op.create_foreign_key("task_instance_note_user_fkey", "ab_user", ["user_id"], ["id"]) + if table_exists("ab_user"): + with op.batch_alter_table("task_instance_note", schema=None) as batch_op: + batch_op.create_foreign_key("task_instance_note_user_fkey", "ab_user", ["user_id"], ["id"]) - with op.batch_alter_table("dag_run_note", schema=None) as batch_op: - batch_op.create_foreign_key("dag_run_note_user_fkey", "ab_user", ["user_id"], ["id"]) + with op.batch_alter_table("dag_run_note", schema=None) as batch_op: + batch_op.create_foreign_key("dag_run_note_user_fkey", "ab_user", ["user_id"], ["id"]) if op.get_bind().dialect.name == "mysql": with op.batch_alter_table("task_instance_note", schema=None) as batch_op: diff --git a/airflow-core/tests/unit/cli/commands/test_scheduler_command.py b/airflow-core/tests/unit/cli/commands/test_scheduler_command.py index 8c6958159d0b0..f10faa87e3b75 100644 --- a/airflow-core/tests/unit/cli/commands/test_scheduler_command.py +++ b/airflow-core/tests/unit/cli/commands/test_scheduler_command.py @@ -25,8 +25,8 @@ from airflow.cli import cli_parser from airflow.cli.commands import scheduler_command from airflow.executors import executor_loader +from airflow.providers.fab.www.serve_logs import serve_logs from airflow.utils.scheduler_health import serve_health_check -from airflow.utils.serve_logs import serve_logs from tests_common.test_utils.config import conf_vars diff --git a/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2 b/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2 index 6ae4a8900eda4..29557b197cf4c 100644 --- a/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2 +++ b/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2 @@ -118,7 +118,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py index 9fb0d99d760f7..b8ce1acba943c 100644 --- a/dev/breeze/tests/test_selective_checks.py +++ b/dev/breeze/tests/test_selective_checks.py @@ -2157,7 +2157,7 @@ def test_upgrade_to_newer_dependencies( ), pytest.param( ("providers/celery/src/airflow/providers/celery/file.py",), - {"docs-list-as-string": "celery cncf.kubernetes"}, + {"docs-list-as-string": "celery cncf.kubernetes fab"}, id="Celery python files changed", ), pytest.param( diff --git a/devel-common/src/tests_common/test_utils/db.py b/devel-common/src/tests_common/test_utils/db.py index 26138e4a0fc6d..7eb5a0c7fc7cb 100644 --- a/devel-common/src/tests_common/test_utils/db.py +++ b/devel-common/src/tests_common/test_utils/db.py @@ -86,8 +86,6 @@ def _bootstrap_dagbag(): def initial_db_init(): - from flask import Flask - from airflow.configuration import conf from airflow.utils import db @@ -98,6 +96,8 @@ def initial_db_init(): db.downgrade(to_revision="5f2621c13b39") db.upgradedb(to_revision="head") else: + from flask import Flask + from airflow.www.extensions.init_appbuilder import init_appbuilder from airflow.www.extensions.init_auth_manager import get_auth_manager diff --git a/providers/airbyte/pyproject.toml b/providers/airbyte/pyproject.toml index 5430863203d69..826f9a203a34f 100644 --- a/providers/airbyte/pyproject.toml +++ b/providers/airbyte/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/alibaba/pyproject.toml b/providers/alibaba/pyproject.toml index 279dfa0b9473b..b75a0d1798e55 100644 --- a/providers/alibaba/pyproject.toml +++ b/providers/alibaba/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/amazon/pyproject.toml b/providers/amazon/pyproject.toml index e327d08de0612..1ca7c32a387cb 100644 --- a/providers/amazon/pyproject.toml +++ b/providers/amazon/pyproject.toml @@ -201,7 +201,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/amazon/tests/unit/amazon/aws/auth_manager/router/test_login.py b/providers/amazon/tests/unit/amazon/aws/auth_manager/router/test_login.py index 5f2bdff476661..e49c75c23c3c3 100644 --- a/providers/amazon/tests/unit/amazon/aws/auth_manager/router/test_login.py +++ b/providers/amazon/tests/unit/amazon/aws/auth_manager/router/test_login.py @@ -31,6 +31,7 @@ from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX, create_app from tests_common.test_utils.config import conf_vars +from tests_common.test_utils.mock_plugins import mock_plugin_manager SAML_METADATA_URL = "/saml/metadata" SAML_METADATA_PARSED = { @@ -73,6 +74,7 @@ def test_client(): yield TestClient(create_app()) +@mock_plugin_manager(plugins=[]) class TestLoginRouter: def test_login(self, test_client): response = test_client.get(AUTH_MANAGER_FASTAPI_APP_PREFIX + "/login", follow_redirects=False) diff --git a/providers/apache/beam/pyproject.toml b/providers/apache/beam/pyproject.toml index 51c50253e746f..e309251c8204b 100644 --- a/providers/apache/beam/pyproject.toml +++ b/providers/apache/beam/pyproject.toml @@ -110,7 +110,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/cassandra/pyproject.toml b/providers/apache/cassandra/pyproject.toml index 0bcdcf7a0c563..1dd2608ca6edf 100644 --- a/providers/apache/cassandra/pyproject.toml +++ b/providers/apache/cassandra/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/drill/pyproject.toml b/providers/apache/drill/pyproject.toml index 491e5147211c8..284eaf3ca2c56 100644 --- a/providers/apache/drill/pyproject.toml +++ b/providers/apache/drill/pyproject.toml @@ -96,7 +96,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/druid/pyproject.toml b/providers/apache/druid/pyproject.toml index b2fa2ec8cfdd3..92c5563bba0d4 100644 --- a/providers/apache/druid/pyproject.toml +++ b/providers/apache/druid/pyproject.toml @@ -102,7 +102,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/flink/pyproject.toml b/providers/apache/flink/pyproject.toml index 4bc88e037024f..7f084698f0dca 100644 --- a/providers/apache/flink/pyproject.toml +++ b/providers/apache/flink/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/hdfs/pyproject.toml b/providers/apache/hdfs/pyproject.toml index d24f0a4db3fe6..8bf1ab02b4efc 100644 --- a/providers/apache/hdfs/pyproject.toml +++ b/providers/apache/hdfs/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/hive/pyproject.toml b/providers/apache/hive/pyproject.toml index fb55fbb093697..46bfd38508b33 100644 --- a/providers/apache/hive/pyproject.toml +++ b/providers/apache/hive/pyproject.toml @@ -134,7 +134,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/iceberg/pyproject.toml b/providers/apache/iceberg/pyproject.toml index 4c7bda082a421..8c0d2f5a186fa 100644 --- a/providers/apache/iceberg/pyproject.toml +++ b/providers/apache/iceberg/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/impala/pyproject.toml b/providers/apache/impala/pyproject.toml index d4df0a3656ffd..c09afe3d0c981 100644 --- a/providers/apache/impala/pyproject.toml +++ b/providers/apache/impala/pyproject.toml @@ -103,7 +103,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/kafka/pyproject.toml b/providers/apache/kafka/pyproject.toml index fd8adc4f09f20..469c2c7bf4bd5 100644 --- a/providers/apache/kafka/pyproject.toml +++ b/providers/apache/kafka/pyproject.toml @@ -101,7 +101,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/kylin/pyproject.toml b/providers/apache/kylin/pyproject.toml index 66cc0f1896b6f..aaf065501fb98 100644 --- a/providers/apache/kylin/pyproject.toml +++ b/providers/apache/kylin/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/livy/pyproject.toml b/providers/apache/livy/pyproject.toml index 49ae4838d0960..e004ffc8bc821 100644 --- a/providers/apache/livy/pyproject.toml +++ b/providers/apache/livy/pyproject.toml @@ -97,7 +97,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/pig/pyproject.toml b/providers/apache/pig/pyproject.toml index 963d1b918a215..5f18b3f43d275 100644 --- a/providers/apache/pig/pyproject.toml +++ b/providers/apache/pig/pyproject.toml @@ -91,7 +91,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/pinot/pyproject.toml b/providers/apache/pinot/pyproject.toml index ca66e98656906..2b970bfc839ee 100644 --- a/providers/apache/pinot/pyproject.toml +++ b/providers/apache/pinot/pyproject.toml @@ -95,7 +95,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apache/spark/pyproject.toml b/providers/apache/spark/pyproject.toml index 67c356058235e..e8009447a2243 100644 --- a/providers/apache/spark/pyproject.toml +++ b/providers/apache/spark/pyproject.toml @@ -103,7 +103,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/apprise/pyproject.toml b/providers/apprise/pyproject.toml index 1137f37f66be5..022e5e4314eb3 100644 --- a/providers/apprise/pyproject.toml +++ b/providers/apprise/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/arangodb/pyproject.toml b/providers/arangodb/pyproject.toml index bdc9bd09fedf3..4040727c2785b 100644 --- a/providers/arangodb/pyproject.toml +++ b/providers/arangodb/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/asana/pyproject.toml b/providers/asana/pyproject.toml index 2753694651b61..5c33af8da7b81 100644 --- a/providers/asana/pyproject.toml +++ b/providers/asana/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/atlassian/jira/pyproject.toml b/providers/atlassian/jira/pyproject.toml index 21bf3cec61569..b340269315511 100644 --- a/providers/atlassian/jira/pyproject.toml +++ b/providers/atlassian/jira/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/celery/README.rst b/providers/celery/README.rst index 73789e85eb671..d2c6bfc722538 100644 --- a/providers/celery/README.rst +++ b/providers/celery/README.rst @@ -75,6 +75,7 @@ You can install such cross-provider dependencies when installing from PyPI. For Dependent package Extra ====================================================================================================================== =================== `apache-airflow-providers-cncf-kubernetes `_ ``cncf.kubernetes`` +`apache-airflow-providers-fab `_ ``fab`` ====================================================================================================================== =================== The changelog for the provider package can be found in the diff --git a/providers/celery/pyproject.toml b/providers/celery/pyproject.toml index d26c3bb603074..1f002d01bc9e6 100644 --- a/providers/celery/pyproject.toml +++ b/providers/celery/pyproject.toml @@ -72,6 +72,9 @@ dependencies = [ "cncf.kubernetes" = [ "apache-airflow-providers-cncf-kubernetes>=7.4.0", ] +"fab" = [ + "apache-airflow-providers-fab>=2.0.0", +] [dependency-groups] dev = [ @@ -79,6 +82,7 @@ dev = [ "apache-airflow-task-sdk", "apache-airflow-devel-common", "apache-airflow-providers-cncf-kubernetes", + "apache-airflow-providers-fab", # Additional devel dependencies (do not remove this line and add extra development dependencies) ] @@ -105,7 +109,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/celery/src/airflow/providers/celery/cli/celery_command.py b/providers/celery/src/airflow/providers/celery/cli/celery_command.py index e65f924f5a167..c7dfcf6c04d92 100644 --- a/providers/celery/src/airflow/providers/celery/cli/celery_command.py +++ b/providers/celery/src/airflow/providers/celery/cli/celery_command.py @@ -38,7 +38,6 @@ from airflow.providers.celery.version_compat import AIRFLOW_V_3_0_PLUS from airflow.utils import cli as cli_utils from airflow.utils.cli import setup_locations -from airflow.utils.serve_logs import serve_logs WORKER_PROCESS_NAME = "worker" @@ -108,6 +107,18 @@ def flower(args): @contextmanager def _serve_logs(skip_serve_logs: bool = False): """Start serve_logs sub-process.""" + if AIRFLOW_V_3_0_PLUS: + try: + from airflow.providers.fab.www.serve_logs import serve_logs + except ImportError: + raise ImportError( + "Celery requires FAB provider to be installed in order to run this command. " + "Please install the FAB provider by running: " + "pip install apache-airflow-providers-celery[fab]" + ) + else: + from airflow.utils.serve_logs import serve_logs # type: ignore[no-redef] + sub_proc = None if skip_serve_logs is False: sub_proc = Process(target=serve_logs) diff --git a/providers/celery/src/airflow/providers/celery/get_provider_info.py b/providers/celery/src/airflow/providers/celery/get_provider_info.py index 0e3ccd93fcee7..a3fb00aeb74a6 100644 --- a/providers/celery/src/airflow/providers/celery/get_provider_info.py +++ b/providers/celery/src/airflow/providers/celery/get_provider_info.py @@ -300,6 +300,9 @@ def get_provider_info(): }, }, "dependencies": ["apache-airflow>=2.9.0", "celery[redis]>=5.5.0,<6", "flower>=1.0.0"], - "optional-dependencies": {"cncf.kubernetes": ["apache-airflow-providers-cncf-kubernetes>=7.4.0"]}, + "optional-dependencies": { + "cncf.kubernetes": ["apache-airflow-providers-cncf-kubernetes>=7.4.0"], + "fab": ["apache-airflow-providers-fab>=2.0.0"], + }, "devel-dependencies": [], } diff --git a/providers/cloudant/pyproject.toml b/providers/cloudant/pyproject.toml index 5d7b2f29c16f1..97b6acf7336cb 100644 --- a/providers/cloudant/pyproject.toml +++ b/providers/cloudant/pyproject.toml @@ -93,7 +93,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/cncf/kubernetes/pyproject.toml b/providers/cncf/kubernetes/pyproject.toml index 5cb8c434d322c..7bdd8644816e7 100644 --- a/providers/cncf/kubernetes/pyproject.toml +++ b/providers/cncf/kubernetes/pyproject.toml @@ -109,7 +109,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/cohere/pyproject.toml b/providers/cohere/pyproject.toml index 95ab06a23af7f..74806dba1ab7b 100644 --- a/providers/cohere/pyproject.toml +++ b/providers/cohere/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/common/compat/pyproject.toml b/providers/common/compat/pyproject.toml index b65f309bca7f1..06060dfdc5eda 100644 --- a/providers/common/compat/pyproject.toml +++ b/providers/common/compat/pyproject.toml @@ -103,7 +103,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/common/io/pyproject.toml b/providers/common/io/pyproject.toml index f382fac66865b..575928c3a4cc1 100644 --- a/providers/common/io/pyproject.toml +++ b/providers/common/io/pyproject.toml @@ -103,7 +103,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/common/messaging/pyproject.toml b/providers/common/messaging/pyproject.toml index e501225e0f5cb..dfa3f3f107de9 100644 --- a/providers/common/messaging/pyproject.toml +++ b/providers/common/messaging/pyproject.toml @@ -99,7 +99,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/common/sql/pyproject.toml b/providers/common/sql/pyproject.toml index 8ad7f14b4e455..1e458271ab386 100644 --- a/providers/common/sql/pyproject.toml +++ b/providers/common/sql/pyproject.toml @@ -115,7 +115,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/databricks/pyproject.toml b/providers/databricks/pyproject.toml index 6bcafa5a62922..928ac7aa53a92 100644 --- a/providers/databricks/pyproject.toml +++ b/providers/databricks/pyproject.toml @@ -119,7 +119,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/datadog/pyproject.toml b/providers/datadog/pyproject.toml index a8421502553c7..554ab857150f0 100644 --- a/providers/datadog/pyproject.toml +++ b/providers/datadog/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/dbt/cloud/pyproject.toml b/providers/dbt/cloud/pyproject.toml index b52604c78b1cd..23623a66f5a12 100644 --- a/providers/dbt/cloud/pyproject.toml +++ b/providers/dbt/cloud/pyproject.toml @@ -106,7 +106,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/dingding/pyproject.toml b/providers/dingding/pyproject.toml index 536d6c3adb5e3..7536b5a3d34ed 100644 --- a/providers/dingding/pyproject.toml +++ b/providers/dingding/pyproject.toml @@ -93,7 +93,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/discord/pyproject.toml b/providers/discord/pyproject.toml index ea26cb711674f..ab5054d865a58 100644 --- a/providers/discord/pyproject.toml +++ b/providers/discord/pyproject.toml @@ -95,7 +95,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/docker/pyproject.toml b/providers/docker/pyproject.toml index 5d97b57ce064d..984cdbb45865f 100644 --- a/providers/docker/pyproject.toml +++ b/providers/docker/pyproject.toml @@ -101,7 +101,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/edge/pyproject.toml b/providers/edge/pyproject.toml index 78353e9142ea2..1a84ba205f7a8 100644 --- a/providers/edge/pyproject.toml +++ b/providers/edge/pyproject.toml @@ -101,7 +101,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/elasticsearch/pyproject.toml b/providers/elasticsearch/pyproject.toml index 05cdc9d4fb676..6faf3647636dc 100644 --- a/providers/elasticsearch/pyproject.toml +++ b/providers/elasticsearch/pyproject.toml @@ -95,7 +95,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/exasol/pyproject.toml b/providers/exasol/pyproject.toml index 1792f0596746b..1de9ecedeb43d 100644 --- a/providers/exasol/pyproject.toml +++ b/providers/exasol/pyproject.toml @@ -99,7 +99,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/fab/pyproject.toml b/providers/fab/pyproject.toml index dcfb4d29fb665..8391718778d85 100644 --- a/providers/fab/pyproject.toml +++ b/providers/fab/pyproject.toml @@ -126,7 +126,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/airflow-core/src/airflow/utils/serve_logs.py b/providers/fab/src/airflow/providers/fab/www/serve_logs.py similarity index 100% rename from airflow-core/src/airflow/utils/serve_logs.py rename to providers/fab/src/airflow/providers/fab/www/serve_logs.py diff --git a/airflow-core/tests/unit/utils/test_serve_logs.py b/providers/fab/tests/unit/fab/www/test_serve_logs.py similarity index 99% rename from airflow-core/tests/unit/utils/test_serve_logs.py rename to providers/fab/tests/unit/fab/www/test_serve_logs.py index ad2d6ebf7c358..6f46543515204 100644 --- a/airflow-core/tests/unit/utils/test_serve_logs.py +++ b/providers/fab/tests/unit/fab/www/test_serve_logs.py @@ -26,8 +26,8 @@ from airflow.api_fastapi.auth.tokens import JWTGenerator from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG +from airflow.providers.fab.www.serve_logs import create_app from airflow.utils import timezone -from airflow.utils.serve_logs import create_app from tests_common.test_utils.config import conf_vars diff --git a/providers/facebook/pyproject.toml b/providers/facebook/pyproject.toml index 74411bdbe8157..d5ba185dd1dc0 100644 --- a/providers/facebook/pyproject.toml +++ b/providers/facebook/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/ftp/pyproject.toml b/providers/ftp/pyproject.toml index 6757c4698c451..ba0a5e86613b0 100644 --- a/providers/ftp/pyproject.toml +++ b/providers/ftp/pyproject.toml @@ -103,7 +103,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/git/pyproject.toml b/providers/git/pyproject.toml index 317b46711ff14..3744d66af9b9d 100644 --- a/providers/git/pyproject.toml +++ b/providers/git/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/github/pyproject.toml b/providers/github/pyproject.toml index 70b2651834eb9..026c74d63db94 100644 --- a/providers/github/pyproject.toml +++ b/providers/github/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/google/pyproject.toml b/providers/google/pyproject.toml index 21bbd6d8f099c..fc301d650a2e7 100644 --- a/providers/google/pyproject.toml +++ b/providers/google/pyproject.toml @@ -153,6 +153,9 @@ dependencies = [ "cncf.kubernetes" = [ "apache-airflow-providers-cncf-kubernetes>=10.1.0", ] +"fab" = [ + "apache-airflow-providers-fab>=2.0.0", +] "leveldb" = [ "plyvel>=1.5.1", ] @@ -249,7 +252,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py b/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py index 04329c1a3c826..6a71bc4846397 100644 --- a/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py +++ b/providers/google/src/airflow/providers/google/common/auth_backend/google_openid.py @@ -26,7 +26,15 @@ import google import google.auth.transport.requests import google.oauth2.id_token -from flask import Response, current_app, request as flask_request # type: ignore + +try: + from flask import Response, current_app, request as flask_request # type: ignore +except ImportError: + raise ImportError( + "Google requires FAB provider to be installed in order to use this auth backend. " + "Please install the FAB provider by running: " + "pip install apache-airflow-providers-google[fab]" + ) from google.auth import exceptions from google.auth.transport.requests import AuthorizedSession from google.oauth2 import service_account diff --git a/providers/google/src/airflow/providers/google/get_provider_info.py b/providers/google/src/airflow/providers/google/get_provider_info.py index 9eebf89b417a5..5efb6feb95834 100644 --- a/providers/google/src/airflow/providers/google/get_provider_info.py +++ b/providers/google/src/airflow/providers/google/get_provider_info.py @@ -1661,6 +1661,7 @@ def get_provider_info(): 'apache-beam[gcp]>=2.57.0; python_version >= "3.12"', ], "cncf.kubernetes": ["apache-airflow-providers-cncf-kubernetes>=10.1.0"], + "fab": ["apache-airflow-providers-fab>=2.0.0"], "leveldb": ["plyvel>=1.5.1"], "oracle": ["apache-airflow-providers-oracle>=3.1.0"], "facebook": ["apache-airflow-providers-facebook>=2.2.0"], diff --git a/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py b/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py index 3a7090d7f0e9f..3588b5e45a1c5 100644 --- a/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py +++ b/providers/google/tests/unit/google/common/auth_backend/test_google_openid.py @@ -16,6 +16,7 @@ # under the License. from __future__ import annotations +import importlib from unittest import mock import pytest @@ -77,6 +78,9 @@ def admin_user(google_openid_app): return role_admin +@pytest.mark.skipif( + importlib.util.find_spec("airflow.providers.fab") is None, reason="FAB provider is not installed" +) @pytest.mark.db_test class TestGoogleOpenID: @pytest.fixture(autouse=True) diff --git a/providers/grpc/pyproject.toml b/providers/grpc/pyproject.toml index ae24866c4026d..c941b46e4cf32 100644 --- a/providers/grpc/pyproject.toml +++ b/providers/grpc/pyproject.toml @@ -99,7 +99,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/hashicorp/pyproject.toml b/providers/hashicorp/pyproject.toml index 8b6343c4be5a5..77ec60247e6a2 100644 --- a/providers/hashicorp/pyproject.toml +++ b/providers/hashicorp/pyproject.toml @@ -104,7 +104,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/http/pyproject.toml b/providers/http/pyproject.toml index db36ea3df9f54..cee9ed4550687 100644 --- a/providers/http/pyproject.toml +++ b/providers/http/pyproject.toml @@ -98,7 +98,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/imap/pyproject.toml b/providers/imap/pyproject.toml index 69e9a968b59d9..144fcc3d5065a 100644 --- a/providers/imap/pyproject.toml +++ b/providers/imap/pyproject.toml @@ -91,7 +91,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/influxdb/pyproject.toml b/providers/influxdb/pyproject.toml index e4023040a41b6..d1c555d27ac54 100644 --- a/providers/influxdb/pyproject.toml +++ b/providers/influxdb/pyproject.toml @@ -93,7 +93,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/jdbc/pyproject.toml b/providers/jdbc/pyproject.toml index fe70888993ea2..aa360d72bad34 100644 --- a/providers/jdbc/pyproject.toml +++ b/providers/jdbc/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/jenkins/pyproject.toml b/providers/jenkins/pyproject.toml index 3796dce962e7a..880a922efe364 100644 --- a/providers/jenkins/pyproject.toml +++ b/providers/jenkins/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/microsoft/azure/README.rst b/providers/microsoft/azure/README.rst index 30e349132b414..3927960a59aeb 100644 --- a/providers/microsoft/azure/README.rst +++ b/providers/microsoft/azure/README.rst @@ -75,6 +75,7 @@ PIP package Version required ``azure-mgmt-datafactory`` ``>=2.0.0`` ``azure-mgmt-containerregistry`` ``>=8.0.0`` ``azure-mgmt-containerinstance`` ``>=10.1.0`` +``flask-appbuilder`` ``>=4.0.0`` ``msgraph-core`` ``>=1.3.3`` ``microsoft-kiota-http`` ``>=1.8.0,<2.0.0`` ``microsoft-kiota-serialization-json`` ``>=1.8.0`` diff --git a/providers/microsoft/azure/pyproject.toml b/providers/microsoft/azure/pyproject.toml index c52d76dd4bc41..cd23922a70b53 100644 --- a/providers/microsoft/azure/pyproject.toml +++ b/providers/microsoft/azure/pyproject.toml @@ -80,6 +80,7 @@ dependencies = [ "azure-mgmt-datafactory>=2.0.0", "azure-mgmt-containerregistry>=8.0.0", "azure-mgmt-containerinstance>=10.1.0", + "flask-appbuilder>=4.0.0", # msgraph-core 1.1.8 has a bug which causes ABCMeta object is not subscriptable error # See https://github.com/microsoftgraph/msgraph-sdk-python-core/issues/781 "msgraph-core>=1.3.3", @@ -147,7 +148,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py index 5bfbf663ce438..c048669876040 100644 --- a/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py +++ b/providers/microsoft/azure/src/airflow/providers/microsoft/azure/get_provider_info.py @@ -483,6 +483,7 @@ def get_provider_info(): "azure-mgmt-datafactory>=2.0.0", "azure-mgmt-containerregistry>=8.0.0", "azure-mgmt-containerinstance>=10.1.0", + "flask-appbuilder>=4.0.0", "msgraph-core>=1.3.3", "microsoft-kiota-http>=1.8.0,<2.0.0", "microsoft-kiota-serialization-json>=1.8.0", diff --git a/providers/microsoft/mssql/pyproject.toml b/providers/microsoft/mssql/pyproject.toml index 5ae5fe2f2a4a6..4c87f27650f38 100644 --- a/providers/microsoft/mssql/pyproject.toml +++ b/providers/microsoft/mssql/pyproject.toml @@ -111,7 +111,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/microsoft/psrp/pyproject.toml b/providers/microsoft/psrp/pyproject.toml index 3bd1df78e3ee3..b3d20ba7aca38 100644 --- a/providers/microsoft/psrp/pyproject.toml +++ b/providers/microsoft/psrp/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/microsoft/winrm/pyproject.toml b/providers/microsoft/winrm/pyproject.toml index 3d5e62ec45dd4..87b1afde68b00 100644 --- a/providers/microsoft/winrm/pyproject.toml +++ b/providers/microsoft/winrm/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/mongo/pyproject.toml b/providers/mongo/pyproject.toml index 97e09aefd4946..72443ae81e002 100644 --- a/providers/mongo/pyproject.toml +++ b/providers/mongo/pyproject.toml @@ -97,7 +97,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/mysql/pyproject.toml b/providers/mysql/pyproject.toml index 19b05a50c9bb7..800b59257e006 100644 --- a/providers/mysql/pyproject.toml +++ b/providers/mysql/pyproject.toml @@ -126,7 +126,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/neo4j/pyproject.toml b/providers/neo4j/pyproject.toml index 70fff7f25935e..a0b7199bcee2b 100644 --- a/providers/neo4j/pyproject.toml +++ b/providers/neo4j/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/odbc/pyproject.toml b/providers/odbc/pyproject.toml index 6c1f3e2d2791e..335957a7b0535 100644 --- a/providers/odbc/pyproject.toml +++ b/providers/odbc/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/openai/pyproject.toml b/providers/openai/pyproject.toml index ef21af31a25db..69e3b2c1bdd22 100644 --- a/providers/openai/pyproject.toml +++ b/providers/openai/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/openfaas/pyproject.toml b/providers/openfaas/pyproject.toml index 59611e1d9024b..abeeda4c5cf65 100644 --- a/providers/openfaas/pyproject.toml +++ b/providers/openfaas/pyproject.toml @@ -91,7 +91,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/openlineage/pyproject.toml b/providers/openlineage/pyproject.toml index e206af0fab2a9..f738cb920a8b3 100644 --- a/providers/openlineage/pyproject.toml +++ b/providers/openlineage/pyproject.toml @@ -102,7 +102,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/opensearch/pyproject.toml b/providers/opensearch/pyproject.toml index c6ba11a7d2bc8..ca0b03831767d 100644 --- a/providers/opensearch/pyproject.toml +++ b/providers/opensearch/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/opsgenie/pyproject.toml b/providers/opsgenie/pyproject.toml index e8f6aa545c099..df8767542c97f 100644 --- a/providers/opsgenie/pyproject.toml +++ b/providers/opsgenie/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/oracle/pyproject.toml b/providers/oracle/pyproject.toml index fccae2d0cd810..a5a6f84979b90 100644 --- a/providers/oracle/pyproject.toml +++ b/providers/oracle/pyproject.toml @@ -102,7 +102,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/pagerduty/pyproject.toml b/providers/pagerduty/pyproject.toml index 3b9c3d7eb47f1..f201ec4c80bcb 100644 --- a/providers/pagerduty/pyproject.toml +++ b/providers/pagerduty/pyproject.toml @@ -94,7 +94,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/papermill/pyproject.toml b/providers/papermill/pyproject.toml index c1dc6edd25aff..2bdce5841823c 100644 --- a/providers/papermill/pyproject.toml +++ b/providers/papermill/pyproject.toml @@ -104,7 +104,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/pgvector/pyproject.toml b/providers/pgvector/pyproject.toml index e2f2d405adcac..f4cbd6c978c64 100644 --- a/providers/pgvector/pyproject.toml +++ b/providers/pgvector/pyproject.toml @@ -102,7 +102,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/pinecone/pyproject.toml b/providers/pinecone/pyproject.toml index b4d8d7274ca59..39326b684052c 100644 --- a/providers/pinecone/pyproject.toml +++ b/providers/pinecone/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/postgres/pyproject.toml b/providers/postgres/pyproject.toml index 6d35ad0c6d51f..7fd6d52802972 100644 --- a/providers/postgres/pyproject.toml +++ b/providers/postgres/pyproject.toml @@ -107,7 +107,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/presto/pyproject.toml b/providers/presto/pyproject.toml index 312a28c053b64..4b02dcc8b10a4 100644 --- a/providers/presto/pyproject.toml +++ b/providers/presto/pyproject.toml @@ -107,7 +107,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/qdrant/pyproject.toml b/providers/qdrant/pyproject.toml index 85e17042bd459..7494d42ee7b8b 100644 --- a/providers/qdrant/pyproject.toml +++ b/providers/qdrant/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/redis/pyproject.toml b/providers/redis/pyproject.toml index b50c33057bc81..88940af8ff0e4 100644 --- a/providers/redis/pyproject.toml +++ b/providers/redis/pyproject.toml @@ -93,7 +93,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/salesforce/pyproject.toml b/providers/salesforce/pyproject.toml index 744aaaa1d15ac..bc716276586ca 100644 --- a/providers/salesforce/pyproject.toml +++ b/providers/salesforce/pyproject.toml @@ -97,7 +97,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/samba/pyproject.toml b/providers/samba/pyproject.toml index 4bcacaa4abcb9..9932203c7c28f 100644 --- a/providers/samba/pyproject.toml +++ b/providers/samba/pyproject.toml @@ -100,7 +100,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/segment/pyproject.toml b/providers/segment/pyproject.toml index 00469e51e3915..34ef591c4e0f3 100644 --- a/providers/segment/pyproject.toml +++ b/providers/segment/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/sendgrid/pyproject.toml b/providers/sendgrid/pyproject.toml index b211a202dcedb..1f06bde69a907 100644 --- a/providers/sendgrid/pyproject.toml +++ b/providers/sendgrid/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/sftp/pyproject.toml b/providers/sftp/pyproject.toml index 243e0be1213f7..670aed6c9f03e 100644 --- a/providers/sftp/pyproject.toml +++ b/providers/sftp/pyproject.toml @@ -107,7 +107,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/singularity/pyproject.toml b/providers/singularity/pyproject.toml index 14f08222909ba..1daa9a212c59a 100644 --- a/providers/singularity/pyproject.toml +++ b/providers/singularity/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/slack/pyproject.toml b/providers/slack/pyproject.toml index 7f2a706fe4465..43068bd1dd635 100644 --- a/providers/slack/pyproject.toml +++ b/providers/slack/pyproject.toml @@ -99,7 +99,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/smtp/pyproject.toml b/providers/smtp/pyproject.toml index 85cdd89602cb1..66c8150d2a329 100644 --- a/providers/smtp/pyproject.toml +++ b/providers/smtp/pyproject.toml @@ -93,7 +93,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/snowflake/pyproject.toml b/providers/snowflake/pyproject.toml index 57d94aee6d586..fe6edad7c8627 100644 --- a/providers/snowflake/pyproject.toml +++ b/providers/snowflake/pyproject.toml @@ -113,7 +113,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/sqlite/pyproject.toml b/providers/sqlite/pyproject.toml index 9881d76a0c299..d282893419a6c 100644 --- a/providers/sqlite/pyproject.toml +++ b/providers/sqlite/pyproject.toml @@ -95,7 +95,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/ssh/pyproject.toml b/providers/ssh/pyproject.toml index a502138d4f550..ee063f1d48c0e 100644 --- a/providers/ssh/pyproject.toml +++ b/providers/ssh/pyproject.toml @@ -93,7 +93,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/standard/pyproject.toml b/providers/standard/pyproject.toml index 94730a90f0a15..79b809c531f87 100644 --- a/providers/standard/pyproject.toml +++ b/providers/standard/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/tableau/pyproject.toml b/providers/tableau/pyproject.toml index 19a60f896c56f..4dde8553c592e 100644 --- a/providers/tableau/pyproject.toml +++ b/providers/tableau/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/telegram/pyproject.toml b/providers/telegram/pyproject.toml index 272754102f89b..fc159bebdd4fc 100644 --- a/providers/telegram/pyproject.toml +++ b/providers/telegram/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/teradata/pyproject.toml b/providers/teradata/pyproject.toml index 6d0b6c1dd7b43..327f32c64d7cf 100644 --- a/providers/teradata/pyproject.toml +++ b/providers/teradata/pyproject.toml @@ -107,7 +107,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/trino/pyproject.toml b/providers/trino/pyproject.toml index e6956f08128e1..0f61b2d4070b9 100644 --- a/providers/trino/pyproject.toml +++ b/providers/trino/pyproject.toml @@ -111,7 +111,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/vertica/pyproject.toml b/providers/vertica/pyproject.toml index 5ffea235f9798..b74083ddefa33 100644 --- a/providers/vertica/pyproject.toml +++ b/providers/vertica/pyproject.toml @@ -95,7 +95,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/weaviate/pyproject.toml b/providers/weaviate/pyproject.toml index 16ab05d626fba..e4550fa332f35 100644 --- a/providers/weaviate/pyproject.toml +++ b/providers/weaviate/pyproject.toml @@ -98,7 +98,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/yandex/pyproject.toml b/providers/yandex/pyproject.toml index b141e3b47491e..47d52ae9c53c7 100644 --- a/providers/yandex/pyproject.toml +++ b/providers/yandex/pyproject.toml @@ -102,7 +102,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/ydb/pyproject.toml b/providers/ydb/pyproject.toml index e3725b16f0221..86b6c26ed9e3e 100644 --- a/providers/ydb/pyproject.toml +++ b/providers/ydb/pyproject.toml @@ -95,7 +95,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls] diff --git a/providers/zendesk/pyproject.toml b/providers/zendesk/pyproject.toml index e1c999dfefc43..a8b04d8e0c2b2 100644 --- a/providers/zendesk/pyproject.toml +++ b/providers/zendesk/pyproject.toml @@ -92,7 +92,6 @@ apache-airflow = {workspace = true} apache-airflow-devel-common = {workspace = true} apache-airflow-task-sdk = {workspace = true} apache-airflow-providers-common-sql = {workspace = true} -apache-airflow-providers-fab = {workspace = true} apache-airflow-providers-standard = {workspace = true} [project.urls]