diff --git a/CHANGELOG.md b/CHANGELOG.md index be973d83..3eb2e700 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,31 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/#semantic-versioning-200). +## [3.0.0] - 2026-06-02 + +### :crab: Breaking Changes +> [!WARNING] +> 3.0.0 changes the default `cluster_id` behavior. Applications connecting to **multiple database clusters** must now explicitly set a unique `cluster_id` for each cluster. See the [Cluster ID documentation](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-wrapper/ClusterId.md) for details. +> +> #### Migration +> +> | Scenario | Action Required | +> |---|---| +> | Single database cluster | No changes required | +> | Multiple database clusters | Review all connection strings and add a unique `cluster_id` parameter per cluster. See the [Cluster ID documentation](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-wrapper/ClusterId.md) for configuration guidance. | + +### :magic_wand: Added +* [SQLAlchemy ORM support](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-wrapper/SQLAlchemySupport.md). + +### :bug: Fixed +* New pooled connections created with stale credentials, and PostgreSQL error handler unable to correctly handle auth errors nested in connection errors ([PR #1231](https://github.com/aws/aws-advanced-python-wrapper/pull/1231)). +* Read/Write Splitting plugins not subscribed to the execute pipeline, causing idle connections to not be correctly closed during failover ([PR #1117](https://github.com/aws/aws-advanced-python-wrapper/pull/1117)). + +### :crab: Changed +* Updated the default plugin list: + * Added the [Aurora Initial Connection Strategy Plugin](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-wrapper/using-plugins/UsingTheAuroraInitialConnectionStrategyPlugin.md) for both PostgreSQL and MySQL driver dialects. + * Removed the [Host Monitoring Plugin V2](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-wrapper/using-plugins/UsingTheHostMonitoringPlugin.md) from the default plugins for MySQL driver dialect. + ## [2.1.0] - 2026-02-11 ### :magic_wand: Added * [Failover v2 Plugin](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-wrapper/using-plugins/UsingTheFailoverPlugin.md), an improved version of the failover plugin with enhanced reliability ([PR #1079](https://github.com/aws/aws-advanced-python-wrapper/pull/1079)). @@ -102,6 +127,7 @@ The Amazon Web Services (AWS) Advanced Python Wrapper allows an application to t * Support for PostgreSQL * Support for MySQL +[3.0.0]: https://github.com/aws/aws-advanced-python-wrapper/compare/2.1.0...3.0.0 [2.1.0]: https://github.com/aws/aws-advanced-python-wrapper/compare/2.0.0...2.1.0 [2.0.0]: https://github.com/aws/aws-advanced-python-wrapper/compare/1.4.0...2.0.0 [1.4.0]: https://github.com/aws/aws-advanced-python-wrapper/compare/1.3.0...1.4.0 diff --git a/Maintenance.md b/Maintenance.md index 92fa57fe..9d60d748 100644 --- a/Maintenance.md +++ b/Maintenance.md @@ -9,7 +9,8 @@ | July 28, 2025 | [Release 1.3.0](https://github.com/aws/aws-advanced-python-wrapper/releases/tag/1.3.0) | | October 17, 2025 | [Release 1.4.0](https://github.com/aws/aws-advanced-python-wrapper/releases/tag/1.4.0) | | January 14, 2026 | [Release 2.0.0](https://github.com/aws/aws-advanced-python-wrapper/releases/tag/2.0.0) | -| February 11, 2026 | [Release 2.0.0](https://github.com/aws/aws-advanced-python-wrapper/releases/tag/2.1.0) | +| February 11, 2026 | [Release 2.1.0](https://github.com/aws/aws-advanced-python-wrapper/releases/tag/2.1.0) | +| June 2, 2026 | [Release 3.0.0](https://github.com/aws/aws-advanced-python-wrapper/releases/tag/3.0.0) | `aws-advanced-python-wrapper` [follows semver](https://semver.org/#semantic-versioning-200) which means we will only release breaking changes in major versions. Generally speaking patches will be released to fix existing problems without @@ -60,7 +61,8 @@ That said, PRs with said back-ports are welcome and will follow the project's re No new releases will result from these changes, but interested parties can create their own distribution from the updated source after the PRs are merged. -| Major Version | Latest Minor Version | Status | Initial Release | Maintenance Window Start | Maintenance Window End | -|---------------|----------------------|-------------|---------------------|------------------------------|------------------------| -| 1 | 1.4.0 | Maintenance | May 16, 2024 | January 14, 2026 | January 14, 2027 | -| 2 | 2.1.0 | Current | January 14, 2026 | N/A | N/A | +| Major Version | Latest Minor Version | Status | Initial Release | Maintenance Window Start | Maintenance Window End | +|---------------|----------------------|-------------|------------------|--------------------------|------------------------| +| 1 | 1.4.0 | Maintenance | May 16, 2024 | January 14, 2026 | January 14, 2027 | +| 2 | 2.1.0 | Maintenance | January 14, 2026 | June 2, 2026 | June 2, 2027 | +| 3 | 3.0.0 | Current | June 2, 2026 | N/A | N/A | diff --git a/aws_advanced_python_wrapper/driver_info.py b/aws_advanced_python_wrapper/driver_info.py index eb5bd768..b75c85ab 100644 --- a/aws_advanced_python_wrapper/driver_info.py +++ b/aws_advanced_python_wrapper/driver_info.py @@ -15,4 +15,4 @@ class DriverInfo: DRIVER_NAME = "aws_advanced_python_wrapper" - DRIVER_VERSION = "2.1.0" + DRIVER_VERSION = "3.0.0" diff --git a/aws_advanced_python_wrapper/resources/aws_advanced_python_wrapper_messages.properties b/aws_advanced_python_wrapper/resources/aws_advanced_python_wrapper_messages.properties index ff596d54..b5f0da3c 100644 --- a/aws_advanced_python_wrapper/resources/aws_advanced_python_wrapper_messages.properties +++ b/aws_advanced_python_wrapper/resources/aws_advanced_python_wrapper_messages.properties @@ -26,7 +26,7 @@ AdfsCredentialsProviderFactory.SignOnPagePostActionUrl=[AdfsCredentialsProviderF AdfsCredentialsProviderFactory.SignOnPagePostActionRequestFailed=[AdfsCredentialsProviderFactory] ADFS SignOn Page POST action failed with HTTP status '{}', reason phrase '{}', and response '{}' AdfsCredentialsProviderFactory.SignOnPageUrl=[AdfsCredentialsProviderFactory] ADFS SignOn URL: '{}' -AwsSdk.UnsupportedRegion=[AwsSdk] Unsupported AWS region {}. For supported regions please read https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html +AwsSdk.UnsupportedRegion=[AwsSdk] Unsupported AWS region {}. Please check AWS documentation for supported AWS regions. AwsSecretsManagerPlugin.ConnectException=[AwsSecretsManagerPlugin] Error occurred while opening a connection: {} AwsSecretsManagerPlugin.EndpointOverrideInvalidConnection=[AwsSecretsManagerPlugin] A connection to the provided secrets_manager_endpoint could not be established: "{}". diff --git a/poetry.lock b/poetry.lock index 063bd8da..6cb9e857 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.3 and should not be changed by hand. [[package]] name = "asgiref" @@ -2118,10 +2118,10 @@ files = [ ] [package.dependencies] -botocore = ">=1.37.4,<2.0a.0" +botocore = ">=1.37.4,<2.0a0" [package.extras] -crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] +crt = ["botocore[crt] (>=1.37.4,<2.0a0)"] [[package]] name = "six" diff --git a/pyproject.toml b/pyproject.toml index 7cf7f9c6..e8923de5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "aws_advanced_python_wrapper" -version = "2.1.0" +version = "3.0.0" description = "Amazon Web Services (AWS) Advanced Python Wrapper" authors = ["Amazon Web Services"] readme = "README.md" diff --git a/tests/unit/test_iam_plugin.py b/tests/unit/test_iam_plugin.py index 3f528560..758b3ea8 100644 --- a/tests/unit/test_iam_plugin.py +++ b/tests/unit/test_iam_plugin.py @@ -14,7 +14,6 @@ from __future__ import annotations -import urllib.request from datetime import datetime, timedelta import pytest @@ -383,12 +382,6 @@ def test_connect_with_specified_host(iam_host: str, mocker, mock_plugin_service, assert actual_token.is_expired() is False -def test_aws_supported_regions_url_exists(): - url = "https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html" - request = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) - assert 200 == urllib.request.urlopen(request).getcode() - - @pytest.mark.parametrize("host", [ pytest.param("<>"), pytest.param("#"),