mirror of
https://github.com/apache/airflow.git
synced 2026-11-04 07:12:48 +00:00
* [main] CI: Upgrade important CI environment * Ignore pydantic-ai's generic OpenAI-compatible provider in vendor drift checks pydantic-ai-slim 2.63.0 adds a provider for any OpenAI-compatible endpoint. It needs a service name at construction and infer_model has no prefix for it, so a common.ai connection can never reach it and it is not a vendor the services page should list. Generated-by: Claude Opus 5 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jarek Potiuk <jarek@potiuk.com>
2136 lines
87 KiB
TOML
2136 lines
87 KiB
TOML
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
[build-system]
|
|
requires = [
|
|
"hatchling==1.33.0",
|
|
"packaging==26.3",
|
|
"pathspec==1.1.1",
|
|
"pluggy==1.7.0",
|
|
"tomlkit==0.15.2",
|
|
"trove-classifiers==2026.9.21.13",
|
|
]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "apache-airflow"
|
|
description = "Programmatically author, schedule and monitor data pipelines"
|
|
readme = { file = "generated/PYPI_README.md", content-type = "text/markdown" }
|
|
license = "Apache-2.0"
|
|
license-files = ["LICENSE", "NOTICE"]
|
|
requires-python = ">=3.11,!=3.15"
|
|
authors = [
|
|
{ name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
|
|
]
|
|
maintainers = [
|
|
{ name = "Apache Software Foundation", email="dev@airflow.apache.org" },
|
|
]
|
|
keywords = [ "airflow", "orchestration", "workflow", "dag", "pipelines", "automation", "data" ]
|
|
classifiers = [
|
|
"Development Status :: 5 - Production/Stable",
|
|
"Environment :: Console",
|
|
"Environment :: Web Environment",
|
|
"Framework :: Apache Airflow",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: System Administrators",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Programming Language :: Python :: 3.14",
|
|
"Topic :: System :: Monitoring",
|
|
]
|
|
|
|
# Version is defined in src/airflow/__init__.py and it is automatically synchronized by prek
|
|
version = "3.4.0"
|
|
|
|
dependencies = [
|
|
"apache-airflow-task-sdk<1.5.0,>=1.4.0",
|
|
"apache-airflow-core==3.4.0",
|
|
]
|
|
|
|
packages = []
|
|
|
|
[project.scripts]
|
|
# Definition allowing direct execution via `uvx apache-airflow ...`
|
|
apache-airflow = "airflow.__main__:main"
|
|
|
|
[project.optional-dependencies]
|
|
# Automatically generated airflow optional dependencies (update_airflow_pyproject_toml.py)
|
|
"all-core" = [
|
|
"apache-airflow-core[all]"
|
|
]
|
|
"async" = [
|
|
"apache-airflow-core[async]"
|
|
]
|
|
"graphviz" = [
|
|
"apache-airflow-core[graphviz]"
|
|
]
|
|
"gunicorn" = [
|
|
"apache-airflow-core[gunicorn]"
|
|
]
|
|
"kerberos" = [
|
|
"apache-airflow-core[kerberos]"
|
|
]
|
|
"memray" = [
|
|
"apache-airflow-core[memray]"
|
|
]
|
|
"otel" = [
|
|
"apache-airflow-core[otel]"
|
|
]
|
|
"statsd" = [
|
|
"apache-airflow-core[statsd]"
|
|
]
|
|
"all-task-sdk" = [
|
|
"apache-airflow-task-sdk[all]"
|
|
]
|
|
"airbyte" = [
|
|
"apache-airflow-providers-airbyte>=5.0.0"
|
|
]
|
|
"akeyless" = [
|
|
"apache-airflow-providers-akeyless>=0.1.0"
|
|
]
|
|
"alibaba" = [
|
|
"apache-airflow-providers-alibaba>=3.0.0"
|
|
]
|
|
"amazon" = [
|
|
"apache-airflow-providers-amazon>=9.0.0"
|
|
]
|
|
"anthropic" = [
|
|
"apache-airflow-providers-anthropic>=0.1.0"
|
|
]
|
|
"apache.arrow" = [
|
|
"apache-airflow-providers-apache-arrow>=0.1.0"
|
|
]
|
|
"apache.beam" = [
|
|
"apache-airflow-providers-apache-beam>=5.8.1"
|
|
]
|
|
"apache.cassandra" = [
|
|
"apache-airflow-providers-apache-cassandra>=3.7.0; python_version !=\"3.14\""
|
|
]
|
|
"apache.drill" = [
|
|
"apache-airflow-providers-apache-drill>=2.8.1"
|
|
]
|
|
"apache.druid" = [
|
|
"apache-airflow-providers-apache-druid>=3.12.0"
|
|
]
|
|
"apache.flink" = [
|
|
"apache-airflow-providers-apache-flink>=1.6.0"
|
|
]
|
|
"apache.hdfs" = [
|
|
"apache-airflow-providers-apache-hdfs>=4.6.0"
|
|
]
|
|
"apache.hive" = [
|
|
"apache-airflow-providers-apache-hive>=8.2.1"
|
|
]
|
|
"apache.iceberg" = [
|
|
"apache-airflow-providers-apache-iceberg>=1.2.0"
|
|
]
|
|
"apache.impala" = [
|
|
"apache-airflow-providers-apache-impala>=1.5.2"
|
|
]
|
|
"apache.kafka" = [
|
|
"apache-airflow-providers-apache-kafka>=1.6.1"
|
|
]
|
|
"apache.kylin" = [
|
|
"apache-airflow-providers-apache-kylin>=3.8.0"
|
|
]
|
|
"apache.livy" = [
|
|
"apache-airflow-providers-apache-livy>=3.9.2"
|
|
]
|
|
"apache.pig" = [
|
|
"apache-airflow-providers-apache-pig>=4.6.0"
|
|
]
|
|
"apache.pinot" = [
|
|
"apache-airflow-providers-apache-pinot>=4.5.1"
|
|
]
|
|
"apache.spark" = [
|
|
"apache-airflow-providers-apache-spark>=4.11.1"
|
|
]
|
|
"apache.tinkerpop" = [
|
|
"apache-airflow-providers-apache-tinkerpop>=1.0.0; python_version !=\"3.14\""
|
|
]
|
|
"apprise" = [
|
|
"apache-airflow-providers-apprise>=1.4.1"
|
|
]
|
|
"arangodb" = [
|
|
"apache-airflow-providers-arangodb>=2.7.0"
|
|
]
|
|
"asana" = [
|
|
"apache-airflow-providers-asana>=2.7.0"
|
|
]
|
|
"atlassian.jira" = [
|
|
"apache-airflow-providers-atlassian-jira>=2.7.1"
|
|
]
|
|
"celery" = [
|
|
"apache-airflow-providers-celery>=3.8.3"
|
|
]
|
|
"clickhousedb" = [
|
|
"apache-airflow-providers-clickhousedb>=1.0.0"
|
|
]
|
|
"cloudant" = [
|
|
"apache-airflow-providers-cloudant>=4.0.1"
|
|
]
|
|
"cncf.kubernetes" = [
|
|
"apache-airflow-providers-cncf-kubernetes>=9.0.0"
|
|
]
|
|
"cohere" = [
|
|
"apache-airflow-providers-cohere>=1.4.0"
|
|
]
|
|
"common.ai" = [
|
|
"apache-airflow-providers-common-ai>=0.1.0"
|
|
]
|
|
"common.compat" = [
|
|
"apache-airflow-providers-common-compat>=1.2.1"
|
|
]
|
|
"common.io" = [
|
|
"apache-airflow-providers-common-io>=1.4.2"
|
|
]
|
|
"common.messaging" = [
|
|
"apache-airflow-providers-common-messaging>=2.0.0" # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
]
|
|
"common.sql" = [
|
|
"apache-airflow-providers-common-sql>=1.18.0"
|
|
]
|
|
"databricks" = [
|
|
"apache-airflow-providers-databricks>=6.11.0"
|
|
]
|
|
"datadog" = [
|
|
"apache-airflow-providers-datadog>=3.8.0"
|
|
]
|
|
"dbt.cloud" = [
|
|
"apache-airflow-providers-dbt-cloud>=3.11.0"
|
|
]
|
|
"dingding" = [
|
|
"apache-airflow-providers-dingding>=3.7.0"
|
|
]
|
|
"discord" = [
|
|
"apache-airflow-providers-discord>=3.9.0"
|
|
]
|
|
"docker" = [
|
|
"apache-airflow-providers-docker>=3.14.1"
|
|
]
|
|
"duckdb" = [
|
|
"apache-airflow-providers-duckdb>=0.2.0"
|
|
]
|
|
"edge3" = [
|
|
"apache-airflow-providers-edge3>=1.0.0"
|
|
]
|
|
"elasticsearch" = [
|
|
"apache-airflow-providers-elasticsearch>=6.6.0" # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
]
|
|
"exasol" = [
|
|
"apache-airflow-providers-exasol>=4.6.1"
|
|
]
|
|
"fab" = [
|
|
"apache-airflow-providers-fab>=3.6.0" # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
]
|
|
"facebook" = [
|
|
"apache-airflow-providers-facebook>=3.7.0"
|
|
]
|
|
"ftp" = [
|
|
"apache-airflow-providers-ftp>=3.12.0"
|
|
]
|
|
"git" = [
|
|
"apache-airflow-providers-git>=0.0.2" # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
]
|
|
"github" = [
|
|
"apache-airflow-providers-github>=2.8.0"
|
|
]
|
|
"google" = [
|
|
"apache-airflow-providers-google>=10.24.0"
|
|
]
|
|
"grpc" = [
|
|
"apache-airflow-providers-grpc>=3.7.0"
|
|
]
|
|
"hashicorp" = [
|
|
"apache-airflow-providers-hashicorp>=4.0.0"
|
|
]
|
|
"http" = [
|
|
"apache-airflow-providers-http>=4.13.2"
|
|
]
|
|
"ibm.db2" = [
|
|
"apache-airflow-providers-ibm-db2>=0.1.0; platform_machine !=\"aarch64\""
|
|
]
|
|
"ibm.mq" = [
|
|
"apache-airflow-providers-ibm-mq>=0.1.0; platform_machine !=\"aarch64\" and platform_machine !=\"arm64\""
|
|
]
|
|
"imap" = [
|
|
"apache-airflow-providers-imap>=3.8.0"
|
|
]
|
|
"influxdb" = [
|
|
"apache-airflow-providers-influxdb>=2.8.0"
|
|
]
|
|
"informatica" = [
|
|
"apache-airflow-providers-informatica>=0.1.1"
|
|
]
|
|
"jdbc" = [
|
|
"apache-airflow-providers-jdbc>=4.5.2"
|
|
]
|
|
"jenkins" = [
|
|
"apache-airflow-providers-jenkins>=3.7.2"
|
|
]
|
|
"keycloak" = [
|
|
"apache-airflow-providers-keycloak>=0.0.1"
|
|
]
|
|
"microsoft.azure" = [
|
|
"apache-airflow-providers-microsoft-azure>=10.5.1"
|
|
]
|
|
"microsoft.mssql" = [
|
|
"apache-airflow-providers-microsoft-mssql>=3.9.2"
|
|
]
|
|
"microsoft.psrp" = [
|
|
"apache-airflow-providers-microsoft-psrp>=3.0.0"
|
|
]
|
|
"microsoft.winrm" = [
|
|
"apache-airflow-providers-microsoft-winrm>=3.6.1"
|
|
]
|
|
"modal" = [
|
|
"apache-airflow-providers-modal>=0.1.0"
|
|
]
|
|
"mongo" = [
|
|
"apache-airflow-providers-mongo>=4.2.2"
|
|
]
|
|
"mysql" = [
|
|
"apache-airflow-providers-mysql>=5.7.2"
|
|
]
|
|
"neo4j" = [
|
|
"apache-airflow-providers-neo4j>=3.8.0"
|
|
]
|
|
"odbc" = [
|
|
"apache-airflow-providers-odbc>=4.8.0"
|
|
]
|
|
"openai" = [
|
|
"apache-airflow-providers-openai>=1.5.0"
|
|
]
|
|
"openfaas" = [
|
|
"apache-airflow-providers-openfaas>=3.7.0"
|
|
]
|
|
"openlineage" = [
|
|
"apache-airflow-providers-openlineage>=2.3.0" # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
]
|
|
"opensearch" = [
|
|
"apache-airflow-providers-opensearch>=1.9.3" # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
]
|
|
"opsgenie" = [
|
|
"apache-airflow-providers-opsgenie>=5.8.0"
|
|
]
|
|
"oracle" = [
|
|
"apache-airflow-providers-oracle>=3.12.0"
|
|
]
|
|
"pagerduty" = [
|
|
"apache-airflow-providers-pagerduty>=3.8.1"
|
|
]
|
|
"papermill" = [
|
|
"apache-airflow-providers-papermill>=3.8.2"
|
|
]
|
|
"pgvector" = [
|
|
"apache-airflow-providers-pgvector>=1.4.0"
|
|
]
|
|
"pinecone" = [
|
|
"apache-airflow-providers-pinecone>=2.1.1"
|
|
]
|
|
"postgres" = [
|
|
"apache-airflow-providers-postgres>=5.13.1"
|
|
]
|
|
"presto" = [
|
|
"apache-airflow-providers-presto>=5.7.0"
|
|
]
|
|
"qdrant" = [
|
|
"apache-airflow-providers-qdrant>=1.3.0"
|
|
]
|
|
"redis" = [
|
|
"apache-airflow-providers-redis>=4.0.0"
|
|
]
|
|
"salesforce" = [
|
|
"apache-airflow-providers-salesforce>=5.9.0"
|
|
]
|
|
"samba" = [
|
|
"apache-airflow-providers-samba>=4.9.0"
|
|
]
|
|
"segment" = [
|
|
"apache-airflow-providers-segment>=3.7.0"
|
|
]
|
|
"sendgrid" = [
|
|
"apache-airflow-providers-sendgrid>=4.0.0"
|
|
]
|
|
"sftp" = [
|
|
"apache-airflow-providers-sftp>=5.0.0"
|
|
]
|
|
"singularity" = [
|
|
"apache-airflow-providers-singularity>=3.7.0"
|
|
]
|
|
"slack" = [
|
|
"apache-airflow-providers-slack>=8.9.1"
|
|
]
|
|
"smtp" = [
|
|
"apache-airflow-providers-smtp>=1.8.1"
|
|
]
|
|
"snowflake" = [
|
|
"apache-airflow-providers-snowflake>=5.8.0"
|
|
]
|
|
"sqlite" = [
|
|
"apache-airflow-providers-sqlite>=3.9.1"
|
|
]
|
|
"ssh" = [
|
|
"apache-airflow-providers-ssh>=3.14.0"
|
|
]
|
|
"standard" = [
|
|
"apache-airflow-providers-standard>=0.0.1"
|
|
]
|
|
"tableau" = [
|
|
"apache-airflow-providers-tableau>=5.0.0"
|
|
]
|
|
"telegram" = [
|
|
"apache-airflow-providers-telegram>=4.7.0"
|
|
]
|
|
"teradata" = [
|
|
"apache-airflow-providers-teradata>=2.6.1"
|
|
]
|
|
"trino" = [
|
|
"apache-airflow-providers-trino>=5.8.1"
|
|
]
|
|
"vertica" = [
|
|
"apache-airflow-providers-vertica>=3.9.1"
|
|
]
|
|
"vespa" = [
|
|
"apache-airflow-providers-vespa>=0.1.0"
|
|
]
|
|
"weaviate" = [
|
|
"apache-airflow-providers-weaviate>=3.0.0"
|
|
]
|
|
"yandex" = [
|
|
"apache-airflow-providers-yandex>=4.0.0"
|
|
]
|
|
"ydb" = [
|
|
"apache-airflow-providers-ydb>=1.4.0"
|
|
]
|
|
"zendesk" = [
|
|
"apache-airflow-providers-zendesk>=4.9.0"
|
|
]
|
|
"all" = [
|
|
"apache-airflow[aiobotocore,amazon-aws-auth,apache-atlas,apache-webhdfs,async,cloudpickle,fab-oauth,github-enterprise,google-auth,graphviz,gunicorn,kerberos,ldap,memray,otel,pandas,polars,rabbitmq,s3fs,sentry,statsd,uv]",
|
|
"apache-airflow-core[all]",
|
|
"apache-airflow-providers-airbyte>=5.0.0",
|
|
"apache-airflow-providers-akeyless>=0.1.0",
|
|
"apache-airflow-providers-alibaba>=3.0.0",
|
|
"apache-airflow-providers-amazon>=9.0.0",
|
|
"apache-airflow-providers-anthropic>=0.1.0",
|
|
"apache-airflow-providers-apache-arrow>=0.1.0",
|
|
"apache-airflow-providers-apache-beam>=5.8.1",
|
|
"apache-airflow-providers-apache-cassandra>=3.7.0; python_version !=\"3.14\"",
|
|
"apache-airflow-providers-apache-drill>=2.8.1",
|
|
"apache-airflow-providers-apache-druid>=3.12.0",
|
|
"apache-airflow-providers-apache-flink>=1.6.0",
|
|
"apache-airflow-providers-apache-hdfs>=4.6.0",
|
|
"apache-airflow-providers-apache-hive>=8.2.1",
|
|
"apache-airflow-providers-apache-iceberg>=1.2.0",
|
|
"apache-airflow-providers-apache-impala>=1.5.2",
|
|
"apache-airflow-providers-apache-kafka>=1.6.1",
|
|
"apache-airflow-providers-apache-kylin>=3.8.0",
|
|
"apache-airflow-providers-apache-livy>=3.9.2",
|
|
"apache-airflow-providers-apache-pig>=4.6.0",
|
|
"apache-airflow-providers-apache-pinot>=4.5.1",
|
|
"apache-airflow-providers-apache-spark>=4.11.1",
|
|
"apache-airflow-providers-apache-tinkerpop>=1.0.0; python_version !=\"3.14\"",
|
|
"apache-airflow-providers-apprise>=1.4.1",
|
|
"apache-airflow-providers-arangodb>=2.7.0",
|
|
"apache-airflow-providers-asana>=2.7.0",
|
|
"apache-airflow-providers-atlassian-jira>=2.7.1",
|
|
"apache-airflow-providers-celery>=3.8.3",
|
|
"apache-airflow-providers-clickhousedb>=1.0.0",
|
|
"apache-airflow-providers-cloudant>=4.0.1",
|
|
"apache-airflow-providers-cncf-kubernetes>=9.0.0",
|
|
"apache-airflow-providers-cohere>=1.4.0",
|
|
"apache-airflow-providers-common-ai>=0.1.0",
|
|
"apache-airflow-providers-common-compat>=1.2.1",
|
|
"apache-airflow-providers-common-io>=1.4.2",
|
|
"apache-airflow-providers-common-messaging>=2.0.0", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
"apache-airflow-providers-common-sql>=1.18.0",
|
|
"apache-airflow-providers-databricks>=6.11.0",
|
|
"apache-airflow-providers-datadog>=3.8.0",
|
|
"apache-airflow-providers-dbt-cloud>=3.11.0",
|
|
"apache-airflow-providers-dingding>=3.7.0",
|
|
"apache-airflow-providers-discord>=3.9.0",
|
|
"apache-airflow-providers-docker>=3.14.1",
|
|
"apache-airflow-providers-duckdb>=0.2.0",
|
|
"apache-airflow-providers-edge3>=1.0.0",
|
|
"apache-airflow-providers-elasticsearch>=6.6.0", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
"apache-airflow-providers-exasol>=4.6.1",
|
|
"apache-airflow-providers-fab>=3.6.0", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
"apache-airflow-providers-facebook>=3.7.0",
|
|
"apache-airflow-providers-ftp>=3.12.0",
|
|
"apache-airflow-providers-git>=0.0.2", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
"apache-airflow-providers-github>=2.8.0",
|
|
"apache-airflow-providers-google>=10.24.0",
|
|
"apache-airflow-providers-grpc>=3.7.0",
|
|
"apache-airflow-providers-hashicorp>=4.0.0",
|
|
"apache-airflow-providers-http>=4.13.2",
|
|
"apache-airflow-providers-ibm-db2>=0.1.0; platform_machine !=\"aarch64\"",
|
|
"apache-airflow-providers-ibm-mq>=0.1.0; platform_machine !=\"aarch64\" and platform_machine !=\"arm64\"",
|
|
"apache-airflow-providers-imap>=3.8.0",
|
|
"apache-airflow-providers-influxdb>=2.8.0",
|
|
"apache-airflow-providers-informatica>=0.1.1",
|
|
"apache-airflow-providers-jdbc>=4.5.2",
|
|
"apache-airflow-providers-jenkins>=3.7.2",
|
|
"apache-airflow-providers-keycloak>=0.0.1",
|
|
"apache-airflow-providers-microsoft-azure>=10.5.1",
|
|
"apache-airflow-providers-microsoft-mssql>=3.9.2",
|
|
"apache-airflow-providers-microsoft-psrp>=3.0.0",
|
|
"apache-airflow-providers-microsoft-winrm>=3.6.1",
|
|
"apache-airflow-providers-modal>=0.1.0",
|
|
"apache-airflow-providers-mongo>=4.2.2",
|
|
"apache-airflow-providers-mysql>=5.7.2",
|
|
"apache-airflow-providers-neo4j>=3.8.0",
|
|
"apache-airflow-providers-odbc>=4.8.0",
|
|
"apache-airflow-providers-openai>=1.5.0",
|
|
"apache-airflow-providers-openfaas>=3.7.0",
|
|
"apache-airflow-providers-openlineage>=2.3.0", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
"apache-airflow-providers-opensearch>=1.9.3", # Set from MIN_VERSION_OVERRIDE in update_airflow_pyproject_toml.py
|
|
"apache-airflow-providers-opsgenie>=5.8.0",
|
|
"apache-airflow-providers-oracle>=3.12.0",
|
|
"apache-airflow-providers-pagerduty>=3.8.1",
|
|
"apache-airflow-providers-papermill>=3.8.2",
|
|
"apache-airflow-providers-pgvector>=1.4.0",
|
|
"apache-airflow-providers-pinecone>=2.1.1",
|
|
"apache-airflow-providers-postgres>=5.13.1",
|
|
"apache-airflow-providers-presto>=5.7.0",
|
|
"apache-airflow-providers-qdrant>=1.3.0",
|
|
"apache-airflow-providers-redis>=4.0.0",
|
|
"apache-airflow-providers-salesforce>=5.9.0",
|
|
"apache-airflow-providers-samba>=4.9.0",
|
|
"apache-airflow-providers-segment>=3.7.0",
|
|
"apache-airflow-providers-sendgrid>=4.0.0",
|
|
"apache-airflow-providers-sftp>=5.0.0",
|
|
"apache-airflow-providers-singularity>=3.7.0",
|
|
"apache-airflow-providers-slack>=8.9.1",
|
|
"apache-airflow-providers-smtp>=1.8.1",
|
|
"apache-airflow-providers-snowflake>=5.8.0",
|
|
"apache-airflow-providers-sqlite>=3.9.1",
|
|
"apache-airflow-providers-ssh>=3.14.0",
|
|
"apache-airflow-providers-standard>=0.0.1",
|
|
"apache-airflow-providers-tableau>=5.0.0",
|
|
"apache-airflow-providers-telegram>=4.7.0",
|
|
"apache-airflow-providers-teradata>=2.6.1",
|
|
"apache-airflow-providers-trino>=5.8.1",
|
|
"apache-airflow-providers-vertica>=3.9.1",
|
|
"apache-airflow-providers-vespa>=0.1.0",
|
|
"apache-airflow-providers-weaviate>=3.0.0",
|
|
"apache-airflow-providers-yandex>=4.0.0",
|
|
"apache-airflow-providers-ydb>=1.4.0",
|
|
"apache-airflow-providers-zendesk>=4.9.0",
|
|
]
|
|
# End of automatically generated airflow optional dependencies
|
|
# Aiobotocore required for AWS deferrable operators.
|
|
# There is conflict between boto3 and aiobotocore dependency botocore.
|
|
# TODO: We can remove it once boto3 and aiobotocore both have compatible botocore version or
|
|
# boto3 have native aync support and we move away from aio aiobotocore
|
|
"aiobotocore" = [
|
|
"apache-airflow-providers-amazon[aiobotocore]>=9.6.0",
|
|
]
|
|
"apache-atlas" = [
|
|
"atlasclient>=0.1.2",
|
|
]
|
|
"apache-webhdfs" = [
|
|
"apache-airflow-providers-apache-hdfs",
|
|
]
|
|
"amazon-aws-auth" = [
|
|
"apache-airflow-providers-amazon[python3-saml]",
|
|
]
|
|
"cloudpickle" = [
|
|
# Remove this cap once snowflake-snowpark-python relaxes its own cloudpickle pin;
|
|
# tracked at https://github.com/apache/airflow/issues/70084
|
|
"cloudpickle>=2.2.1,<3.1.2",
|
|
]
|
|
"fab-oauth" = [
|
|
"apache-airflow-providers-fab[oauth]",
|
|
]
|
|
"github-enterprise" = [
|
|
"apache-airflow-providers-fab[oauth]",
|
|
]
|
|
"google-auth" = [
|
|
"apache-airflow-providers-fab[oauth]",
|
|
]
|
|
"ldap" = [
|
|
"python-ldap>=3.4.4",
|
|
]
|
|
"pandas" = [
|
|
"apache-airflow-providers-common-sql[pandas]",
|
|
]
|
|
"polars" = [
|
|
"apache-airflow-providers-common-sql[polars]",
|
|
]
|
|
"rabbitmq" = [
|
|
"amqp>=5.2.0",
|
|
]
|
|
"sentry" = [
|
|
"sentry-sdk>=2.30.0",
|
|
]
|
|
"s3fs" = [
|
|
# This is required for support of S3 file system which uses aiobotocore
|
|
# which can have a conflict with boto3 as mentioned in aiobotocore extra
|
|
"apache-airflow-providers-amazon[s3fs]",
|
|
]
|
|
"uv" = [
|
|
"uv>=0.13.6",
|
|
]
|
|
|
|
[project.urls]
|
|
"Bug Tracker" = "https://github.com/apache/airflow/issues"
|
|
Documentation = "https://airflow.apache.org/docs/"
|
|
Downloads = "https://archive.apache.org/dist/airflow/"
|
|
Homepage = "https://airflow.apache.org/"
|
|
"Release Notes" = "https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html"
|
|
"Slack Chat" = "https://s.apache.org/airflow-slack"
|
|
"Source Code" = "https://github.com/apache/airflow"
|
|
LinkedIn = "https://www.linkedin.com/company/apache-airflow/"
|
|
Mastodon = "https://fosstodon.org/@airflow"
|
|
Bluesky = "https://bsky.app/profile/apache-airflow.bsky.social"
|
|
YouTube = "https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/"
|
|
|
|
[tool.hatch.build]
|
|
# Prune .gitignore'd directories (node_modules, .venv, ...) during the file walk instead of only
|
|
# filtering their files: an editable build of this root package otherwise descends into
|
|
# ts-sdk/node_modules and crashes with FileNotFoundError when a concurrent `pnpm install`
|
|
# (ts-sdk prek hooks run alongside root ones) swaps the pnpm symlinks under it.
|
|
skip-excluded-dirs = true
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
exclude = ["*"]
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
bypass-selection = true
|
|
|
|
## black settings ##
|
|
# Used to format code examples inside .rst doc files
|
|
# Needed until https://github.com/astral-sh/ruff/issues/8237 is available.
|
|
[tool.black]
|
|
line-length = 110
|
|
|
|
## ruff settings ##
|
|
[tool.ruff]
|
|
line-length = 110
|
|
extend-exclude = [
|
|
".eggs",
|
|
"*/_vendor/*",
|
|
"airflow-core/tests/unit/dags/test_imports.py",
|
|
]
|
|
|
|
[tool.ruff.lint]
|
|
typing-modules = ["airflow.typing_compat"]
|
|
external = ["MIG"]
|
|
# Pin the base rule set instead of inheriting Ruff's default, which Ruff changes
|
|
# between releases (0.16 widened it from ~250 to ~510 rules). Everything Airflow
|
|
# actually opts into lives in extend-select below.
|
|
select = ["E4", "E7", "E9", "F"]
|
|
extend-select = [
|
|
# Enable entire ruff rule section
|
|
"I", # Missing required import (auto-fixable)
|
|
"UP", # Pyupgrade
|
|
"ASYNC", # subset of flake8-async rules
|
|
"ISC", # Checks for implicit literal string concatenation (auto-fixable)
|
|
"TC", # Rules around TYPE_CHECKING blocks
|
|
"G", # flake8-logging-format rules
|
|
"LOG", # flake8-logging rules, most of them autofixable
|
|
"PT", # flake8-pytest-style rules
|
|
"B015", # Useless comparison: bare `a == b` is a no-op; prepend `assert` or remove
|
|
"TID25", # flake8-tidy-imports rules
|
|
"E", # pycodestyle rules
|
|
"W", # pycodestyle rules
|
|
# Warning (PLW) re-implemented in ruff from Pylint
|
|
"PLW0120", # else clause on loop without a break statement; remove the else and dedent its contents
|
|
"PLW0127", # Self-assignment of variable
|
|
"PLW0128", # Redeclared variable {name} in assignment
|
|
"PLW0129", # Asserting on an empty string literal will never pass
|
|
"PLW0131", # Named expression used without context
|
|
"PLW0133", # Missing raise statement on exception
|
|
"PLW0177", # Comparing against a NaN value; use math.isnan instead
|
|
"PLW0211", # First argument of a static method should not be named {argument_name}
|
|
"PLW0245", # super call is missing parentheses
|
|
"PLW0406", # Module {name} imports itself
|
|
"PLW0602", # Using global for {name} but no assignment is done
|
|
"PLW0604", # global at module level is redundant
|
|
"PLW0642", # Reassigned {} variable in {method_type} method
|
|
"PLW0711", # Exception to catch is the result of a binary and operation
|
|
"PLW1501", # {mode} is not a valid mode for open
|
|
"PLW1507", # Shallow copy of os.environ via copy.copy(os.environ)
|
|
"PLW1508", # Invalid type for environment variable default; expected str or None
|
|
"PLW1509", # preexec_fn argument is unsafe when using threads
|
|
"PLW1510", # subprocess.run without explicit check argument
|
|
"PLW1641", # Object does not implement __hash__ method
|
|
"PLW2101", # Threading lock directly created in with statement has no effect
|
|
"PLW2901", # Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target
|
|
"PLW3301", # Nested {func} calls can be flattened
|
|
"PLE1205", # Logging format string has too many arguments (extra args are silently dropped)
|
|
# Per rule enables
|
|
"RUF006", # Checks for asyncio dangling task
|
|
"RUF015", # Checks for unnecessary iterable allocation for first element
|
|
"RUF019", # Checks for unnecessary key check
|
|
"RUF100", # Unused noqa (auto-fixable)
|
|
# We ignore more pydocstyle than we enable, so be more selective at what we enable
|
|
"D1",
|
|
"D2",
|
|
"D213", # Conflicts with D212. Both can not be enabled.
|
|
"D3",
|
|
"D400",
|
|
"D401",
|
|
"D402",
|
|
"D403",
|
|
"D412",
|
|
"D419",
|
|
"PGH004", # Use specific rule codes when using noqa
|
|
"PGH005", # Invalid unittest.mock.Mock methods/attributes/properties
|
|
"S101", # Checks use `assert` outside the test cases, test cases should be added into the exclusions
|
|
"SIM107", # Don't use `return` in `try`-`except` and `finally`
|
|
"SIM300", # Checks for conditions that position a constant on the left-hand side of the comparison
|
|
# operator, rather than the right-hand side.
|
|
"B004", # Checks for use of hasattr(x, "__call__") and replaces it with callable(x)
|
|
"B006", # Checks for uses of mutable objects as function argument defaults.
|
|
"B007", # Checks for unused variables in the loop
|
|
"B008", # Do not perform function call in argument defaults (use extend-immutable-calls for FastAPI DI)
|
|
"B012", # Checks for `break`, `continue`, and `return` statements in `finally` blocks
|
|
"B017", # Checks for pytest.raises context managers that catch Exception or BaseException.
|
|
"B019", # Use of functools.lru_cache or functools.cache on methods can lead to memory leaks
|
|
"B023", # Function definition does not bind loop variable (late binding of closure over loop var)
|
|
"B028", # No explicit stacklevel keyword argument found
|
|
"TRY002", # Prohibit use of `raise Exception`, use specific exceptions instead.
|
|
"RET505", # Unnecessary {branch} after return statement
|
|
"RET506", # Unnecessary {branch} after raise statement
|
|
"RET507", # Unnecessary {branch} after continue statement
|
|
"RET508", # Unnecessary {branch} after break statement
|
|
"SIM105", # Use contextlib.suppress({exception}) instead of try-except-pass
|
|
"PTH206", # Checks for uses of .split(os.sep)
|
|
]
|
|
ignore = [
|
|
"D100", # Unwanted; Docstring at the top of every file.
|
|
"D102", # Unwanted; Missing docstring in public method
|
|
"D103", # Unwanted; Missing docstring in public function
|
|
"D104", # Unwanted; Docstring at the top of every `__init__.py` file.
|
|
"D105", # Unwanted; See https://lists.apache.org/thread/8jbg1dd2lr2cfydtqbjxsd6pb6q2wkc3
|
|
"D107", # Unwanted; Docstring in every constructor is unnecessary if the class has a docstring.
|
|
"D203", # Conflicts with D211. Both can not be enabled.
|
|
"D212", # Conflicts with D213. Both can not be enabled.
|
|
"E731", # Do not assign a lambda expression, use a def
|
|
"TC003", # Do not move imports from stdlib to TYPE_CHECKING block
|
|
"PT007", # Wrong type of values in @pytest.mark.parametrize
|
|
"PT013", # silly rule prohibiting e.g. `from pytest import param`
|
|
"PT019", # fixture without value is injected as parameter, use @pytest.mark.usefixtures instead
|
|
# Rules below explicitly set off which could overlap with Ruff's formatter
|
|
# as it recommended by https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
|
|
# Except ISC rules
|
|
"W191",
|
|
"E111",
|
|
"E114",
|
|
"E117",
|
|
"D206",
|
|
"D300",
|
|
"Q000",
|
|
"Q001",
|
|
"Q002",
|
|
"Q003",
|
|
"COM812",
|
|
"COM819",
|
|
"E501", # Formatted code may exceed the line length, leading to line-too-long (E501) errors.
|
|
# New in Ruff 0.16, inside sections Airflow selects wholesale. Deferred so a tooling
|
|
# bump does not also carry semantic changes; both need per-site judgement.
|
|
"ISC004", # Implicit string concat in a collection literal; 109 sites, unsafe autofix
|
|
# LOG004 is not a mechanical replacement: switching to `.error()` where an exception is
|
|
# in flight silently drops the traceback, while leaving `.exception()` where none is
|
|
# only prints a bare `NoneType: None`. Review already caught one bad guess in 13.
|
|
"LOG004", # `.exception()` outside an exception handler; 13 sites
|
|
# Both became reportable once the baseline moved to Python 3.11. Neither is a mechanical
|
|
# change: StrEnum alters what ``str()`` and ``format()`` return for serialized enum values,
|
|
# and ``asyncio.timeout`` means dropping the public ``timeout`` parameter from async APIs.
|
|
"UP042", # Class inherits from both `str` and `enum.Enum`; 98 sites
|
|
"ASYNC109", # Async function with a `timeout` parameter; 49 sites
|
|
]
|
|
unfixable = [
|
|
# PT022 replace empty `yield` to empty `return`. Might be fixed with a combination of PLR1711
|
|
# In addition, it can't do anything with invalid typing annotations, protected by mypy.
|
|
"PT022",
|
|
]
|
|
|
|
[tool.ruff.lint.flake8-bugbear]
|
|
# FastAPI dependency injection uses function calls in argument defaults intentionally.
|
|
# SHA256 is a stateless algorithm descriptor (cryptography library).
|
|
extend-immutable-calls = [
|
|
"fastapi.Body",
|
|
"fastapi.Depends",
|
|
"fastapi.Query",
|
|
"fastapi.Path",
|
|
"fastapi.Security",
|
|
"cryptography.hazmat.primitives.hashes.SHA256",
|
|
]
|
|
|
|
[tool.ruff.format]
|
|
docstring-code-format = true
|
|
|
|
[tool.ruff.lint.isort]
|
|
required-imports = ["from __future__ import annotations"]
|
|
combine-as-imports = true
|
|
|
|
|
|
section-order = [
|
|
"future",
|
|
"standard-library",
|
|
"third-party",
|
|
"first-party",
|
|
"local-folder",
|
|
"testing"
|
|
]
|
|
|
|
known-first-party = ["airflow", "airflow_shared", "airflow_shared.*"]
|
|
|
|
# Make sure we put the "dev" imports at the end, not as a third-party module
|
|
[tool.ruff.lint.isort.sections]
|
|
testing = ["dev", "providers.tests", "tests_common", "tests", "system", "unit", "integration"]
|
|
|
|
[tool.ruff.lint.extend-per-file-ignores]
|
|
"airflow-core/src/airflow/__init__.py" = ["F401", "TC004", "I002"]
|
|
"airflow-core/src/airflow/models/__init__.py" = ["F401", "TC004"]
|
|
"airflow-core/src/airflow/models/sqla_models.py" = ["F401"]
|
|
"airflow-core/src/airflow/cli/api/datamodels/_generated.py" = ["UP007", "D101", "D200"]
|
|
|
|
# Those are needed so that __init__.py chaining of packages properly works for IDEs
|
|
# the first non-comment line of such empty __init__.py files should be:
|
|
#
|
|
"airflow-core/tests/unit/__init__.py" = ["I002"]
|
|
"airflow-core/tests/system/__init__.py" = ["I002"]
|
|
"airflow-core/tests/integration/__init__.py" = ["I002"]
|
|
"providers/*/tests/*/__init__.py" = ["I002"]
|
|
"providers/*/*/tests/*/*/__init__.py" = ["I002"]
|
|
"providers/*/src/airflow/__init__.py" = ["I002"]
|
|
"providers/*/src/airflow/providers/*/__init__.py" = ["I002"]
|
|
"providers/*/src/airflow/providers/__init__.py" = ["I002"]
|
|
"providers/*/*/src/airflow/providers/__init__.py" = ["I002"]
|
|
"providers/apache/*/src/airflow/providers/apache/__init__.py" = ["I002"]
|
|
"providers/atlassian/*/src/airflow/providers/atlassian/__init__.py" = ["I002"]
|
|
"providers/common/*/src/airflow/providers/common/__init__.py" = ["I002"]
|
|
"providers/cncf/*/src/airflow/providers/cncf/__init__.py" = ["I002"]
|
|
"providers/dbt/*/src/airflow/providers/dbt/__init__.py" = ["I002"]
|
|
"providers/microsoft/*/src/airflow/providers/microsoft/__init__.py" = ["I002"]
|
|
|
|
# The test_python.py is needed because adding __future__.annotations breaks runtime checks that are
|
|
# needed for the test to work
|
|
"providers/standard/tests/unit/standard/decorators/test_python.py" = ["I002"]
|
|
|
|
# The Pydantic representations of SqlAlchemy Models are not parsed well with Pydantic
|
|
# when __future__.annotations is used so we need to skip them from upgrading
|
|
# Pydantic also require models to be imported during execution
|
|
"airflow-core/src/airflow/serialization/pydantic/*.py" = ["I002", "UP007", "TC001"]
|
|
|
|
# The FastAPI models are not parsed well with Pydantic when __future__.annotations is used
|
|
# It is forcing for Union to replace with `|` pipe instead
|
|
"airflow-core/src/airflow/api_fastapi/core_api/datamodels/common.py" = ["UP007"]
|
|
|
|
# Provider's get_provider_info.py files are generated and do not need "from __future__ import annotations"
|
|
"providers/**/get_provider_info.py" = ["I002"]
|
|
|
|
# Failing to detect types and functions used in `Annotated[...]` syntax as required at runtime.
|
|
# Annotated is central for FastAPI dependency injection, skipping rules for FastAPI folders.
|
|
"airflow-core/src/airflow/api_fastapi/*" = ["TC001", "TC002"]
|
|
"airflow-core/tests/unit/api_fastapi/*" = ["T001", "TC002"]
|
|
"providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/*" = ["TC001", "TC002"]
|
|
|
|
# Ignore pydoc style from these
|
|
"*.pyi" = ["D"]
|
|
"scripts/*" = ["D", "PT"] # In addition ignore pytest specific rules
|
|
"docs/*" = ["D"]
|
|
"airflow-core/docs/*" = ["D"]
|
|
"*/example_dags/*" = ["D"]
|
|
"chart/*" = ["D"]
|
|
"dev/*" = ["D"]
|
|
"devel-common/*" = ["D"]
|
|
# In addition, ignore in tests
|
|
# TID253: Banned top level imports, e.g. pandas, numpy
|
|
# S101: Use `assert`
|
|
# TRY002: Use `raise Exception`
|
|
"dev/perf/*" = ["TID253"]
|
|
"dev/check_files.py" = ["S101"]
|
|
"dev/breeze/tests/*" = ["TID253", "S101", "TRY002"]
|
|
"devel-common/tests/*" = ["S101"]
|
|
"airflow-core/tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"airflow-ctl-tests/tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"airflow-e2e-tests/tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"docker-tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"task-sdk-integration-tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"kubernetes-tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"chart/tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"providers/**/tests/*" = ["D", "TID253", "S101", "TRY002"]
|
|
"performance/tests/*" = ["S101"]
|
|
"dev/registry/tests/*" = ["S101"]
|
|
"scripts/tests/*" = ["S101"]
|
|
|
|
# Shared distributions SHOULD use relative imports when referencing each other
|
|
# This one disables 'ban-relative-imports'.
|
|
"shared/*/src/**" = ["TID252"]
|
|
|
|
# All the modules which have an extra license header (i.e. that we copy from another project) need to
|
|
# ignore E402 -- module level import not at top level
|
|
"scripts/ci/prek/*.py" = [ "E402" ]
|
|
"airflow-core/src/airflow/api/auth/backend/kerberos_auth.py" = [ "E402" ]
|
|
"airflow-core/src/airflow/security/kerberos.py" = [ "E402" ]
|
|
"airflow-core/src/airflow/security/utils.py" = [ "E402" ]
|
|
"airflow-core/tests/unit/always/test_connection.py" = [ "E402" ]
|
|
"airflow-core/tests/unit/always/test_providers_manager.py" = [ "E402" ]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_auto_ml.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_batch_prediction_job.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_custom_job.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_dataset.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_endpoint_service.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_generative_model.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_hyperparameter_tuning_job.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_model_service.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_pipeline_job.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_prediction_service.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/hooks/vertex_ai/test_ray.py" = [ "E402" ]
|
|
"providers/google/tests/unit/google/cloud/links/test_translate.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/operators/test_automl.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/operators/test_vertex_ai.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/operators/vertex_ai/test_generative_model.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/triggers/test_vertex_ai.py" = [ "E402"]
|
|
"providers/google/tests/unit/google/cloud/sensors/test_vertex_ai.py" = [ "E402"]
|
|
"providers/microsoft/azure/tests/conftest.py" = ["E402"]
|
|
"providers/qdrant/tests/unit/qdrant/hooks/test_qdrant.py" = ["E402"]
|
|
"providers/qdrant/tests/unit/qdrant/operators/test_qdrant.py" = ["E402"]
|
|
"providers/yandex/tests/unit/yandex/hooks/test_yandex.py" = ["E402"]
|
|
"providers/yandex/tests/unit/yandex/hooks/test_yq.py" = ["E402"]
|
|
"providers/yandex/tests/unit/yandex/operators/test_dataproc.py" = ["E402"]
|
|
"providers/yandex/tests/unit/yandex/operators/test_yq.py" = ["E402"]
|
|
"providers/yandex/tests/unit/yandex/secrets/test_lockbox.py" = ["E402"]
|
|
"providers/ydb/tests/unit/ydb/hooks/test_ydb.py" = ["E402"]
|
|
"providers/ydb/tests/unit/ydb/operators/test_ydb.py" = ["E402"]
|
|
"providers/ydb/tests/unit/ydb/utils/test_credentials.py" = ["E402"]
|
|
|
|
# Remove some docstring rules from files that do not need docstrings
|
|
"providers/apache/hdfs/src/airflow/providers/apache/hdfs/sensors/hdfs.py" = ["D101"]
|
|
|
|
"devel-common/src/sphinx_exts/exampleinclude.py" = ["E402", 'F401', ]
|
|
|
|
# All the modules which do not follow B028 yet: https://docs.astral.sh/ruff/rules/no-explicit-stacklevel/
|
|
"chart/tests/helm_tests/airflow_aux/test_basic_helm_chart.py" = ["B028"]
|
|
|
|
# While pandas import is banned, sql.pyi should be excluded from it as it does not have a TYPE_CHECKING
|
|
# mechanism and whole .pyi is really "type-checking" only
|
|
"providers/common/sql/src/airflow/providers/common/sql/hooks/sql.pyi" = ["TID253"]
|
|
|
|
[tool.ruff.lint.flake8-tidy-imports]
|
|
# Disallow all relative imports.
|
|
ban-relative-imports = "all"
|
|
# Ban certain modules from being imported at module level, instead requiring
|
|
# that they're imported lazily (e.g., within a function definition).
|
|
banned-module-level-imports = ["numpy", "pandas", "polars"]
|
|
|
|
|
|
[tool.ruff.lint.flake8-tidy-imports.banned-api]
|
|
|
|
# Direct import from the airflow package modules and constraints
|
|
"airflow.AirflowException".msg = "Use airflow.exceptions.AirflowException instead."
|
|
|
|
# Deprecated imports
|
|
"airflow.models.errors.ImportError".msg = "Use airflow.models.errors.ParseImportError"
|
|
"airflow.models.ImportError".msg = "Use airflow.models.errors.ParseImportError"
|
|
|
|
# Note: we have to specify these all here (not in sub pyproject.toml files), else we'd have to duplicate these
|
|
# all rules in each project https://github.com/astral-sh/ruff/issues/18723
|
|
"airflow.utils.timezone".msg = "Use airflow.sdk.timezone (or airflow._shared.timezones.timezone from within airflow-core)"
|
|
# "airflow_shared".msg = "Use airflow._shared or airflow.sdk._shared instead"
|
|
|
|
# Deprecated in Python 3.11, Pending Removal in Python 3.15: https://github.com/python/cpython/issues/90817
|
|
# Deprecation warning in Python 3.11 also recommends using locale.getencoding but it available in Python 3.11
|
|
"locale.getdefaultlocale".msg = "Use locale.setlocale() and locale.getlocale() instead."
|
|
# Deprecated in Python 3.12: https://github.com/python/cpython/issues/103857
|
|
"datetime.datetime.utcnow".msg = "Use airflow.sdk.timezone.utcnow or datetime.datetime.now(tz=datetime.timezone.utc)"
|
|
"datetime.datetime.utcfromtimestamp".msg = "Use airflow.sdk.timezone.from_timestamp or datetime.datetime.fromtimestamp(tz=datetime.timezone.utc)"
|
|
# Uses deprecated in Python 3.12 `datetime.datetime.utcfromtimestamp`
|
|
"pendulum.from_timestamp".msg = "Use airflow.sdk.timezone.from_timestamp"
|
|
# Flask deprecations, worthwhile to keep it until we migrate to Flask 3.0+
|
|
"flask._app_ctx_stack".msg = "Deprecated in Flask 2.2, removed in Flask 3.0"
|
|
"flask._request_ctx_stack".msg = "Deprecated in Flask 2.2, removed in Flask 3.0"
|
|
"flask.escape".msg = "Use markupsafe.escape instead. Deprecated in Flask 2.3, removed in Flask 3.0"
|
|
"flask.Markup".msg = "Use markupsafe.Markup instead. Deprecated in Flask 2.3, removed in Flask 3.0"
|
|
"flask.signals_available".msg = "Signals are always available. Deprecated in Flask 2.3, removed in Flask 3.0"
|
|
# Use root logger by a mistake / IDE autosuggestion
|
|
# If for some reason root logger required it could obtained by logging.getLogger("root")
|
|
"logging.debug".msg = "Use structlog instead"
|
|
"logging.info".msg = "Use structlog instead"
|
|
"logging.warning".msg = "Use structlog instead"
|
|
"logging.error".msg = "Use structlog instead"
|
|
"logging.exception".msg = "Use structlog instead"
|
|
"logging.fatal".msg = "Use structlog instead"
|
|
"logging.critical".msg = "Use structlog instead"
|
|
"logging.log".msg = "Use structlog instead"
|
|
# unittest related restrictions
|
|
"unittest.TestCase".msg = "Use pytest compatible classes: https://docs.pytest.org/en/stable/getting-started.html#group-multiple-tests-in-a-class"
|
|
"unittest.skip".msg = "Use `pytest.mark.skip` instead: https://docs.pytest.org/en/stable/reference/reference.html#marks"
|
|
"unittest.skipIf".msg = "Use `pytest.mark.skipif` instead: https://docs.pytest.org/en/stable/reference/reference.html#marks"
|
|
"unittest.skipUnless".msg = "Use `pytest.mark.skipif` instead: https://docs.pytest.org/en/stable/reference/reference.html#marks"
|
|
"unittest.expectedFailure".msg = "Use `pytest.mark.xfail` instead: https://docs.pytest.org/en/stable/reference/reference.html#marks"
|
|
# Moved in SQLAlchemy 2.0
|
|
"sqlalchemy.ext.declarative.declarative_base".msg = "Use `sqlalchemy.orm.declarative_base`. Moved in SQLAlchemy 2.0"
|
|
"sqlalchemy.ext.declarative.as_declarative".msg = "Use `sqlalchemy.orm.as_declarative`. Moved in SQLAlchemy 2.0"
|
|
"sqlalchemy.ext.declarative.has_inherited_table".msg = "Use `sqlalchemy.orm.has_inherited_table`. Moved in SQLAlchemy 2.0"
|
|
"sqlalchemy.ext.declarative.synonym_for".msg = "Use `sqlalchemy.orm.synonym_for`. Moved in SQLAlchemy 2.0"
|
|
"providers".msg = "You should not import 'providers' as a Python module. Imports in providers should be done starting from 'src' or `tests' folders, for example 'from airflow.providers.airbyte' or 'from unit.airbyte' or 'from system.airbyte'"
|
|
|
|
[tool.ruff.lint.flake8-type-checking]
|
|
exempt-modules = ["typing", "typing_extensions", "sqlalchemy.orm.Mapped"]
|
|
|
|
[tool.ruff.lint.flake8-pytest-style]
|
|
mark-parentheses = false
|
|
fixture-parentheses = false
|
|
|
|
## pytest settings ##
|
|
[tool.pytest]
|
|
addopts = [
|
|
"--tb=short",
|
|
"-rasl",
|
|
"--verbosity=2",
|
|
# Disable `flaky` plugin for pytest. This plugin conflicts with `rerunfailures` because provide the same marker.
|
|
"-p", "no:flaky",
|
|
# Disable `nose` builtin plugin for pytest. This feature is deprecated in 7.2 and will be removed in pytest>=8
|
|
"-p", "no:nose",
|
|
# Disable support of a legacy `LocalPath` in favor of stdlib `pathlib.Path`.
|
|
"-p", "no:legacypath",
|
|
# Disable warnings summary, because we use our warning summary.
|
|
"--disable-warnings",
|
|
"--asyncio-mode=strict",
|
|
"--ignore-glob=**/tests/system/*",
|
|
"--ignore-glob=tests/system/*",
|
|
]
|
|
|
|
norecursedirs = [
|
|
".eggs",
|
|
"airflow",
|
|
"airflow-core/tests/unit/_internals",
|
|
"airflow-core/tests/unit/dags_with_system_exit",
|
|
"airflow-core/tests/unit/dags_corrupted",
|
|
"airflow-core/tests/unit/dags",
|
|
"providers/google/tests/system/google/cloud/dataproc/resources",
|
|
"providers/google/tests/system/google/cloud/gcs/resources",
|
|
]
|
|
log_level = "INFO"
|
|
filterwarnings = [
|
|
"error::pytest.PytestCollectionWarning",
|
|
# Avoid building cartesian product which might impact performance
|
|
"error:SELECT statement has a cartesian product between FROM:sqlalchemy.exc.SAWarning:airflow",
|
|
'error:Coercing Subquery object into a select\(\) for use in IN\(\):sqlalchemy.exc.SAWarning:airflow',
|
|
'error:Class.*will not make use of SQL compilation caching',
|
|
"ignore::DeprecationWarning:flask_appbuilder.filemanager",
|
|
"ignore::DeprecationWarning:flask_appbuilder.widgets",
|
|
# FAB do not support SQLAlchemy 2
|
|
"ignore::sqlalchemy.exc.MovedIn20Warning:flask_appbuilder",
|
|
# https://github.com/dpgaspar/Flask-AppBuilder/issues/2194
|
|
"ignore::DeprecationWarning:marshmallow_sqlalchemy.convert",
|
|
# https://github.com/dpgaspar/Flask-AppBuilder/pull/1940
|
|
"ignore::DeprecationWarning:flask_sqlalchemy",
|
|
# https://github.com/dpgaspar/Flask-AppBuilder/pull/1903
|
|
"ignore::DeprecationWarning:apispec.utils",
|
|
]
|
|
# We cannot add warnings from the airflow package into `filterwarnings`,
|
|
# because it invokes import airflow before we set up test environment which breaks the tests.
|
|
# Instead of that, we use a separate parameter and dynamically add it into `filterwarnings` marker.
|
|
# Add airflow.exceptions.RemovedInAirflow4Warning when min provider version for providers is 3.0
|
|
forbidden_warnings = [
|
|
"airflow.exceptions.AirflowProviderDeprecationWarning",
|
|
]
|
|
python_files = [
|
|
"test_*.py",
|
|
"example_*.py",
|
|
]
|
|
# We need to make sure airflow-core sources are first in the pythonpath, because uv sync adds sources to
|
|
# pythonpath in basically random order and pytest does not understand legacy namespace packages and cannot
|
|
# use namespace packages effectively when collecting tests.
|
|
pythonpath = [
|
|
"airflow-core/src",
|
|
"airflow-core/tests"
|
|
]
|
|
testpaths = [
|
|
"tests",
|
|
]
|
|
asyncio_default_fixture_loop_scope = "function"
|
|
|
|
# Keep temporary directories (created by `tmp_path`) for 2 recent runs only failed tests.
|
|
tmp_path_retention_count = "2"
|
|
tmp_path_retention_policy = "failed"
|
|
|
|
|
|
## coverage.py settings ##
|
|
[tool.coverage.run]
|
|
branch = true
|
|
relative_files = true
|
|
omit = [
|
|
"airflow-core/src/airflow/_vendor/**",
|
|
"airflow-core/src/airflow/contrib/**",
|
|
"airflow-core/src/airflow/example_dags/**",
|
|
"airflow-core/src/airflow/migrations/**",
|
|
"providers/google/src/airflow/providers/**/example_dags/**",
|
|
"providers/google/src/airflow/providers/google/ads/_vendor/**",
|
|
]
|
|
|
|
[tool.coverage.report]
|
|
skip_empty = true
|
|
exclude_also = [
|
|
"def __repr__",
|
|
"raise AssertionError",
|
|
"raise NotImplementedError",
|
|
"if __name__ == .__main__.:",
|
|
"@(abc\\.)?abstractmethod",
|
|
"@(typing(_extensions)?\\.)?overload",
|
|
"if (typing(_extensions)?\\.)?TYPE_CHECKING:"
|
|
]
|
|
|
|
|
|
## mypy settings ##
|
|
[tool.mypy]
|
|
ignore_missing_imports = true
|
|
no_implicit_optional = true
|
|
warn_redundant_casts = true
|
|
warn_unused_ignores = false
|
|
plugins = [
|
|
"airflow_mypy.plugins.decorators",
|
|
"airflow_mypy.plugins.outputs",
|
|
]
|
|
pretty = true
|
|
show_error_codes = true
|
|
disable_error_code = [
|
|
"annotation-unchecked",
|
|
]
|
|
namespace_packages = true
|
|
explicit_package_bases = true
|
|
exclude = [
|
|
".*/node_modules/.*",
|
|
# Exclude hidden files and directories
|
|
".*/\\..*"
|
|
]
|
|
mypy_path = [
|
|
"$MYPY_CONFIG_FILE_DIR/airflow-core/src",
|
|
"$MYPY_CONFIG_FILE_DIR/airflow-core/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/task-sdk/src",
|
|
"$MYPY_CONFIG_FILE_DIR/task-sdk/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/airflow-ctl/src",
|
|
"$MYPY_CONFIG_FILE_DIR/airflow-ctl/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/airflow-ctl-tests/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/dev",
|
|
"$MYPY_CONFIG_FILE_DIR/devel-common/src",
|
|
"$MYPY_CONFIG_FILE_DIR/chart/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/kubernetes-tests/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/docker-tests/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/task-sdk-integration-tests/tests",
|
|
# Automatically generated mypy paths (update_airflow_pyproject_toml.py)
|
|
"$MYPY_CONFIG_FILE_DIR/providers/airbyte/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/airbyte/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/akeyless/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/akeyless/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/alibaba/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/alibaba/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/amazon/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/amazon/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/anthropic/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/anthropic/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/arrow/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/arrow/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/beam/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/beam/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/cassandra/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/cassandra/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/drill/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/drill/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/druid/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/druid/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/flink/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/flink/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/hdfs/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/hdfs/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/hive/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/hive/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/iceberg/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/iceberg/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/impala/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/impala/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/kafka/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/kafka/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/kylin/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/kylin/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/livy/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/livy/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/pig/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/pig/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/pinot/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/pinot/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/spark/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/spark/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/tinkerpop/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apache/tinkerpop/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apprise/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/apprise/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/arangodb/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/arangodb/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/asana/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/asana/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/atlassian/jira/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/atlassian/jira/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/celery/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/celery/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/clickhousedb/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/clickhousedb/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/cloudant/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/cloudant/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/cncf/kubernetes/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/cncf/kubernetes/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/cohere/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/cohere/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/ai/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/ai/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/compat/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/compat/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/dataquality/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/dataquality/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/io/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/io/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/messaging/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/messaging/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/sql/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/common/sql/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/databricks/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/databricks/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/datadog/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/datadog/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/dbt/cloud/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/dbt/cloud/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/dingding/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/dingding/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/discord/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/discord/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/docker/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/docker/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/duckdb/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/duckdb/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/edge3/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/edge3/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/elasticsearch/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/elasticsearch/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/exasol/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/exasol/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/fab/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/fab/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/facebook/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/facebook/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ftp/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ftp/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/git/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/git/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/github/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/github/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/google/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/google/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/grpc/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/grpc/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/hashicorp/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/hashicorp/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/http/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/http/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ibm/db2/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ibm/db2/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ibm/mq/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ibm/mq/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/imap/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/imap/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/influxdb/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/influxdb/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/informatica/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/informatica/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/jdbc/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/jdbc/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/jenkins/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/jenkins/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/keycloak/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/keycloak/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/azure/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/azure/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/mssql/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/mssql/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/psrp/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/psrp/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/winrm/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/microsoft/winrm/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/modal/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/modal/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/mongo/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/mongo/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/mysql/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/mysql/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/neo4j/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/neo4j/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/odbc/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/odbc/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/openai/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/openai/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/openfaas/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/openfaas/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/openlineage/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/openlineage/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/opensearch/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/opensearch/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/opsgenie/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/opsgenie/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/oracle/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/oracle/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/pagerduty/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/pagerduty/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/papermill/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/papermill/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/pgvector/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/pgvector/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/pinecone/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/pinecone/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/postgres/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/postgres/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/presto/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/presto/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/qdrant/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/qdrant/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/redis/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/redis/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/salesforce/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/salesforce/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/samba/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/samba/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/segment/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/segment/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/sendgrid/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/sendgrid/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/sftp/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/sftp/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/singularity/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/singularity/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/slack/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/slack/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/smtp/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/smtp/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/snowflake/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/snowflake/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/sqlite/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/sqlite/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ssh/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ssh/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/standard/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/standard/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/tableau/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/tableau/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/telegram/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/telegram/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/teradata/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/teradata/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/trino/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/trino/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/vertica/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/vertica/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/vespa/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/vespa/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/weaviate/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/weaviate/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/yandex/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/yandex/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ydb/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/ydb/tests",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/zendesk/src",
|
|
"$MYPY_CONFIG_FILE_DIR/providers/zendesk/tests",
|
|
# End of automatically generated mypy paths
|
|
]
|
|
|
|
[[tool.mypy.overrides]]
|
|
module="airflow.config_templates.default_webserver_config"
|
|
disable_error_code = [
|
|
"var-annotated",
|
|
]
|
|
|
|
[[tool.mypy.overrides]]
|
|
module="airflow.migrations.*"
|
|
ignore_errors = true
|
|
|
|
[[tool.mypy.overrides]]
|
|
module="airflow.*._vendor.*"
|
|
ignore_errors = true
|
|
|
|
[[tool.mypy.overrides]]
|
|
module= [
|
|
"google.cloud.*",
|
|
"azure.*",
|
|
]
|
|
no_implicit_optional = false
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = "google.api_core.gapic_v1"
|
|
ignore_errors = true
|
|
|
|
[[tool.mypy.overrides]]
|
|
module=[
|
|
"referencing.*",
|
|
# Beam has some old type annotations, and they introduced an error recently with bad signature of
|
|
# a function. This is captured in https://github.com/apache/beam/issues/29927
|
|
# and we should remove this exclusion when it is fixed.
|
|
"apache_beam.*"
|
|
]
|
|
ignore_errors = true
|
|
|
|
# airflowctl autogenered datamodels
|
|
[[tool.mypy.overrides]]
|
|
module="airflowctl.api.datamodels.*"
|
|
ignore_errors = true
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"apache-airflow[all]",
|
|
"apache-airflow-breeze",
|
|
"apache-airflow-dev",
|
|
"apache-airflow-scripts",
|
|
"apache-airflow-devel-common[no-doc]",
|
|
"apache-airflow-docker-tests",
|
|
"apache-airflow-task-sdk-integration-tests",
|
|
"apache-airflow-helm-chart",
|
|
"apache-airflow-kubernetes-tests",
|
|
"apache-airflow-task-sdk[all]",
|
|
"apache-airflow-ctl",
|
|
"apache-airflow-ctl-tests",
|
|
"apache-airflow-shared-configuration",
|
|
"apache-airflow-shared-dagnode",
|
|
"apache-airflow-shared-listeners",
|
|
"apache-airflow-shared-logging",
|
|
"apache-airflow-shared-module-loading",
|
|
"apache-airflow-shared-observability",
|
|
"apache-airflow-shared-plugins-manager",
|
|
"apache-airflow-shared-providers-discovery",
|
|
"apache-airflow-shared-secrets-backend",
|
|
"apache-airflow-shared-secrets-masker",
|
|
"apache-airflow-shared-serialization",
|
|
"apache-airflow-shared-state",
|
|
"apache-airflow-shared-template-rendering",
|
|
"apache-airflow-shared-timezones",
|
|
]
|
|
|
|
# To build docs:
|
|
#
|
|
# uv run --group docs build-docs
|
|
#
|
|
# To enable auto-refreshing build with server:
|
|
#
|
|
# uv run --group docs build-docs --autobuild
|
|
#
|
|
# To see more options:
|
|
#
|
|
# uv run --group docs build-docs --help
|
|
#
|
|
docs = [
|
|
"apache-airflow-devel-common[docs]"
|
|
]
|
|
docs-gen = [
|
|
"apache-airflow-devel-common[docs-gen]"
|
|
]
|
|
# special case for google's leveldb dependency that is notriously difficult to install
|
|
# we are not installing it by default we only install it in CI image when image is built
|
|
leveldb = [
|
|
"plyvel>=1.5.1"
|
|
]
|
|
|
|
# Aggregate of every group the CI image installs by default. Single source of
|
|
# truth referenced from the Dockerfiles, the image install script, and the
|
|
# breeze constraints checker. When a provider needs to register a
|
|
# hard-to-install extra (proprietary client, needs system libs, etc.), add a
|
|
# dedicated [dependency-groups] entry above and include it here — no Dockerfile
|
|
# or breeze edits required. See contributing-docs/12_provider_distributions.rst.
|
|
ci-image = [
|
|
{include-group = "dev"},
|
|
{include-group = "docs"},
|
|
{include-group = "docs-gen"},
|
|
{include-group = "leveldb"},
|
|
]
|
|
|
|
[tool.uv]
|
|
# Bump this only when the project actually relies on a newer uv feature/fix. It is a
|
|
# minimum contributors must install, NOT the uv CI pins to — keeping it in lockstep
|
|
# with AIRFLOW_UV_VERSION would force everyone to upgrade uv on every release. The
|
|
# breeze/prek uv version checks read this value dynamically and tolerate a stale
|
|
# floor; `scripts/ci/prek/upgrade_important_versions.py` deliberately skips it.
|
|
required-version = ">=0.13.4"
|
|
no-build-isolation-package = ["sphinx-redoc"]
|
|
# pydantic-ai-slim[openai]>=2.33 declares openai>=3 (>=3.8 from 2.39), while
|
|
# llama-index-llms-openai (<=0.8.1) and litellm (<=1.102.0, pulled in by the Google provider's
|
|
# google-cloud-aiplatform[evaluation]) still cap openai below 3. Without this override the
|
|
# workspace lock cannot move pydantic-ai-slim past 2.31, which is incompatible with anthropic
|
|
# 1.x, so the Anthropic path could not run in the CI image at all. Holding openai on 2.x is the
|
|
# pairing constraints-main already ships and the one `pip check` in the image build accepts
|
|
# (pip ignores extra-gated requirements, but not llama-index's unconditional cap). pydantic-ai's
|
|
# OpenAI model works against openai 2.x at runtime; the declared floor tracks the SDK's httpx2
|
|
# move. Published wheels are unaffected: overrides only shape uv.lock and the CI image. Drop this
|
|
# once run-llama/llama_index#22939 and BerriAI/litellm#40317 land and google-cloud-aiplatform
|
|
# lifts its litellm cap (<1.86 below Python 3.14) far enough to reach the fixed litellm.
|
|
override-dependencies = ["openai>=2.47.0,<3"]
|
|
# The override replaces every package's openai requirement, not only pydantic-ai-slim's, so the
|
|
# resolver no longer rejects a release that needs openai>=3 unconditionally, and only `pip check`
|
|
# in the image build catches it. Cap each such package here at its last openai 2.x release, which
|
|
# is what the resolver would pick without the override. azure-ai-projects 2.5.0 moved to
|
|
# openai>=3.0.0; the Azure provider needs >=2.2.0.
|
|
constraint-dependencies = ["azure-ai-projects<2.5"]
|
|
# Synchroonize with scripts/ci/prek/upgrade_important_versions.py
|
|
exclude-newer = "4 days"
|
|
|
|
[tool.uv.exclude-newer-package]
|
|
# Automatically generated exclude-newer-package entries (update_airflow_pyproject_toml.py)
|
|
apache-airflow = false
|
|
apache-airflow-breeze = false
|
|
apache-airflow-core = false
|
|
apache-airflow-ctl = false
|
|
apache-airflow-ctl-tests = false
|
|
apache-airflow-dev = false
|
|
apache-airflow-devel-common = false
|
|
apache-airflow-docker-stack = false
|
|
apache-airflow-docker-tests = false
|
|
apache-airflow-e2e-tests = false
|
|
apache-airflow-helm-chart = false
|
|
apache-airflow-kubernetes-tests = false
|
|
apache-airflow-mypy = false
|
|
apache-airflow-providers = false
|
|
apache-airflow-providers-airbyte = false
|
|
apache-airflow-providers-akeyless = false
|
|
apache-airflow-providers-alibaba = false
|
|
apache-airflow-providers-amazon = false
|
|
apache-airflow-providers-anthropic = false
|
|
apache-airflow-providers-apache-arrow = false
|
|
apache-airflow-providers-apache-beam = false
|
|
apache-airflow-providers-apache-cassandra = false
|
|
apache-airflow-providers-apache-drill = false
|
|
apache-airflow-providers-apache-druid = false
|
|
apache-airflow-providers-apache-flink = false
|
|
apache-airflow-providers-apache-hdfs = false
|
|
apache-airflow-providers-apache-hive = false
|
|
apache-airflow-providers-apache-iceberg = false
|
|
apache-airflow-providers-apache-impala = false
|
|
apache-airflow-providers-apache-kafka = false
|
|
apache-airflow-providers-apache-kylin = false
|
|
apache-airflow-providers-apache-livy = false
|
|
apache-airflow-providers-apache-pig = false
|
|
apache-airflow-providers-apache-pinot = false
|
|
apache-airflow-providers-apache-spark = false
|
|
apache-airflow-providers-apache-tinkerpop = false
|
|
apache-airflow-providers-apprise = false
|
|
apache-airflow-providers-arangodb = false
|
|
apache-airflow-providers-asana = false
|
|
apache-airflow-providers-atlassian-jira = false
|
|
apache-airflow-providers-celery = false
|
|
apache-airflow-providers-clickhousedb = false
|
|
apache-airflow-providers-cloudant = false
|
|
apache-airflow-providers-cncf-kubernetes = false
|
|
apache-airflow-providers-cohere = false
|
|
apache-airflow-providers-common-ai = false
|
|
apache-airflow-providers-common-compat = false
|
|
apache-airflow-providers-common-dataquality = false
|
|
apache-airflow-providers-common-io = false
|
|
apache-airflow-providers-common-messaging = false
|
|
apache-airflow-providers-common-sql = false
|
|
apache-airflow-providers-databricks = false
|
|
apache-airflow-providers-datadog = false
|
|
apache-airflow-providers-dbt-cloud = false
|
|
apache-airflow-providers-dingding = false
|
|
apache-airflow-providers-discord = false
|
|
apache-airflow-providers-docker = false
|
|
apache-airflow-providers-duckdb = false
|
|
apache-airflow-providers-edge3 = false
|
|
apache-airflow-providers-elasticsearch = false
|
|
apache-airflow-providers-exasol = false
|
|
apache-airflow-providers-fab = false
|
|
apache-airflow-providers-facebook = false
|
|
apache-airflow-providers-ftp = false
|
|
apache-airflow-providers-git = false
|
|
apache-airflow-providers-github = false
|
|
apache-airflow-providers-google = false
|
|
apache-airflow-providers-grpc = false
|
|
apache-airflow-providers-hashicorp = false
|
|
apache-airflow-providers-http = false
|
|
apache-airflow-providers-ibm-db2 = false
|
|
apache-airflow-providers-ibm-mq = false
|
|
apache-airflow-providers-imap = false
|
|
apache-airflow-providers-influxdb = false
|
|
apache-airflow-providers-informatica = false
|
|
apache-airflow-providers-jdbc = false
|
|
apache-airflow-providers-jenkins = false
|
|
apache-airflow-providers-keycloak = false
|
|
apache-airflow-providers-microsoft-azure = false
|
|
apache-airflow-providers-microsoft-mssql = false
|
|
apache-airflow-providers-microsoft-psrp = false
|
|
apache-airflow-providers-microsoft-winrm = false
|
|
apache-airflow-providers-modal = false
|
|
apache-airflow-providers-mongo = false
|
|
apache-airflow-providers-mysql = false
|
|
apache-airflow-providers-neo4j = false
|
|
apache-airflow-providers-odbc = false
|
|
apache-airflow-providers-openai = false
|
|
apache-airflow-providers-openfaas = false
|
|
apache-airflow-providers-openlineage = false
|
|
apache-airflow-providers-opensearch = false
|
|
apache-airflow-providers-opsgenie = false
|
|
apache-airflow-providers-oracle = false
|
|
apache-airflow-providers-pagerduty = false
|
|
apache-airflow-providers-papermill = false
|
|
apache-airflow-providers-pgvector = false
|
|
apache-airflow-providers-pinecone = false
|
|
apache-airflow-providers-postgres = false
|
|
apache-airflow-providers-presto = false
|
|
apache-airflow-providers-qdrant = false
|
|
apache-airflow-providers-redis = false
|
|
apache-airflow-providers-salesforce = false
|
|
apache-airflow-providers-samba = false
|
|
apache-airflow-providers-segment = false
|
|
apache-airflow-providers-sendgrid = false
|
|
apache-airflow-providers-sftp = false
|
|
apache-airflow-providers-singularity = false
|
|
apache-airflow-providers-slack = false
|
|
apache-airflow-providers-smtp = false
|
|
apache-airflow-providers-snowflake = false
|
|
apache-airflow-providers-sqlite = false
|
|
apache-airflow-providers-ssh = false
|
|
apache-airflow-providers-standard = false
|
|
apache-airflow-providers-tableau = false
|
|
apache-airflow-providers-telegram = false
|
|
apache-airflow-providers-teradata = false
|
|
apache-airflow-providers-trino = false
|
|
apache-airflow-providers-vertica = false
|
|
apache-airflow-providers-vespa = false
|
|
apache-airflow-providers-weaviate = false
|
|
apache-airflow-providers-yandex = false
|
|
apache-airflow-providers-ydb = false
|
|
apache-airflow-providers-zendesk = false
|
|
apache-airflow-scripts = false
|
|
apache-airflow-shared-configuration = false
|
|
apache-airflow-shared-dagnode = false
|
|
apache-airflow-shared-listeners = false
|
|
apache-airflow-shared-logging = false
|
|
apache-airflow-shared-module-loading = false
|
|
apache-airflow-shared-observability = false
|
|
apache-airflow-shared-plugins-manager = false
|
|
apache-airflow-shared-providers-discovery = false
|
|
apache-airflow-shared-secrets-backend = false
|
|
apache-airflow-shared-secrets-masker = false
|
|
apache-airflow-shared-serialization = false
|
|
apache-airflow-shared-state = false
|
|
apache-airflow-shared-template-rendering = false
|
|
apache-airflow-shared-timezones = false
|
|
apache-airflow-task-sdk = false
|
|
apache-airflow-task-sdk-integration-tests = false
|
|
# End of automatically generated exclude-newer-package entries
|
|
|
|
# Manual overrides (kept outside the auto-generated block above so the
|
|
# update_airflow_pyproject_toml.py script doesn't clobber them).
|
|
# Temporary: google-cloud-aiplatform 1.164.0 is the first release whose "evaluation" extra
|
|
# allows the litellm versions that carry the Python 3.14 security fixes, and it was published
|
|
# 2026-08-12, inside the "4 days" exclude-newer window. This pins the per-package cutoff just
|
|
# past that release so 1.164.0 resolves while any later release stays quarantined.
|
|
# Remove once the rolling window advances past 2026-08-12.
|
|
google-cloud-aiplatform = "2026-08-13T00:00:00Z"
|
|
|
|
# Package managers bypass the cooldown so a fix (e.g. a security or trust-store fix) can be
|
|
# picked up as soon as it is released; keep in sync with `[tool.uv.pip.exclude-newer-package]`
|
|
# and dev/breeze/pyproject.toml.
|
|
pip = false
|
|
uv = false
|
|
|
|
# pypdf 6.21.4 fixes GHSA-mfr5-77xh-9j7h, GHSA-cggf-277g-3q54 and GHSA-5849-834g-hvw5 (high).
|
|
# Remove this `exclude-newer-package` after 2026-11-02, when that release has been out for 4 days.
|
|
pypdf = "2026-10-29T00:00:00Z"
|
|
|
|
[tool.airflow.dependency-floors]
|
|
# Floors of these dependencies are raised by `breeze ci upgrade` (scripts/ci/prek/upgrade_dependency_floors.py),
|
|
# see dev/breeze/doc/adr/0018-raise-dependency-floors-automatically.md.
|
|
# A floor is never raised to a release uploaded more recently than this.
|
|
min-age = "180 days"
|
|
packages = [
|
|
"boto3",
|
|
"botocore",
|
|
"google-cloud-*",
|
|
"google-api-python-client",
|
|
"azure-*",
|
|
]
|
|
# Members of a group always get the same floor.
|
|
groups = [
|
|
["boto3", "botocore"],
|
|
]
|
|
|
|
# Never bumped. Packages capped or excluded anywhere (<, <=, !=, ==, ~=) are skipped automatically;
|
|
# list here the ones that must stay put for another reason, or whose cap should not be the only record.
|
|
[tool.airflow.dependency-floors.exclude]
|
|
sagemaker-studio = "Do not change without approval from AWS (providers/amazon/pyproject.toml)"
|
|
pandas = "DataFrame XComs need pandas<3 (#70791)"
|
|
pymysql = "Capped below 1.2 in PyPI constraints generation (#67491)"
|
|
fastapi = "Repeated breakage on new releases (#59681, #59710, #59856, #61579, #68578)"
|
|
deltalake = "Missing ARM wheels on new releases (#59977, #60098, #60376)"
|
|
gunicorn = "API server startup deadlocks above 25.1 (#62524)"
|
|
qdrant-client = "Capped (#62193)"
|
|
airbyte-api = "1.x breaks provider tests (#69081)"
|
|
mysql-connector-python = "Releases without wheels for >=3.12 (#60889, #66026)"
|
|
anthropic = "Provider SDK migration is version-sensitive (#72072, #72094)"
|
|
azure-ai-projects = "2.5+ needs openai>=3, broke main (#73621, #73627)"
|
|
|
|
[tool.uv.pip]
|
|
# Synchroonize with scripts/ci/prek/upgrade_important_versions.py
|
|
exclude-newer = "4 days"
|
|
|
|
[tool.uv.pip.exclude-newer-package]
|
|
# Automatically generated exclude-newer-package-pip entries (update_airflow_pyproject_toml.py)
|
|
apache-airflow = false
|
|
apache-airflow-breeze = false
|
|
apache-airflow-core = false
|
|
apache-airflow-ctl = false
|
|
apache-airflow-ctl-tests = false
|
|
apache-airflow-dev = false
|
|
apache-airflow-devel-common = false
|
|
apache-airflow-docker-stack = false
|
|
apache-airflow-docker-tests = false
|
|
apache-airflow-e2e-tests = false
|
|
apache-airflow-helm-chart = false
|
|
apache-airflow-kubernetes-tests = false
|
|
apache-airflow-mypy = false
|
|
apache-airflow-providers = false
|
|
apache-airflow-providers-airbyte = false
|
|
apache-airflow-providers-akeyless = false
|
|
apache-airflow-providers-alibaba = false
|
|
apache-airflow-providers-amazon = false
|
|
apache-airflow-providers-anthropic = false
|
|
apache-airflow-providers-apache-arrow = false
|
|
apache-airflow-providers-apache-beam = false
|
|
apache-airflow-providers-apache-cassandra = false
|
|
apache-airflow-providers-apache-drill = false
|
|
apache-airflow-providers-apache-druid = false
|
|
apache-airflow-providers-apache-flink = false
|
|
apache-airflow-providers-apache-hdfs = false
|
|
apache-airflow-providers-apache-hive = false
|
|
apache-airflow-providers-apache-iceberg = false
|
|
apache-airflow-providers-apache-impala = false
|
|
apache-airflow-providers-apache-kafka = false
|
|
apache-airflow-providers-apache-kylin = false
|
|
apache-airflow-providers-apache-livy = false
|
|
apache-airflow-providers-apache-pig = false
|
|
apache-airflow-providers-apache-pinot = false
|
|
apache-airflow-providers-apache-spark = false
|
|
apache-airflow-providers-apache-tinkerpop = false
|
|
apache-airflow-providers-apprise = false
|
|
apache-airflow-providers-arangodb = false
|
|
apache-airflow-providers-asana = false
|
|
apache-airflow-providers-atlassian-jira = false
|
|
apache-airflow-providers-celery = false
|
|
apache-airflow-providers-clickhousedb = false
|
|
apache-airflow-providers-cloudant = false
|
|
apache-airflow-providers-cncf-kubernetes = false
|
|
apache-airflow-providers-cohere = false
|
|
apache-airflow-providers-common-ai = false
|
|
apache-airflow-providers-common-compat = false
|
|
apache-airflow-providers-common-dataquality = false
|
|
apache-airflow-providers-common-io = false
|
|
apache-airflow-providers-common-messaging = false
|
|
apache-airflow-providers-common-sql = false
|
|
apache-airflow-providers-databricks = false
|
|
apache-airflow-providers-datadog = false
|
|
apache-airflow-providers-dbt-cloud = false
|
|
apache-airflow-providers-dingding = false
|
|
apache-airflow-providers-discord = false
|
|
apache-airflow-providers-docker = false
|
|
apache-airflow-providers-duckdb = false
|
|
apache-airflow-providers-edge3 = false
|
|
apache-airflow-providers-elasticsearch = false
|
|
apache-airflow-providers-exasol = false
|
|
apache-airflow-providers-fab = false
|
|
apache-airflow-providers-facebook = false
|
|
apache-airflow-providers-ftp = false
|
|
apache-airflow-providers-git = false
|
|
apache-airflow-providers-github = false
|
|
apache-airflow-providers-google = false
|
|
apache-airflow-providers-grpc = false
|
|
apache-airflow-providers-hashicorp = false
|
|
apache-airflow-providers-http = false
|
|
apache-airflow-providers-ibm-db2 = false
|
|
apache-airflow-providers-ibm-mq = false
|
|
apache-airflow-providers-imap = false
|
|
apache-airflow-providers-influxdb = false
|
|
apache-airflow-providers-informatica = false
|
|
apache-airflow-providers-jdbc = false
|
|
apache-airflow-providers-jenkins = false
|
|
apache-airflow-providers-keycloak = false
|
|
apache-airflow-providers-microsoft-azure = false
|
|
apache-airflow-providers-microsoft-mssql = false
|
|
apache-airflow-providers-microsoft-psrp = false
|
|
apache-airflow-providers-microsoft-winrm = false
|
|
apache-airflow-providers-modal = false
|
|
apache-airflow-providers-mongo = false
|
|
apache-airflow-providers-mysql = false
|
|
apache-airflow-providers-neo4j = false
|
|
apache-airflow-providers-odbc = false
|
|
apache-airflow-providers-openai = false
|
|
apache-airflow-providers-openfaas = false
|
|
apache-airflow-providers-openlineage = false
|
|
apache-airflow-providers-opensearch = false
|
|
apache-airflow-providers-opsgenie = false
|
|
apache-airflow-providers-oracle = false
|
|
apache-airflow-providers-pagerduty = false
|
|
apache-airflow-providers-papermill = false
|
|
apache-airflow-providers-pgvector = false
|
|
apache-airflow-providers-pinecone = false
|
|
apache-airflow-providers-postgres = false
|
|
apache-airflow-providers-presto = false
|
|
apache-airflow-providers-qdrant = false
|
|
apache-airflow-providers-redis = false
|
|
apache-airflow-providers-salesforce = false
|
|
apache-airflow-providers-samba = false
|
|
apache-airflow-providers-segment = false
|
|
apache-airflow-providers-sendgrid = false
|
|
apache-airflow-providers-sftp = false
|
|
apache-airflow-providers-singularity = false
|
|
apache-airflow-providers-slack = false
|
|
apache-airflow-providers-smtp = false
|
|
apache-airflow-providers-snowflake = false
|
|
apache-airflow-providers-sqlite = false
|
|
apache-airflow-providers-ssh = false
|
|
apache-airflow-providers-standard = false
|
|
apache-airflow-providers-tableau = false
|
|
apache-airflow-providers-telegram = false
|
|
apache-airflow-providers-teradata = false
|
|
apache-airflow-providers-trino = false
|
|
apache-airflow-providers-vertica = false
|
|
apache-airflow-providers-vespa = false
|
|
apache-airflow-providers-weaviate = false
|
|
apache-airflow-providers-yandex = false
|
|
apache-airflow-providers-ydb = false
|
|
apache-airflow-providers-zendesk = false
|
|
apache-airflow-scripts = false
|
|
apache-airflow-shared-configuration = false
|
|
apache-airflow-shared-dagnode = false
|
|
apache-airflow-shared-listeners = false
|
|
apache-airflow-shared-logging = false
|
|
apache-airflow-shared-module-loading = false
|
|
apache-airflow-shared-observability = false
|
|
apache-airflow-shared-plugins-manager = false
|
|
apache-airflow-shared-providers-discovery = false
|
|
apache-airflow-shared-secrets-backend = false
|
|
apache-airflow-shared-secrets-masker = false
|
|
apache-airflow-shared-serialization = false
|
|
apache-airflow-shared-state = false
|
|
apache-airflow-shared-template-rendering = false
|
|
apache-airflow-shared-timezones = false
|
|
apache-airflow-task-sdk = false
|
|
apache-airflow-task-sdk-integration-tests = false
|
|
# End of automatically generated exclude-newer-package-pip entries
|
|
|
|
# Manual overrides — see the matching block under
|
|
# `[tool.uv.exclude-newer-package]` above for rationale.
|
|
# Temporary: see the google-cloud-aiplatform note in `[tool.uv.exclude-newer-package]`.
|
|
google-cloud-aiplatform = "2026-08-13T00:00:00Z"
|
|
# Package managers bypass the cooldown — see `[tool.uv.exclude-newer-package]`.
|
|
pip = false
|
|
uv = false
|
|
# Temporary: see the pypdf note in `[tool.uv.exclude-newer-package]`.
|
|
pypdf = "2026-10-29T00:00:00Z"
|
|
|
|
[tool.uv.sources]
|
|
# These names must match the names as defined in the pyproject.toml of the workspace items,
|
|
# *not* the workspace folder paths
|
|
apache-airflow = {workspace = true}
|
|
apache-airflow-breeze = {workspace = true}
|
|
apache-airflow-dev = {workspace = true}
|
|
apache-airflow-mypy = {workspace = true}
|
|
apache-airflow-scripts = {workspace = true}
|
|
apache-airflow-core = {workspace = true}
|
|
apache-airflow-ctl = {workspace = true}
|
|
apache-airflow-ctl-tests = {workspace = true}
|
|
apache-airflow-task-sdk = { workspace = true }
|
|
apache-airflow-devel-common = { workspace = true }
|
|
apache-airflow-docker-tests = { workspace = true }
|
|
apache-airflow-e2e-tests = { workspace = true }
|
|
apache-airflow-task-sdk-integration-tests = { workspace = true }
|
|
apache-airflow-helm-chart = { workspace = true }
|
|
apache-airflow-kubernetes-tests = { workspace = true }
|
|
apache-airflow-providers = { workspace = true }
|
|
apache-airflow-docker-stack = { workspace = true }
|
|
apache-airflow-shared-configuration = { workspace = true }
|
|
apache-airflow-shared-dagnode = { workspace = true }
|
|
apache-airflow-shared-listeners = { workspace = true }
|
|
apache-airflow-shared-logging = { workspace = true }
|
|
apache-airflow-shared-module-loading = { workspace = true }
|
|
apache-airflow-shared-observability = { workspace = true }
|
|
apache-airflow-shared-plugins-manager = { workspace = true }
|
|
apache-airflow-shared-providers-discovery = { workspace = true }
|
|
apache-airflow-shared-secrets-backend = { workspace = true }
|
|
apache-airflow-shared-secrets-masker = { workspace = true }
|
|
apache-airflow-shared-serialization = { workspace = true }
|
|
apache-airflow-shared-state = { workspace = true }
|
|
apache-airflow-shared-template-rendering = { workspace = true }
|
|
apache-airflow-shared-timezones = { workspace = true }
|
|
# Automatically generated provider workspace items (update_airflow_pyproject_toml.py)
|
|
apache-airflow-providers-airbyte = { workspace = true }
|
|
apache-airflow-providers-akeyless = { workspace = true }
|
|
apache-airflow-providers-alibaba = { workspace = true }
|
|
apache-airflow-providers-amazon = { workspace = true }
|
|
apache-airflow-providers-anthropic = { workspace = true }
|
|
apache-airflow-providers-apache-arrow = { workspace = true }
|
|
apache-airflow-providers-apache-beam = { workspace = true }
|
|
apache-airflow-providers-apache-cassandra = { workspace = true }
|
|
apache-airflow-providers-apache-drill = { workspace = true }
|
|
apache-airflow-providers-apache-druid = { workspace = true }
|
|
apache-airflow-providers-apache-flink = { workspace = true }
|
|
apache-airflow-providers-apache-hdfs = { workspace = true }
|
|
apache-airflow-providers-apache-hive = { workspace = true }
|
|
apache-airflow-providers-apache-iceberg = { workspace = true }
|
|
apache-airflow-providers-apache-impala = { workspace = true }
|
|
apache-airflow-providers-apache-kafka = { workspace = true }
|
|
apache-airflow-providers-apache-kylin = { workspace = true }
|
|
apache-airflow-providers-apache-livy = { workspace = true }
|
|
apache-airflow-providers-apache-pig = { workspace = true }
|
|
apache-airflow-providers-apache-pinot = { workspace = true }
|
|
apache-airflow-providers-apache-spark = { workspace = true }
|
|
apache-airflow-providers-apache-tinkerpop = { workspace = true }
|
|
apache-airflow-providers-apprise = { workspace = true }
|
|
apache-airflow-providers-arangodb = { workspace = true }
|
|
apache-airflow-providers-asana = { workspace = true }
|
|
apache-airflow-providers-atlassian-jira = { workspace = true }
|
|
apache-airflow-providers-celery = { workspace = true }
|
|
apache-airflow-providers-clickhousedb = { workspace = true }
|
|
apache-airflow-providers-cloudant = { workspace = true }
|
|
apache-airflow-providers-cncf-kubernetes = { workspace = true }
|
|
apache-airflow-providers-cohere = { workspace = true }
|
|
apache-airflow-providers-common-ai = { workspace = true }
|
|
apache-airflow-providers-common-compat = { workspace = true }
|
|
apache-airflow-providers-common-dataquality = { workspace = true }
|
|
apache-airflow-providers-common-io = { workspace = true }
|
|
apache-airflow-providers-common-messaging = { workspace = true }
|
|
apache-airflow-providers-common-sql = { workspace = true }
|
|
apache-airflow-providers-databricks = { workspace = true }
|
|
apache-airflow-providers-datadog = { workspace = true }
|
|
apache-airflow-providers-dbt-cloud = { workspace = true }
|
|
apache-airflow-providers-dingding = { workspace = true }
|
|
apache-airflow-providers-discord = { workspace = true }
|
|
apache-airflow-providers-docker = { workspace = true }
|
|
apache-airflow-providers-duckdb = { workspace = true }
|
|
apache-airflow-providers-edge3 = { workspace = true }
|
|
apache-airflow-providers-elasticsearch = { workspace = true }
|
|
apache-airflow-providers-exasol = { workspace = true }
|
|
apache-airflow-providers-fab = { workspace = true }
|
|
apache-airflow-providers-facebook = { workspace = true }
|
|
apache-airflow-providers-ftp = { workspace = true }
|
|
apache-airflow-providers-git = { workspace = true }
|
|
apache-airflow-providers-github = { workspace = true }
|
|
apache-airflow-providers-google = { workspace = true }
|
|
apache-airflow-providers-grpc = { workspace = true }
|
|
apache-airflow-providers-hashicorp = { workspace = true }
|
|
apache-airflow-providers-http = { workspace = true }
|
|
apache-airflow-providers-ibm-db2 = { workspace = true }
|
|
apache-airflow-providers-ibm-mq = { workspace = true }
|
|
apache-airflow-providers-imap = { workspace = true }
|
|
apache-airflow-providers-influxdb = { workspace = true }
|
|
apache-airflow-providers-informatica = { workspace = true }
|
|
apache-airflow-providers-jdbc = { workspace = true }
|
|
apache-airflow-providers-jenkins = { workspace = true }
|
|
apache-airflow-providers-keycloak = { workspace = true }
|
|
apache-airflow-providers-microsoft-azure = { workspace = true }
|
|
apache-airflow-providers-microsoft-mssql = { workspace = true }
|
|
apache-airflow-providers-microsoft-psrp = { workspace = true }
|
|
apache-airflow-providers-microsoft-winrm = { workspace = true }
|
|
apache-airflow-providers-modal = { workspace = true }
|
|
apache-airflow-providers-mongo = { workspace = true }
|
|
apache-airflow-providers-mysql = { workspace = true }
|
|
apache-airflow-providers-neo4j = { workspace = true }
|
|
apache-airflow-providers-odbc = { workspace = true }
|
|
apache-airflow-providers-openai = { workspace = true }
|
|
apache-airflow-providers-openfaas = { workspace = true }
|
|
apache-airflow-providers-openlineage = { workspace = true }
|
|
apache-airflow-providers-opensearch = { workspace = true }
|
|
apache-airflow-providers-opsgenie = { workspace = true }
|
|
apache-airflow-providers-oracle = { workspace = true }
|
|
apache-airflow-providers-pagerduty = { workspace = true }
|
|
apache-airflow-providers-papermill = { workspace = true }
|
|
apache-airflow-providers-pgvector = { workspace = true }
|
|
apache-airflow-providers-pinecone = { workspace = true }
|
|
apache-airflow-providers-postgres = { workspace = true }
|
|
apache-airflow-providers-presto = { workspace = true }
|
|
apache-airflow-providers-qdrant = { workspace = true }
|
|
apache-airflow-providers-redis = { workspace = true }
|
|
apache-airflow-providers-salesforce = { workspace = true }
|
|
apache-airflow-providers-samba = { workspace = true }
|
|
apache-airflow-providers-segment = { workspace = true }
|
|
apache-airflow-providers-sendgrid = { workspace = true }
|
|
apache-airflow-providers-sftp = { workspace = true }
|
|
apache-airflow-providers-singularity = { workspace = true }
|
|
apache-airflow-providers-slack = { workspace = true }
|
|
apache-airflow-providers-smtp = { workspace = true }
|
|
apache-airflow-providers-snowflake = { workspace = true }
|
|
apache-airflow-providers-sqlite = { workspace = true }
|
|
apache-airflow-providers-ssh = { workspace = true }
|
|
apache-airflow-providers-standard = { workspace = true }
|
|
apache-airflow-providers-tableau = { workspace = true }
|
|
apache-airflow-providers-telegram = { workspace = true }
|
|
apache-airflow-providers-teradata = { workspace = true }
|
|
apache-airflow-providers-trino = { workspace = true }
|
|
apache-airflow-providers-vertica = { workspace = true }
|
|
apache-airflow-providers-vespa = { workspace = true }
|
|
apache-airflow-providers-weaviate = { workspace = true }
|
|
apache-airflow-providers-yandex = { workspace = true }
|
|
apache-airflow-providers-ydb = { workspace = true }
|
|
apache-airflow-providers-zendesk = { workspace = true }
|
|
# End of automatically generated provider workspace items
|
|
|
|
[tool.uv.workspace]
|
|
members = [
|
|
".",
|
|
"airflow-core",
|
|
"airflow-e2e-tests",
|
|
"dev/breeze",
|
|
"dev/mypy",
|
|
"dev/registry",
|
|
"airflow-ctl",
|
|
"airflow-ctl-tests",
|
|
"dev",
|
|
"devel-common",
|
|
"scripts",
|
|
"docker-tests",
|
|
"task-sdk-integration-tests",
|
|
"chart",
|
|
"kubernetes-tests",
|
|
"task-sdk",
|
|
"providers-summary-docs",
|
|
"docker-stack-docs",
|
|
"shared/configuration",
|
|
"shared/dagnode",
|
|
"shared/listeners",
|
|
"shared/logging",
|
|
"shared/module_loading",
|
|
"shared/observability",
|
|
"shared/plugins_manager",
|
|
"shared/providers_discovery",
|
|
"shared/secrets_backend",
|
|
"shared/secrets_masker",
|
|
"shared/serialization",
|
|
"shared/state",
|
|
"shared/template_rendering",
|
|
"shared/timezones",
|
|
# Automatically generated provider workspace members (update_airflow_pyproject_toml.py)
|
|
"providers/airbyte",
|
|
"providers/akeyless",
|
|
"providers/alibaba",
|
|
"providers/amazon",
|
|
"providers/anthropic",
|
|
"providers/apache/arrow",
|
|
"providers/apache/beam",
|
|
"providers/apache/cassandra",
|
|
"providers/apache/drill",
|
|
"providers/apache/druid",
|
|
"providers/apache/flink",
|
|
"providers/apache/hdfs",
|
|
"providers/apache/hive",
|
|
"providers/apache/iceberg",
|
|
"providers/apache/impala",
|
|
"providers/apache/kafka",
|
|
"providers/apache/kylin",
|
|
"providers/apache/livy",
|
|
"providers/apache/pig",
|
|
"providers/apache/pinot",
|
|
"providers/apache/spark",
|
|
"providers/apache/tinkerpop",
|
|
"providers/apprise",
|
|
"providers/arangodb",
|
|
"providers/asana",
|
|
"providers/atlassian/jira",
|
|
"providers/celery",
|
|
"providers/clickhousedb",
|
|
"providers/cloudant",
|
|
"providers/cncf/kubernetes",
|
|
"providers/cohere",
|
|
"providers/common/ai",
|
|
"providers/common/compat",
|
|
"providers/common/dataquality",
|
|
"providers/common/io",
|
|
"providers/common/messaging",
|
|
"providers/common/sql",
|
|
"providers/databricks",
|
|
"providers/datadog",
|
|
"providers/dbt/cloud",
|
|
"providers/dingding",
|
|
"providers/discord",
|
|
"providers/docker",
|
|
"providers/duckdb",
|
|
"providers/edge3",
|
|
"providers/elasticsearch",
|
|
"providers/exasol",
|
|
"providers/fab",
|
|
"providers/facebook",
|
|
"providers/ftp",
|
|
"providers/git",
|
|
"providers/github",
|
|
"providers/google",
|
|
"providers/grpc",
|
|
"providers/hashicorp",
|
|
"providers/http",
|
|
"providers/ibm/db2",
|
|
"providers/ibm/mq",
|
|
"providers/imap",
|
|
"providers/influxdb",
|
|
"providers/informatica",
|
|
"providers/jdbc",
|
|
"providers/jenkins",
|
|
"providers/keycloak",
|
|
"providers/microsoft/azure",
|
|
"providers/microsoft/mssql",
|
|
"providers/microsoft/psrp",
|
|
"providers/microsoft/winrm",
|
|
"providers/modal",
|
|
"providers/mongo",
|
|
"providers/mysql",
|
|
"providers/neo4j",
|
|
"providers/odbc",
|
|
"providers/openai",
|
|
"providers/openfaas",
|
|
"providers/openlineage",
|
|
"providers/opensearch",
|
|
"providers/opsgenie",
|
|
"providers/oracle",
|
|
"providers/pagerduty",
|
|
"providers/papermill",
|
|
"providers/pgvector",
|
|
"providers/pinecone",
|
|
"providers/postgres",
|
|
"providers/presto",
|
|
"providers/qdrant",
|
|
"providers/redis",
|
|
"providers/salesforce",
|
|
"providers/samba",
|
|
"providers/segment",
|
|
"providers/sendgrid",
|
|
"providers/sftp",
|
|
"providers/singularity",
|
|
"providers/slack",
|
|
"providers/smtp",
|
|
"providers/snowflake",
|
|
"providers/sqlite",
|
|
"providers/ssh",
|
|
"providers/standard",
|
|
"providers/tableau",
|
|
"providers/telegram",
|
|
"providers/teradata",
|
|
"providers/trino",
|
|
"providers/vertica",
|
|
"providers/vespa",
|
|
"providers/weaviate",
|
|
"providers/yandex",
|
|
"providers/ydb",
|
|
"providers/zendesk",
|
|
# End of automatically generated provider workspace members
|
|
]
|