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" },

Reply via email to