Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)).
Expand Down Expand Up @@ -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
Expand Down
12 changes: 7 additions & 5 deletions Maintenance.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 |
2 changes: 1 addition & 1 deletion aws_advanced_python_wrapper/driver_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@

class DriverInfo:
DRIVER_NAME = "aws_advanced_python_wrapper"
DRIVER_VERSION = "2.1.0"
DRIVER_VERSION = "3.0.0"
Original file line number Diff line number Diff line change
Expand Up @@ -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: "{}".
Expand Down
6 changes: 3 additions & 3 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
7 changes: 0 additions & 7 deletions tests/unit/test_iam_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

from __future__ import annotations

import urllib.request
from datetime import datetime, timedelta

import pytest
Expand Down Expand Up @@ -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("#"),
Expand Down
Loading