diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py index 86cfec230847d..bd26d1f6ba573 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 a56cdcd334326..a7e2a9f7b0b47 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 0ecd0a0617c82..dfad518ecbbe1 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 812f4c13147d7..88b0a2113f0de 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 159e7bd2bde6b..c068367c06a2e 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 @@ 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 653885f7f2e55..5a6bdcca74c91 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" },