This is an automated email from the ASF dual-hosted git repository.
rahulvats pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new a00e48c2421 Add Python 3.14 Support (#64096)
a00e48c2421 is described below
commit a00e48c2421a4d354a5c6cac6938a4510c7536d4
Author: Dev-iL <[email protected]>
AuthorDate: Mon Mar 23 15:07:18 2026 +0200
Add Python 3.14 Support (#64096)
Un-exclude the amazon provider from py3.14
---
dev/breeze/tests/test_selective_checks.py | 1 -
providers/amazon/provider.yaml | 3 ---
providers/amazon/pyproject.toml | 3 ++-
pyproject.toml | 12 +++++------
.../prek/test_check_excluded_provider_markers.py | 23 +++++++++++-----------
uv.lock | 20 +++++++++----------
6 files changed, 30 insertions(+), 32 deletions(-)
diff --git a/dev/breeze/tests/test_selective_checks.py
b/dev/breeze/tests/test_selective_checks.py
index 86cfec23084..bd26d1f6ba5 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -1383,7 +1383,6 @@ def test_excluded_providers():
"excluded-providers-as-string": json.dumps(
{
"3.14": [
- "amazon", # Depends on lxml<6
"apache.cassandra", # Enable when the next release
after 3.29.3 is available
],
}
diff --git a/providers/amazon/provider.yaml b/providers/amazon/provider.yaml
index a56cdcd3343..a7e2a9f7b0b 100644
--- a/providers/amazon/provider.yaml
+++ b/providers/amazon/provider.yaml
@@ -119,9 +119,6 @@ versions:
- 1.1.0
- 1.0.0
-excluded-python-versions:
- - "3.14"
-
integrations:
- integration-name: Amazon Athena
external-doc-url: https://aws.amazon.com/athena/
diff --git a/providers/amazon/pyproject.toml b/providers/amazon/pyproject.toml
index 0ecd0a0617c..dfad518ecbb 100644
--- a/providers/amazon/pyproject.toml
+++ b/providers/amazon/pyproject.toml
@@ -49,9 +49,10 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Topic :: System :: Monitoring",
]
-requires-python = ">=3.10,!=3.14.*"
+requires-python = ">=3.10"
# The dependencies should be modified in place in the generated file.
# Any change in the dependencies is preserved when the file is regenerated
diff --git a/pyproject.toml b/pyproject.toml
index 812f4c13147..88b0a2113f0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -101,7 +101,7 @@ packages = []
"apache-airflow-providers-alibaba>=3.0.0"
]
"amazon" = [
- "apache-airflow-providers-amazon>=9.0.0; python_version !=\"3.14\""
+ "apache-airflow-providers-amazon>=9.0.0"
]
"apache.cassandra" = [
"apache-airflow-providers-apache-cassandra>=3.7.0; python_version
!=\"3.14\""
@@ -393,7 +393,7 @@ packages = []
"apache-airflow-core[all]",
"apache-airflow-providers-airbyte>=5.0.0",
"apache-airflow-providers-alibaba>=3.0.0",
- "apache-airflow-providers-amazon>=9.0.0; python_version !=\"3.14\"",
+ "apache-airflow-providers-amazon>=9.0.0",
"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",
@@ -496,7 +496,7 @@ packages = []
# 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; python_version
!=\"3.14\"",
+ "apache-airflow-providers-amazon[aiobotocore]>=9.6.0",
]
"apache-atlas" = [
"atlasclient>=0.1.2",
@@ -505,7 +505,7 @@ packages = []
"apache-airflow-providers-apache-hdfs",
]
"amazon-aws-auth" = [
- "apache-airflow-providers-amazon[python3-saml]; python_version !=\"3.14\"",
+ "apache-airflow-providers-amazon[python3-saml]",
]
"cloudpickle" = [
"cloudpickle>=2.2.1",
@@ -536,7 +536,7 @@ packages = []
"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]; python_version !=\"3.14\"",
+ "apache-airflow-providers-amazon[s3fs]",
]
"uv" = [
"uv>=0.10.12",
@@ -1340,7 +1340,7 @@ leveldb = [
[tool.uv]
required-version = ">=0.6.3"
no-build-isolation-package = ["sphinx-redoc"]
-constraint-dependencies = ["lxml==6.0.2"]
+constraint-dependencies = ["lxml==6.0.2"] # Remove after
https://github.com/aws/amazon-redshift-python-driver/pull/272
[tool.uv.sources]
# These names must match the names as defined in the pyproject.toml of the
workspace items,
diff --git a/scripts/tests/ci/prek/test_check_excluded_provider_markers.py
b/scripts/tests/ci/prek/test_check_excluded_provider_markers.py
index 159e7bd2bde..c068367c06a 100644
--- a/scripts/tests/ci/prek/test_check_excluded_provider_markers.py
+++ b/scripts/tests/ci/prek/test_check_excluded_provider_markers.py
@@ -19,41 +19,42 @@ from __future__ import annotations
import pytest
from check_excluded_provider_markers import _check_dependency
-EXCLUDED = {
- "apache-airflow-providers-amazon": ["3.14"],
-}
-
class TestCheckDependency:
+ EXCLUDED = {
+ "apache-airflow-providers-amazon": ["3.14"],
+ "apache-airflow-providers-google": ["3.14"],
+ }
+
def test_no_error_when_marker_present(self):
dep = 'apache-airflow-providers-amazon>=9.0.0; python_version !="3.14"'
- assert _check_dependency(dep, EXCLUDED) == []
+ assert _check_dependency(dep, self.EXCLUDED) == []
def test_error_when_marker_missing(self):
dep = "apache-airflow-providers-amazon>=9.0.0"
- errors = _check_dependency(dep, EXCLUDED)
+ errors = _check_dependency(dep, self.EXCLUDED)
assert len(errors) == 1
assert '!="3.14"' in errors[0]
def test_error_when_no_marker_with_extras(self):
dep = "apache-airflow-providers-amazon[aiobotocore]>=9.6.0"
- errors = _check_dependency(dep, EXCLUDED)
+ errors = _check_dependency(dep, self.EXCLUDED)
assert len(errors) == 1
def test_no_error_with_extras_and_marker(self):
dep = 'apache-airflow-providers-amazon[aiobotocore]>=9.6.0;
python_version !="3.14"'
- assert _check_dependency(dep, EXCLUDED) == []
+ assert _check_dependency(dep, self.EXCLUDED) == []
def test_no_error_for_non_excluded_provider(self):
dep = "apache-airflow-providers-celery>=1.0.0"
- assert _check_dependency(dep, EXCLUDED) == []
+ assert _check_dependency(dep, self.EXCLUDED) == []
def test_no_error_for_non_provider_dependency(self):
dep = "requests>=2.28"
- assert _check_dependency(dep, EXCLUDED) == []
+ assert _check_dependency(dep, self.EXCLUDED) == []
def test_invalid_requirement_ignored(self):
- assert _check_dependency("not a valid requirement!!!", EXCLUDED) == []
+ assert _check_dependency("not a valid requirement!!!", self.EXCLUDED)
== []
@pytest.mark.parametrize(
"excluded_versions",
diff --git a/uv.lock b/uv.lock
index 653885f7f2e..5a6bdcca74c 100644
--- a/uv.lock
+++ b/uv.lock
@@ -827,7 +827,7 @@ dependencies = [
[package.optional-dependencies]
aiobotocore = [
- { name = "apache-airflow-providers-amazon", extra = ["aiobotocore"],
marker = "python_full_version != '3.14.*'" },
+ { name = "apache-airflow-providers-amazon", extra = ["aiobotocore"] },
]
airbyte = [
{ name = "apache-airflow-providers-airbyte" },
@@ -840,7 +840,7 @@ all = [
{ name = "apache-airflow-core", extra = ["all", "async", "graphviz",
"gunicorn", "kerberos", "memray", "otel", "statsd"] },
{ name = "apache-airflow-providers-airbyte" },
{ name = "apache-airflow-providers-alibaba" },
- { name = "apache-airflow-providers-amazon", extra = ["aiobotocore",
"python3-saml", "s3fs"], marker = "python_full_version != '3.14.*'" },
+ { name = "apache-airflow-providers-amazon", extra = ["aiobotocore",
"python3-saml", "s3fs"] },
{ name = "apache-airflow-providers-apache-cassandra", marker =
"python_full_version != '3.14.*'" },
{ name = "apache-airflow-providers-apache-drill" },
{ name = "apache-airflow-providers-apache-druid" },
@@ -951,10 +951,10 @@ all-task-sdk = [
{ name = "apache-airflow-task-sdk", extra = ["all"] },
]
amazon = [
- { name = "apache-airflow-providers-amazon", marker = "python_full_version
!= '3.14.*'" },
+ { name = "apache-airflow-providers-amazon" },
]
amazon-aws-auth = [
- { name = "apache-airflow-providers-amazon", extra = ["python3-saml"],
marker = "python_full_version != '3.14.*'" },
+ { name = "apache-airflow-providers-amazon", extra = ["python3-saml"] },
]
apache-atlas = [
{ name = "atlasclient" },
@@ -1227,7 +1227,7 @@ redis = [
{ name = "apache-airflow-providers-redis" },
]
s3fs = [
- { name = "apache-airflow-providers-amazon", extra = ["s3fs"], marker =
"python_full_version != '3.14.*'" },
+ { name = "apache-airflow-providers-amazon", extra = ["s3fs"] },
]
salesforce = [
{ name = "apache-airflow-providers-salesforce" },
@@ -1357,11 +1357,11 @@ requires-dist = [
{ name = "apache-airflow-providers-airbyte", marker = "extra == 'all'",
editable = "providers/airbyte" },
{ name = "apache-airflow-providers-alibaba", marker = "extra ==
'alibaba'", editable = "providers/alibaba" },
{ name = "apache-airflow-providers-alibaba", marker = "extra == 'all'",
editable = "providers/alibaba" },
- { name = "apache-airflow-providers-amazon", marker = "python_full_version
!= '3.14.*' and extra == 'all'", editable = "providers/amazon" },
- { name = "apache-airflow-providers-amazon", marker = "python_full_version
!= '3.14.*' and extra == 'amazon'", editable = "providers/amazon" },
- { name = "apache-airflow-providers-amazon", extras = ["aiobotocore"],
marker = "python_full_version != '3.14.*' and extra == 'aiobotocore'", editable
= "providers/amazon" },
- { name = "apache-airflow-providers-amazon", extras = ["python3-saml"],
marker = "python_full_version != '3.14.*' and extra == 'amazon-aws-auth'",
editable = "providers/amazon" },
- { name = "apache-airflow-providers-amazon", extras = ["s3fs"], marker =
"python_full_version != '3.14.*' and extra == 's3fs'", editable =
"providers/amazon" },
+ { name = "apache-airflow-providers-amazon", marker = "extra == 'all'",
editable = "providers/amazon" },
+ { name = "apache-airflow-providers-amazon", marker = "extra == 'amazon'",
editable = "providers/amazon" },
+ { name = "apache-airflow-providers-amazon", extras = ["aiobotocore"],
marker = "extra == 'aiobotocore'", editable = "providers/amazon" },
+ { name = "apache-airflow-providers-amazon", extras = ["python3-saml"],
marker = "extra == 'amazon-aws-auth'", editable = "providers/amazon" },
+ { name = "apache-airflow-providers-amazon", extras = ["s3fs"], marker =
"extra == 's3fs'", editable = "providers/amazon" },
{ name = "apache-airflow-providers-apache-cassandra", marker =
"python_full_version != '3.14.*' and extra == 'all'", editable =
"providers/apache/cassandra" },
{ name = "apache-airflow-providers-apache-cassandra", marker =
"python_full_version != '3.14.*' and extra == 'apache-cassandra'", editable =
"providers/apache/cassandra" },
{ name = "apache-airflow-providers-apache-drill", marker = "extra ==
'all'", editable = "providers/apache/drill" },