This is an automated email from the ASF dual-hosted git repository.
ephraimanierobi pushed a change to branch prepare-python-client314
in repository https://gitbox.apache.org/repos/asf/airflow.git
discard 3002fd37a40 Update version and add changelog for 3.1.4 Python Client
Release
add 68275ced21c Remove tags from AWS system tests (#59206)
add a178d00aa5e Remove team ID and use team name as PK (#59109)
add 51064ba2409 Fix mypy error in `scheduler_job_runner.py` (#59204)
add 479acd8a77d i18n(Ko): add missing translation (Dec 8) (#59199)
add 6d57acfa779 Remove labels from unexisted sections (#59213)
add 4ea1ebf56c8 Added paginated_run method to KiotaRequestAdapterHook in
MSGraph (#57536)
add cfd82c7f9c5 Add newsfragment for 52357 PR (#59214)
add 442979423f7 Fix outdated dependency documentation (#58970)
add 84568391f21 Add is_watcher field to TriggerDetails TypedDict (#59161)
add b20d1f62cd5 Fix broken syntax highlighting in AIR rules note section
(#59188)
add 0bf6f82d3d6 Fix side-effect of running version suffix replacements
(#58937)
add 3c2163729d3 Fix composer sys test (#59200)
add 95658615b68 Keycloak CLI: add dry run functionality (#59134)
add 216e7a722f7 Add max_trigger_to_select_per_loop conf to respect
Triggerer HA setup (#58803)
add 697ad4a3d40 Import empty operator from compat module for AF2/AF3
support (#59222)
add a0b3a3b8b48 Update BulkDeleteAction to use generic type (#59207)
add be94a60ecc7 Remove unused functions in Core expandinput (#59225)
add 087c656cf2a Completing stubbed tests for AssetEvent operations (#59182)
add 4438c28bee1 Remove UUID case for sqlalachemy 2 from tests (#59230)
add 7218cf04581 Fix links for DurationChart (#59095)
add ac6e893af73 Add common: namespace to translation keys in AssetsList
component for consistency. (#59227)
add 787b8186b62 docs: adjust misleading docs (#59228)
add 42d82cbc17a Permit `airflow db migrate -r` with an empty database
(#59205)
add a6c9066120a Fix incorrect state query parameter for task_instances
(#59086)
add c12afbdda46 Fix migration to add TI primary key for sqlite dialect
(#59241)
add 3b74a8d6920 Complete Hebrew translation 2025-12-09 (#59133)
add 740da666b58 Don't depend upon FastAPI inside Task-SDK client (#59250)
add 12a66dbccab Keycloak: implement connection pooling (#59252)
add 11e127ba5fc Create `create_token` method in FAB auth manager (#59245)
add 10558d8d154 Conditionally import from task sdk (#59254)
add 861cf546cf0 Close the gaps in PL translation 2025-12-09 (#59251)
add af5e469f8c2 Passwords from stdin in Keycloak Provider (#59119)
add dac53df3ade Fix airflow version in migration (#59240)
add 8e3f689e14e Fix remote logging S3 connection retrieval in supervisor
context (#59247)
add 38cf2147567 Prepare providers release 2025-12-09 (#59249)
add afd53fd8b4c Fetch asset event source dag run (#59090)
add 91ae1733791 Add wildcard support for dag_id and dag_run_id in bulk ti
endpoint (#57441)
add 4983b2a0236 Extract shared "module_loading" distribution (#59139)
add 1e7e40ee595 Add CI workflow for UI e2e tests (#58901)
add 0b6d2589df0 Fix an odd import of pendulum from sqlalchemy_utils
instead of elsewhere. (#59258)
add 2531e01a24b Update version and add changelog for 3.1.4 Python Client
Release
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (3002fd37a40)
\
N -- N -- N refs/heads/prepare-python-client314 (2531e01a24b)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/workflows/additional-prod-image-tests.yml | 40 +
.github/workflows/ci-amd-arm.yml | 2 +
.../{airflow-e2e-tests.yml => ui-e2e-tests.yml} | 68 +-
airflow-core/.pre-commit-config.yaml | 4 +-
.../docs/authoring-and-scheduling/deferring.rst | 13 +
.../docs/authoring-and-scheduling/serializers.rst | 2 +-
airflow-core/docs/img/airflow_erd.sha256 | 2 +-
airflow-core/docs/img/airflow_erd.svg | 4954 +++++++++++---------
airflow-core/docs/installation/dependencies.rst | 22 +-
.../docs/installation/upgrading_to_airflow3.rst | 2 +-
airflow-core/docs/migrations-ref.rst | 9 +-
airflow-core/pyproject.toml | 6 +-
airflow-core/src/airflow/_shared/module_loading | 1 +
.../api_fastapi/auth/managers/base_auth_manager.py | 13 +-
.../api_fastapi/core_api/datamodels/common.py | 3 +-
.../core_api/datamodels/task_instances.py | 2 +
.../api_fastapi/core_api/datamodels/ui/teams.py | 3 -
.../api_fastapi/core_api/datamodels/variables.py | 5 +-
.../api_fastapi/core_api/openapi/_private_ui.yaml | 11 +-
.../core_api/openapi/v2-rest-api-generated.yaml | 29 +-
.../api_fastapi/core_api/routes/ui/teams.py | 2 +-
.../core_api/services/public/task_instances.py | 353 +-
.../api_fastapi/execution_api/routes/dag_runs.py | 130 +-
.../api_fastapi/execution_api/versions/__init__.py | 5 +
.../versions/{v2025_09_23.py => v2025_12_08.py} | 21 +-
airflow-core/src/airflow/cli/cli_config.py | 2 +-
.../src/airflow/cli/commands/db_manager_command.py | 2 +-
.../src/airflow/cli/commands/team_command.py | 13 +-
.../src/airflow/config_templates/config.yml | 9 +
airflow-core/src/airflow/configuration.py | 2 +-
.../src/airflow/dag_processing/bundles/base.py | 5 +-
.../src/airflow/dag_processing/bundles/manager.py | 2 +-
airflow-core/src/airflow/exceptions.py | 2 +-
.../src/airflow/executors/executor_loader.py | 2 +-
.../src/airflow/jobs/scheduler_job_runner.py | 2 +
.../src/airflow/jobs/triggerer_job_runner.py | 3 +-
airflow-core/src/airflow/logging_config.py | 2 +-
.../versions/0000_2_6_2_squashed_migrations.py | 848 ++++
.../0001_2_7_0_add_index_to_task_instance_table.py | 4 +-
...3_0_0_add_uuid_primary_key_to_task_instance_.py | 22 +-
.../versions/0094_3_2_0_remove_team_id.py | 148 +
airflow-core/src/airflow/models/__init__.py | 2 +-
airflow-core/src/airflow/models/connection.py | 26 +-
airflow-core/src/airflow/models/expandinput.py | 15 +-
airflow-core/src/airflow/models/pool.py | 12 +-
airflow-core/src/airflow/models/team.py | 31 +-
airflow-core/src/airflow/models/trigger.py | 7 +
airflow-core/src/airflow/models/variable.py | 42 +-
airflow-core/src/airflow/plugins_manager.py | 2 +-
airflow-core/src/airflow/providers_manager.py | 2 +-
airflow-core/src/airflow/serialization/decoders.py | 2 +-
airflow-core/src/airflow/serialization/encoders.py | 2 +-
airflow-core/src/airflow/serialization/serde.py | 2 +-
.../airflow/serialization/serialized_objects.py | 2 +-
.../airflow/serialization/serializers/bignum.py | 2 +-
.../airflow/serialization/serializers/builtin.py | 2 +-
.../airflow/serialization/serializers/datetime.py | 2 +-
.../airflow/serialization/serializers/deltalake.py | 2 +-
.../airflow/serialization/serializers/iceberg.py | 2 +-
.../serialization/serializers/kubernetes.py | 2 +-
.../src/airflow/serialization/serializers/numpy.py | 2 +-
.../airflow/serialization/serializers/pandas.py | 2 +-
.../airflow/serialization/serializers/pydantic.py | 2 +-
.../airflow/serialization/serializers/timezone.py | 2 +-
airflow-core/src/airflow/task/priority_strategy.py | 2 +-
airflow-core/src/airflow/triggers/callback.py | 2 +-
.../ui/openapi-gen/queries/ensureQueryData.ts | 2 +-
.../src/airflow/ui/openapi-gen/queries/prefetch.ts | 2 +-
.../src/airflow/ui/openapi-gen/queries/queries.ts | 2 +-
.../src/airflow/ui/openapi-gen/queries/suspense.ts | 2 +-
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 50 +-
.../ui/openapi-gen/requests/services.gen.ts | 2 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 15 +-
.../airflow/ui/public/i18n/locales/he/assets.json | 7 +
.../airflow/ui/public/i18n/locales/he/browse.json | 4 -
.../airflow/ui/public/i18n/locales/he/common.json | 10 +-
.../ui/public/i18n/locales/he/components.json | 10 +
.../src/airflow/ui/public/i18n/locales/he/dag.json | 12 +
.../airflow/ui/public/i18n/locales/he/dags.json | 5 +
.../airflow/ui/public/i18n/locales/he/hitl.json | 5 +-
.../airflow/ui/public/i18n/locales/ko/common.json | 1 +
.../airflow/ui/public/i18n/locales/pl/assets.json | 1 +
.../airflow/ui/public/i18n/locales/pl/browse.json | 4 -
.../airflow/ui/public/i18n/locales/pl/common.json | 3 +
.../ui/public/i18n/locales/pl/components.json | 3 +
.../airflow/ui/src/components/DurationChart.tsx | 17 +-
.../airflow/ui/src/pages/AssetsList/AssetsList.tsx | 4 +-
.../Dashboard/HistoricalMetrics/MetricSection.tsx | 3 +-
airflow-core/src/airflow/ui/tests/e2e/README.md | 141 +-
airflow-core/src/airflow/utils/db.py | 7 +-
airflow-core/src/airflow/utils/db_manager.py | 2 +-
.../src/airflow/utils/serve_logs/log_server.py | 2 +-
.../tests/unit/always/test_project_structure.py | 1 -
.../auth/managers/test_base_auth_manager.py | 6 +-
.../unit/api_fastapi/common/test_exceptions.py | 15 +-
.../core_api/routes/public/test_dag_run.py | 2 +-
.../core_api/routes/public/test_task_instances.py | 170 +-
.../core_api/routes/public/test_variables.py | 45 +-
.../api_fastapi/core_api/routes/ui/test_teams.py | 5 -
.../services/public/test_task_instances.py | 340 +-
.../execution_api/versions/head/test_dag_runs.py | 105 +-
.../versions/v2025_11_07}/__init__.py | 0
.../versions/v2025_11_07/test_dag_runs.py | 62 +
.../tests/unit/cli/commands/test_team_command.py | 24 +-
.../tests/unit/core/test_example_dags_system.py | 2 +-
.../tests/unit/dag_processing/test_processor.py | 2 +
airflow-core/tests/unit/jobs/test_triggerer_job.py | 6 +-
airflow-core/tests/unit/models/test_connection.py | 7 +-
airflow-core/tests/unit/models/test_dag.py | 2 +-
airflow-core/tests/unit/models/test_pool.py | 9 +-
airflow-core/tests/unit/models/test_team.py | 50 +-
airflow-core/tests/unit/models/test_trigger.py | 91 +
airflow-core/tests/unit/models/test_variable.py | 15 +-
.../tests/unit/plugins/test_plugins_manager.py | 2 +-
.../serialization/serializers/test_serializers.py | 2 +-
.../unit/serialization/test_dag_serialization.py | 2 +-
.../tests/unit/serialization/test_serde.py | 2 +-
.../tests/unit/utils/test_module_loading.py | 35 -
.../src/airflowctl/api/datamodels/generated.py | 132 +-
chart/newsfragments/52357.improvement.rst | 1 +
.../workers/worker-celery-serviceaccount.yaml | 4 +-
.../workers/worker-kubernetes-serviceaccount.yaml | 4 +-
.../doc/images/output_testing_ui-e2e-tests.svg | 80 +-
.../doc/images/output_testing_ui-e2e-tests.txt | 2 +-
.../src/airflow_breeze/commands/common_options.py | 6 +-
.../airflow_breeze/commands/testing_commands.py | 153 +-
.../commands/testing_commands_config.py | 8 +
.../airflow_breeze/utils/docker_compose_utils.py | 165 +
.../src/airflow_breeze/utils/selective_checks.py | 4 +
dev/breeze/tests/test_packages.py | 46 +-
devel-common/src/tests_common/pytest_plugin.py | 3 +-
.../src/tests_common/test_utils/providers.py | 2 +-
providers/.last_release_date.txt | 2 +-
providers/airbyte/README.rst | 8 +-
providers/airbyte/docs/changelog.rst | 11 +
providers/airbyte/docs/index.rst | 8 +-
providers/airbyte/provider.yaml | 3 +-
providers/airbyte/pyproject.toml | 8 +-
.../src/airflow/providers/airbyte/__init__.py | 2 +-
providers/alibaba/README.rst | 8 +-
providers/alibaba/docs/changelog.rst | 11 +
providers/alibaba/docs/index.rst | 8 +-
providers/alibaba/provider.yaml | 3 +-
providers/alibaba/pyproject.toml | 8 +-
.../src/airflow/providers/alibaba/__init__.py | 2 +-
providers/amazon/README.rst | 9 +-
providers/amazon/docs/changelog.rst | 25 +
providers/amazon/docs/index.rst | 8 +-
providers/amazon/provider.yaml | 3 +-
providers/amazon/pyproject.toml | 8 +-
.../src/airflow/providers/amazon/__init__.py | 2 +-
.../tests/system/amazon/aws/example_appflow.py | 1 -
.../tests/system/amazon/aws/example_appflow_run.py | 1 -
.../tests/system/amazon/aws/example_athena.py | 1 -
.../system/amazon/aws/example_azure_blob_to_s3.py | 1 -
.../tests/system/amazon/aws/example_batch.py | 1 -
.../tests/system/amazon/aws/example_bedrock.py | 1 -
.../amazon/aws/example_bedrock_batch_inference.py | 1 -
.../aws/example_bedrock_retrieve_and_generate.py | 3 +-
.../system/amazon/aws/example_cloudformation.py | 1 -
.../tests/system/amazon/aws/example_comprehend.py | 1 -
.../aws/example_comprehend_document_classifier.py | 1 -
.../tests/system/amazon/aws/example_datasync.py | 1 -
.../amazon/tests/system/amazon/aws/example_dms.py | 1 -
.../tests/system/amazon/aws/example_dynamodb.py | 1 -
.../system/amazon/aws/example_dynamodb_to_s3.py | 1 -
.../amazon/tests/system/amazon/aws/example_ec2.py | 1 -
.../amazon/tests/system/amazon/aws/example_ecs.py | 1 -
.../tests/system/amazon/aws/example_ecs_fargate.py | 1 -
.../system/amazon/aws/example_eks_templated.py | 1 -
.../aws/example_eks_with_fargate_in_one_step.py | 1 -
.../amazon/aws/example_eks_with_fargate_profile.py | 1 -
.../aws/example_eks_with_nodegroup_in_one_step.py | 1 -
.../amazon/aws/example_eks_with_nodegroups.py | 1 -
.../amazon/tests/system/amazon/aws/example_emr.py | 1 -
.../tests/system/amazon/aws/example_emr_eks.py | 1 -
.../amazon/aws/example_emr_notebook_execution.py | 1 -
.../system/amazon/aws/example_emr_serverless.py | 1 -
.../tests/system/amazon/aws/example_eventbridge.py | 1 -
.../tests/system/amazon/aws/example_ftp_to_s3.py | 1 -
.../tests/system/amazon/aws/example_gcs_to_s3.py | 1 -
.../system/amazon/aws/example_glacier_to_gcs.py | 1 -
.../amazon/tests/system/amazon/aws/example_glue.py | 1 -
.../system/amazon/aws/example_glue_data_quality.py | 1 -
...xample_glue_data_quality_with_recommendation.py | 1 -
.../amazon/aws/example_google_api_sheets_to_s3.py | 1 -
.../amazon/aws/example_google_api_youtube_to_s3.py | 1 -
.../system/amazon/aws/example_hive_to_dynamodb.py | 1 -
.../tests/system/amazon/aws/example_http_to_s3.py | 1 -
.../amazon/aws/example_imap_attachment_to_s3.py | 1 -
.../system/amazon/aws/example_kinesis_analytics.py | 1 -
.../tests/system/amazon/aws/example_lambda.py | 1 -
.../tests/system/amazon/aws/example_local_to_s3.py | 1 -
.../tests/system/amazon/aws/example_mongo_to_s3.py | 1 -
.../amazon/tests/system/amazon/aws/example_mwaa.py | 1 -
.../system/amazon/aws/example_mwaa_airflow2.py | 1 -
.../tests/system/amazon/aws/example_neptune.py | 1 -
.../tests/system/amazon/aws/example_quicksight.py | 1 -
.../tests/system/amazon/aws/example_rds_event.py | 1 -
.../tests/system/amazon/aws/example_rds_export.py | 1 -
.../system/amazon/aws/example_rds_instance.py | 1 -
.../system/amazon/aws/example_rds_snapshot.py | 1 -
.../tests/system/amazon/aws/example_redshift.py | 1 -
.../amazon/aws/example_redshift_s3_transfers.py | 1 -
.../amazon/tests/system/amazon/aws/example_s3.py | 1 -
.../system/amazon/aws/example_s3_to_dynamodb.py | 1 -
.../tests/system/amazon/aws/example_s3_to_ftp.py | 1 -
.../tests/system/amazon/aws/example_s3_to_sftp.py | 1 -
.../tests/system/amazon/aws/example_s3_to_sql.py | 1 -
.../tests/system/amazon/aws/example_sagemaker.py | 1 -
.../amazon/aws/example_sagemaker_endpoint.py | 1 -
.../amazon/aws/example_sagemaker_notebook.py | 1 -
.../amazon/aws/example_sagemaker_pipeline.py | 1 -
.../amazon/aws/example_sagemaker_unified_studio.py | 1 -
.../system/amazon/aws/example_salesforce_to_s3.py | 1 -
.../tests/system/amazon/aws/example_sftp_to_s3.py | 1 -
.../amazon/tests/system/amazon/aws/example_sns.py | 1 -
.../tests/system/amazon/aws/example_sql_to_s3.py | 1 -
.../amazon/tests/system/amazon/aws/example_sqs.py | 1 -
.../amazon/tests/system/amazon/aws/example_ssm.py | 12 +-
.../system/amazon/aws/example_step_functions.py | 1 -
.../amazon/aws/log/test_cloudwatch_task_handler.py | 2 +-
.../unit/amazon/aws/log/test_s3_task_handler.py | 2 +-
providers/apache/beam/README.rst | 38 +-
providers/apache/beam/docs/changelog.rst | 11 +
providers/apache/beam/docs/index.rst | 27 +-
providers/apache/beam/provider.yaml | 3 +-
providers/apache/beam/pyproject.toml | 8 +-
.../src/airflow/providers/apache/beam/__init__.py | 2 +-
providers/apache/druid/README.rst | 8 +-
providers/apache/druid/docs/changelog.rst | 11 +
providers/apache/druid/docs/index.rst | 8 +-
providers/apache/druid/provider.yaml | 3 +-
providers/apache/druid/pyproject.toml | 8 +-
.../src/airflow/providers/apache/druid/__init__.py | 2 +-
providers/apache/flink/README.rst | 16 +-
providers/apache/flink/docs/changelog.rst | 11 +
providers/apache/flink/docs/index.rst | 7 +-
providers/apache/flink/provider.yaml | 3 +-
providers/apache/flink/pyproject.toml | 8 +-
.../src/airflow/providers/apache/flink/__init__.py | 2 +-
providers/apache/hdfs/README.rst | 34 +-
providers/apache/hdfs/docs/changelog.rst | 11 +
providers/apache/hdfs/docs/index.rst | 25 +-
providers/apache/hdfs/provider.yaml | 3 +-
providers/apache/hdfs/pyproject.toml | 8 +-
.../src/airflow/providers/apache/hdfs/__init__.py | 2 +-
providers/apache/hive/README.rst | 8 +-
providers/apache/hive/docs/changelog.rst | 11 +
providers/apache/hive/docs/index.rst | 8 +-
providers/apache/hive/provider.yaml | 3 +-
providers/apache/hive/pyproject.toml | 8 +-
.../src/airflow/providers/apache/hive/__init__.py | 2 +-
providers/apache/kafka/README.rst | 22 +-
providers/apache/kafka/docs/changelog.rst | 11 +
providers/apache/kafka/docs/index.rst | 21 +-
providers/apache/kafka/provider.yaml | 3 +-
providers/apache/kafka/pyproject.toml | 8 +-
.../src/airflow/providers/apache/kafka/__init__.py | 2 +-
.../providers/apache/kafka/hooks/consume.py | 2 +-
.../providers/apache/kafka/operators/consume.py | 2 +-
.../providers/apache/kafka/operators/produce.py | 2 +-
.../apache/kafka/triggers/await_message.py | 2 +-
providers/apache/kylin/README.rst | 8 +-
providers/apache/kylin/docs/changelog.rst | 11 +
providers/apache/kylin/docs/index.rst | 8 +-
providers/apache/kylin/provider.yaml | 3 +-
providers/apache/kylin/pyproject.toml | 8 +-
.../src/airflow/providers/apache/kylin/__init__.py | 2 +-
providers/apache/livy/README.rst | 8 +-
providers/apache/livy/docs/changelog.rst | 11 +
providers/apache/livy/docs/index.rst | 8 +-
providers/apache/livy/provider.yaml | 3 +-
providers/apache/livy/pyproject.toml | 8 +-
.../src/airflow/providers/apache/livy/__init__.py | 2 +-
providers/apache/pig/README.rst | 26 +-
providers/apache/pig/docs/changelog.rst | 11 +
providers/apache/pig/docs/index.rst | 17 +-
providers/apache/pig/provider.yaml | 3 +-
providers/apache/pig/pyproject.toml | 8 +-
.../src/airflow/providers/apache/pig/__init__.py | 2 +-
providers/apache/pinot/README.rst | 30 +-
providers/apache/pinot/docs/changelog.rst | 11 +
providers/apache/pinot/docs/index.rst | 21 +-
providers/apache/pinot/provider.yaml | 3 +-
providers/apache/pinot/pyproject.toml | 8 +-
.../src/airflow/providers/apache/pinot/__init__.py | 2 +-
providers/apache/spark/README.rst | 8 +-
providers/apache/spark/docs/changelog.rst | 11 +
providers/apache/spark/docs/index.rst | 8 +-
providers/apache/spark/provider.yaml | 3 +-
providers/apache/spark/pyproject.toml | 8 +-
.../src/airflow/providers/apache/spark/__init__.py | 2 +-
providers/arangodb/README.rst | 8 +-
providers/arangodb/docs/changelog.rst | 11 +
providers/arangodb/docs/index.rst | 8 +-
providers/arangodb/provider.yaml | 3 +-
providers/arangodb/pyproject.toml | 8 +-
.../src/airflow/providers/arangodb/__init__.py | 2 +-
.../jira/docs/.latest-doc-only-change.txt | 2 +-
providers/atlassian/jira/pyproject.toml | 2 +-
providers/celery/README.rst | 8 +-
providers/celery/docs/changelog.rst | 13 +
providers/celery/docs/index.rst | 8 +-
providers/celery/provider.yaml | 3 +-
providers/celery/pyproject.toml | 8 +-
.../src/airflow/providers/celery/__init__.py | 2 +-
providers/cloudant/README.rst | 8 +-
providers/cloudant/docs/changelog.rst | 11 +
providers/cloudant/docs/index.rst | 8 +-
providers/cloudant/provider.yaml | 3 +-
providers/cloudant/pyproject.toml | 8 +-
.../src/airflow/providers/cloudant/__init__.py | 2 +-
providers/cncf/kubernetes/README.rst | 9 +-
providers/cncf/kubernetes/docs/changelog.rst | 19 +
providers/cncf/kubernetes/docs/index.rst | 9 +-
providers/cncf/kubernetes/provider.yaml | 3 +-
providers/cncf/kubernetes/pyproject.toml | 8 +-
.../airflow/providers/cncf/kubernetes/__init__.py | 2 +-
providers/common/compat/README.rst | 6 +-
providers/common/compat/docs/changelog.rst | 13 +
providers/common/compat/docs/index.rst | 6 +-
providers/common/compat/provider.yaml | 3 +-
providers/common/compat/pyproject.toml | 6 +-
.../airflow/providers/common/compat/__init__.py | 2 +-
.../common/compat/module_loading/__init__.py | 64 +-
.../messaging/docs/.latest-doc-only-change.txt | 2 +-
providers/common/sql/README.rst | 8 +-
providers/common/sql/docs/changelog.rst | 12 +
providers/common/sql/docs/index.rst | 8 +-
providers/common/sql/provider.yaml | 3 +-
providers/common/sql/pyproject.toml | 8 +-
.../src/airflow/providers/common/sql/__init__.py | 2 +-
.../src/airflow/providers/common/sql/hooks/sql.py | 4 +-
providers/databricks/README.rst | 8 +-
providers/databricks/docs/changelog.rst | 12 +
providers/databricks/docs/index.rst | 8 +-
providers/databricks/provider.yaml | 3 +-
providers/databricks/pyproject.toml | 8 +-
.../src/airflow/providers/databricks/__init__.py | 2 +-
providers/datadog/README.rst | 8 +-
providers/datadog/docs/changelog.rst | 11 +
providers/datadog/docs/index.rst | 8 +-
providers/datadog/provider.yaml | 3 +-
providers/datadog/pyproject.toml | 8 +-
.../src/airflow/providers/datadog/__init__.py | 2 +-
providers/dbt/cloud/README.rst | 8 +-
providers/dbt/cloud/docs/changelog.rst | 17 +
providers/dbt/cloud/docs/index.rst | 8 +-
providers/dbt/cloud/provider.yaml | 3 +-
providers/dbt/cloud/pyproject.toml | 8 +-
.../src/airflow/providers/dbt/cloud/__init__.py | 2 +-
providers/dingding/README.rst | 8 +-
providers/dingding/docs/changelog.rst | 11 +
providers/dingding/docs/index.rst | 8 +-
providers/dingding/provider.yaml | 3 +-
providers/dingding/pyproject.toml | 8 +-
.../src/airflow/providers/dingding/__init__.py | 2 +-
providers/discord/README.rst | 8 +-
providers/discord/docs/changelog.rst | 11 +
providers/discord/docs/index.rst | 8 +-
providers/discord/provider.yaml | 3 +-
providers/discord/pyproject.toml | 8 +-
.../src/airflow/providers/discord/__init__.py | 2 +-
providers/docker/README.rst | 8 +-
providers/docker/docs/changelog.rst | 16 +
providers/docker/docs/index.rst | 8 +-
providers/docker/provider.yaml | 3 +-
providers/docker/pyproject.toml | 8 +-
.../src/airflow/providers/docker/__init__.py | 2 +-
providers/edge3/README.rst | 14 +-
providers/edge3/docs/changelog.rst | 18 +
providers/edge3/docs/index.rst | 14 +-
providers/edge3/provider.yaml | 3 +-
providers/edge3/pyproject.toml | 8 +-
.../edge3/src/airflow/providers/edge3/__init__.py | 2 +-
providers/elasticsearch/README.rst | 8 +-
providers/elasticsearch/docs/changelog.rst | 11 +
providers/elasticsearch/docs/index.rst | 8 +-
providers/elasticsearch/provider.yaml | 3 +-
providers/elasticsearch/pyproject.toml | 8 +-
.../airflow/providers/elasticsearch/__init__.py | 2 +-
.../providers/elasticsearch/log/es_task_handler.py | 2 +-
providers/fab/README.rst | 8 +-
providers/fab/docs/auth-manager/access-control.rst | 2 +-
.../fab/docs/auth-manager/api-authentication.rst | 6 +-
providers/fab/docs/auth-manager/token.rst | 118 +-
providers/fab/docs/changelog.rst | 31 +
providers/fab/docs/index.rst | 8 +-
providers/fab/provider.yaml | 3 +-
providers/fab/pyproject.toml | 8 +-
.../fab/src/airflow/providers/fab/__init__.py | 2 +-
.../auth_manager/api_fastapi/datamodels/login.py | 7 -
.../openapi/v2-fab-auth-manager-generated.yaml | 22 +-
.../fab/auth_manager/api_fastapi/routes/login.py | 15 +-
.../fab/auth_manager/api_fastapi/services/login.py | 37 +-
.../providers/fab/auth_manager/fab_auth_manager.py | 27 +
...y => 0000_1_4_0_create_ab_tables_if_missing.py} | 0
.../auth_manager/api_fastapi/routes/test_login.py | 8 +-
.../api_fastapi/services/test_login.py | 62 +-
.../unit/fab/auth_manager/test_fab_auth_manager.py | 45 +-
providers/facebook/README.rst | 8 +-
providers/facebook/docs/changelog.rst | 11 +
providers/facebook/docs/index.rst | 8 +-
providers/facebook/provider.yaml | 3 +-
providers/facebook/pyproject.toml | 8 +-
.../src/airflow/providers/facebook/__init__.py | 2 +-
providers/git/README.rst | 8 +-
providers/git/docs/changelog.rst | 17 +
providers/git/docs/index.rst | 8 +-
providers/git/provider.yaml | 3 +-
providers/git/pyproject.toml | 8 +-
.../git/src/airflow/providers/git/__init__.py | 2 +-
providers/github/README.rst | 8 +-
providers/github/docs/changelog.rst | 11 +
providers/github/docs/index.rst | 8 +-
providers/github/provider.yaml | 3 +-
providers/github/pyproject.toml | 8 +-
.../src/airflow/providers/github/__init__.py | 2 +-
providers/google/README.rst | 8 +-
providers/google/docs/changelog.rst | 18 +
providers/google/docs/index.rst | 8 +-
providers/google/provider.yaml | 3 +-
providers/google/pyproject.toml | 8 +-
.../src/airflow/providers/google/__init__.py | 2 +-
.../cloud/composer/example_cloud_composer.py | 2 +-
providers/http/README.rst | 8 +-
providers/http/docs/changelog.rst | 16 +
providers/http/docs/index.rst | 8 +-
providers/http/provider.yaml | 3 +-
providers/http/pyproject.toml | 8 +-
.../http/src/airflow/providers/http/__init__.py | 2 +-
providers/imap/README.rst | 8 +-
providers/imap/docs/changelog.rst | 11 +
providers/imap/docs/index.rst | 8 +-
providers/imap/provider.yaml | 3 +-
providers/imap/pyproject.toml | 8 +-
.../imap/src/airflow/providers/imap/__init__.py | 2 +-
providers/jdbc/README.rst | 8 +-
providers/jdbc/docs/changelog.rst | 11 +
providers/jdbc/docs/index.rst | 8 +-
providers/jdbc/provider.yaml | 3 +-
providers/jdbc/pyproject.toml | 8 +-
.../jdbc/src/airflow/providers/jdbc/__init__.py | 2 +-
providers/jenkins/README.rst | 8 +-
providers/jenkins/docs/changelog.rst | 11 +
providers/jenkins/docs/index.rst | 8 +-
providers/jenkins/provider.yaml | 3 +-
providers/jenkins/pyproject.toml | 8 +-
.../src/airflow/providers/jenkins/__init__.py | 2 +-
providers/keycloak/README.rst | 38 +-
.../docs/auth-manager/manage/permissions.rst | 6 +-
providers/keycloak/docs/changelog.rst | 27 +
providers/keycloak/docs/index.rst | 43 +-
providers/keycloak/provider.yaml | 19 +-
providers/keycloak/pyproject.toml | 8 +-
.../src/airflow/providers/keycloak/__init__.py | 2 +-
.../keycloak/auth_manager/cli/commands.py | 227 +-
.../keycloak/auth_manager/cli/definition.py | 32 +-
.../providers/keycloak/auth_manager/cli/utils.py | 81 +
.../providers/keycloak/auth_manager/constants.py | 2 +
.../keycloak/auth_manager/keycloak_auth_manager.py | 39 +-
.../providers/keycloak/get_provider_info.py | 14 +
.../keycloak/auth_manager/cli/test_commands.py | 278 +-
.../keycloak/auth_manager/cli/test_definition.py | 85 +-
.../unit/keycloak/auth_manager/cli/test_utils.py | 61 +
.../auth_manager/test_keycloak_auth_manager.py | 74 +-
providers/microsoft/azure/README.rst | 8 +-
providers/microsoft/azure/docs/changelog.rst | 21 +
providers/microsoft/azure/docs/index.rst | 8 +-
providers/microsoft/azure/provider.yaml | 3 +-
providers/microsoft/azure/pyproject.toml | 8 +-
.../airflow/providers/microsoft/azure/__init__.py | 2 +-
.../providers/microsoft/azure/hooks/msgraph.py | 159 +-
.../providers/microsoft/azure/operators/msgraph.py | 21 +-
.../providers/microsoft/azure/triggers/msgraph.py | 2 +-
.../unit/microsoft/azure/hooks/test_msgraph.py | 99 +
providers/microsoft/psrp/README.rst | 8 +-
providers/microsoft/psrp/docs/changelog.rst | 11 +
providers/microsoft/psrp/docs/index.rst | 8 +-
providers/microsoft/psrp/provider.yaml | 3 +-
providers/microsoft/psrp/pyproject.toml | 8 +-
.../airflow/providers/microsoft/psrp/__init__.py | 2 +-
providers/microsoft/winrm/README.rst | 8 +-
providers/microsoft/winrm/docs/changelog.rst | 11 +
providers/microsoft/winrm/docs/index.rst | 8 +-
providers/microsoft/winrm/provider.yaml | 3 +-
providers/microsoft/winrm/pyproject.toml | 8 +-
.../airflow/providers/microsoft/winrm/__init__.py | 2 +-
providers/neo4j/README.rst | 8 +-
providers/neo4j/docs/changelog.rst | 11 +
providers/neo4j/docs/index.rst | 8 +-
providers/neo4j/provider.yaml | 3 +-
providers/neo4j/pyproject.toml | 8 +-
.../neo4j/src/airflow/providers/neo4j/__init__.py | 2 +-
providers/openai/README.rst | 8 +-
providers/openai/docs/changelog.rst | 11 +
providers/openai/docs/index.rst | 8 +-
providers/openai/provider.yaml | 3 +-
providers/openai/pyproject.toml | 8 +-
.../src/airflow/providers/openai/__init__.py | 2 +-
providers/openfaas/README.rst | 8 +-
providers/openfaas/docs/changelog.rst | 11 +
providers/openfaas/docs/index.rst | 8 +-
providers/openfaas/provider.yaml | 3 +-
providers/openfaas/pyproject.toml | 8 +-
.../src/airflow/providers/openfaas/__init__.py | 2 +-
providers/openlineage/README.rst | 8 +-
providers/openlineage/docs/changelog.rst | 15 +
providers/openlineage/docs/index.rst | 8 +-
providers/openlineage/provider.yaml | 3 +-
providers/openlineage/pyproject.toml | 8 +-
.../src/airflow/providers/openlineage/__init__.py | 2 +-
.../airflow/providers/openlineage/utils/utils.py | 2 +-
providers/opensearch/README.rst | 8 +-
providers/opensearch/docs/changelog.rst | 11 +
providers/opensearch/docs/index.rst | 8 +-
providers/opensearch/provider.yaml | 3 +-
providers/opensearch/pyproject.toml | 8 +-
.../src/airflow/providers/opensearch/__init__.py | 2 +-
.../providers/opensearch/log/os_task_handler.py | 2 +-
providers/pagerduty/README.rst | 8 +-
providers/pagerduty/docs/changelog.rst | 11 +
providers/pagerduty/docs/index.rst | 8 +-
providers/pagerduty/provider.yaml | 3 +-
providers/pagerduty/pyproject.toml | 8 +-
.../src/airflow/providers/pagerduty/__init__.py | 2 +-
providers/postgres/README.rst | 8 +-
providers/postgres/docs/changelog.rst | 11 +
providers/postgres/docs/index.rst | 8 +-
providers/postgres/provider.yaml | 3 +-
providers/postgres/pyproject.toml | 8 +-
.../src/airflow/providers/postgres/__init__.py | 2 +-
providers/presto/README.rst | 8 +-
providers/presto/docs/changelog.rst | 11 +
providers/presto/docs/index.rst | 8 +-
providers/presto/provider.yaml | 3 +-
providers/presto/pyproject.toml | 8 +-
.../src/airflow/providers/presto/__init__.py | 2 +-
providers/redis/README.rst | 8 +-
providers/redis/docs/changelog.rst | 16 +
providers/redis/docs/index.rst | 8 +-
providers/redis/provider.yaml | 3 +-
providers/redis/pyproject.toml | 8 +-
.../redis/src/airflow/providers/redis/__init__.py | 2 +-
providers/salesforce/README.rst | 8 +-
providers/salesforce/docs/changelog.rst | 11 +
providers/salesforce/docs/index.rst | 8 +-
providers/salesforce/provider.yaml | 3 +-
providers/salesforce/pyproject.toml | 8 +-
.../src/airflow/providers/salesforce/__init__.py | 2 +-
providers/samba/README.rst | 8 +-
providers/samba/docs/changelog.rst | 11 +
providers/samba/docs/index.rst | 8 +-
providers/samba/provider.yaml | 3 +-
providers/samba/pyproject.toml | 8 +-
.../samba/src/airflow/providers/samba/__init__.py | 2 +-
providers/segment/README.rst | 8 +-
providers/segment/docs/changelog.rst | 11 +
providers/segment/docs/index.rst | 8 +-
providers/segment/provider.yaml | 3 +-
providers/segment/pyproject.toml | 8 +-
.../src/airflow/providers/segment/__init__.py | 2 +-
providers/sftp/README.rst | 8 +-
providers/sftp/docs/changelog.rst | 16 +
providers/sftp/docs/index.rst | 8 +-
providers/sftp/provider.yaml | 3 +-
providers/sftp/pyproject.toml | 8 +-
.../sftp/src/airflow/providers/sftp/__init__.py | 2 +-
providers/singularity/README.rst | 8 +-
providers/singularity/docs/changelog.rst | 11 +
providers/singularity/docs/index.rst | 8 +-
providers/singularity/provider.yaml | 3 +-
providers/singularity/pyproject.toml | 8 +-
.../src/airflow/providers/singularity/__init__.py | 2 +-
providers/slack/README.rst | 8 +-
providers/slack/docs/changelog.rst | 11 +
providers/slack/docs/index.rst | 8 +-
providers/slack/provider.yaml | 3 +-
providers/slack/pyproject.toml | 8 +-
.../slack/src/airflow/providers/slack/__init__.py | 2 +-
providers/smtp/README.rst | 8 +-
providers/smtp/docs/changelog.rst | 11 +
providers/smtp/docs/index.rst | 8 +-
providers/smtp/provider.yaml | 3 +-
providers/smtp/pyproject.toml | 8 +-
.../smtp/src/airflow/providers/smtp/__init__.py | 2 +-
providers/snowflake/README.rst | 8 +-
providers/snowflake/docs/changelog.rst | 17 +
providers/snowflake/docs/index.rst | 8 +-
providers/snowflake/provider.yaml | 3 +-
providers/snowflake/pyproject.toml | 8 +-
.../src/airflow/providers/snowflake/__init__.py | 2 +-
providers/ssh/README.rst | 8 +-
providers/ssh/docs/changelog.rst | 11 +
providers/ssh/docs/index.rst | 8 +-
providers/ssh/provider.yaml | 3 +-
providers/ssh/pyproject.toml | 8 +-
.../ssh/src/airflow/providers/ssh/__init__.py | 2 +-
providers/standard/README.rst | 8 +-
providers/standard/docs/changelog.rst | 18 +
providers/standard/docs/index.rst | 8 +-
providers/standard/provider.yaml | 3 +-
providers/standard/pyproject.toml | 8 +-
.../src/airflow/providers/standard/__init__.py | 2 +-
providers/tableau/README.rst | 8 +-
providers/tableau/docs/changelog.rst | 11 +
providers/tableau/docs/index.rst | 8 +-
providers/tableau/provider.yaml | 3 +-
providers/tableau/pyproject.toml | 8 +-
.../src/airflow/providers/tableau/__init__.py | 2 +-
providers/telegram/README.rst | 8 +-
providers/telegram/docs/changelog.rst | 11 +
providers/telegram/docs/index.rst | 8 +-
providers/telegram/provider.yaml | 3 +-
providers/telegram/pyproject.toml | 8 +-
.../src/airflow/providers/telegram/__init__.py | 2 +-
providers/teradata/README.rst | 8 +-
providers/teradata/docs/changelog.rst | 11 +
providers/teradata/docs/index.rst | 8 +-
providers/teradata/provider.yaml | 3 +-
providers/teradata/pyproject.toml | 8 +-
.../src/airflow/providers/teradata/__init__.py | 2 +-
providers/trino/README.rst | 8 +-
providers/trino/docs/changelog.rst | 11 +
providers/trino/docs/index.rst | 8 +-
providers/trino/provider.yaml | 3 +-
providers/trino/pyproject.toml | 8 +-
.../trino/src/airflow/providers/trino/__init__.py | 2 +-
providers/ydb/README.rst | 36 +-
providers/ydb/docs/changelog.rst | 11 +
providers/ydb/docs/index.rst | 36 +-
providers/ydb/provider.yaml | 3 +-
providers/ydb/pyproject.toml | 8 +-
.../ydb/src/airflow/providers/ydb/__init__.py | 2 +-
pyproject.toml | 3 +
scripts/in_container/run_migration_reference.py | 2 +-
shared/configuration/pyproject.toml | 1 +
.../src/airflow_shared/configuration/parser.py | 2 +-
.../{timezones => module_loading}/pyproject.toml | 6 +-
.../src/airflow_shared/module_loading/__init__.py | 22 +
.../tests/conftest.py | 0
.../tests/module_loading}/__init__.py | 0
.../tests/module_loading}/test_module_loading.py | 20 +-
task-sdk-integration-tests/dags/test_asset_dag.py | 11 +-
.../tests/task_sdk_tests/conftest.py | 1 +
.../task_sdk_tests/test_asset_event_operations.py | 56 +-
.../task_sdk_tests/test_dag_run_operations.py | 4 +-
task-sdk/pyproject.toml | 6 +-
task-sdk/src/airflow/sdk/_shared/module_loading | 1 +
task-sdk/src/airflow/sdk/api/client.py | 11 +-
.../src/airflow/sdk/api/datamodels/_generated.py | 2 +-
task-sdk/src/airflow/sdk/configuration.py | 2 +-
task-sdk/src/airflow/sdk/definitions/callback.py | 2 +-
task-sdk/src/airflow/sdk/definitions/connection.py | 2 +-
task-sdk/src/airflow/sdk/definitions/dag.py | 2 +-
task-sdk/src/airflow/sdk/execution_time/comms.py | 102 +-
.../src/airflow/sdk/execution_time/supervisor.py | 21 +-
task-sdk/src/airflow/sdk/io/fs.py | 2 +-
task-sdk/src/airflow/sdk/io/store.py | 2 +-
task-sdk/src/airflow/sdk/module_loading.py | 71 +-
task-sdk/tests/task_sdk/api/test_client.py | 23 +-
.../tests/task_sdk/definitions/test_callback.py | 2 +-
.../tests/task_sdk/definitions/test_connection.py | 2 +-
.../task_sdk/definitions/test_module_loading.py | 23 -
.../tests/task_sdk/execution_time/test_context.py | 93 +-
.../tests/task_sdk/execution_time/test_sentry.py | 2 +-
.../task_sdk/execution_time/test_supervisor.py | 114 +-
task-sdk/tests/task_sdk/io/test_path.py | 2 +-
669 files changed, 9394 insertions(+), 4869 deletions(-)
copy .github/workflows/{airflow-e2e-tests.yml => ui-e2e-tests.yml} (68%)
create mode 120000 airflow-core/src/airflow/_shared/module_loading
copy
airflow-core/src/airflow/api_fastapi/execution_api/versions/{v2025_09_23.py =>
v2025_12_08.py} (59%)
create mode 100644
airflow-core/src/airflow/migrations/versions/0000_2_6_2_squashed_migrations.py
create mode 100644
airflow-core/src/airflow/migrations/versions/0094_3_2_0_remove_team_id.py
copy airflow-core/{src/airflow/_shared =>
tests/unit/api_fastapi/execution_api/versions/v2025_11_07}/__init__.py (100%)
create mode 100644
airflow-core/tests/unit/api_fastapi/execution_api/versions/v2025_11_07/test_dag_runs.py
delete mode 100644 airflow-core/tests/unit/utils/test_module_loading.py
create mode 100644 chart/newsfragments/52357.improvement.rst
create mode 100644 dev/breeze/src/airflow_breeze/utils/docker_compose_utils.py
copy airflow-core/tests/unit/listeners/lifecycle_listener.py =>
providers/common/compat/src/airflow/providers/common/compat/module_loading/__init__.py
(52%)
rename
providers/fab/src/airflow/providers/fab/migrations/versions/{0001_1_4_0_create_ab_tables_if_missing.py
=> 0000_1_4_0_create_ab_tables_if_missing.py} (100%)
create mode 100644
providers/keycloak/src/airflow/providers/keycloak/auth_manager/cli/utils.py
create mode 100644
providers/keycloak/tests/unit/keycloak/auth_manager/cli/test_utils.py
copy shared/{timezones => module_loading}/pyproject.toml (89%)
rename airflow-core/src/airflow/utils/module_loading.py =>
shared/module_loading/src/airflow_shared/module_loading/__init__.py (77%)
copy shared/{observability => module_loading}/tests/conftest.py (100%)
copy {airflow-core/src/airflow/api/common =>
shared/module_loading/tests/module_loading}/__init__.py (100%)
copy {task-sdk/tests/task_sdk/definitions =>
shared/module_loading/tests/module_loading}/test_module_loading.py (72%)
create mode 120000 task-sdk/src/airflow/sdk/_shared/module_loading