diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 70893998270..8d021fed5cb 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -78,7 +78,9 @@ jobs:
# We use a pinned version of Poetry to be certain it won't modify source code before we create a hash
- name: Install poetry
- run: pipx install git+https://github.com/python-poetry/poetry@68b88e5390720a3dd84f02940ec5200bfce39ac6 # v1.5.0
+ run: |
+ pipx install git+https://github.com/python-poetry/poetry@68b88e5390720a3dd84f02940ec5200bfce39ac6 # v1.5.0
+ pipx inject poetry git+https://github.com/monim67/poetry-bumpversion@ef49c63acef7fe8680789ddb31f376cc898f0012 # v0.3.0
- name: Bump package version
id: versioning
@@ -291,7 +293,7 @@ jobs:
- name: Create Git Tag
run: |
- git add pyproject.toml
+ git add pyproject.toml aws_lambda_powertools/shared/version.py
git commit -m "chore: version bump"
git tag -a v"${RELEASE_VERSION}" -m "release_version: v${RELEASE_VERSION}"
git push origin v"${RELEASE_VERSION}"
@@ -332,7 +334,7 @@ jobs:
id: create-pr
uses: ./.github/actions/create-pr
with:
- files: "pyproject.toml"
+ files: "pyproject.toml aws_lambda_powertools/shared/version.py"
temp_branch_prefix: "ci-bump"
pull_request_title: "chore(ci): bump version to ${{ needs.seal.outputs.RELEASE_VERSION }}"
github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f011fd7b4df..37205af3ffe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,8 +4,16 @@
# Unreleased
+
+
+## [v2.16.1] - 2023-06-02
+## Bug Fixes
+
+* **shared:** skip user agent on much older botocore versions ([#2366](https://github.com/awslabs/aws-lambda-powertools-python/issues/2366))
+
## Maintenance
+* version bump
@@ -3294,7 +3302,8 @@
* Merge pull request [#5](https://github.com/awslabs/aws-lambda-powertools-python/issues/5) from jfuss/feat/python38
-[Unreleased]: https://github.com/awslabs/aws-lambda-powertools-python/compare/v2.16.0...HEAD
+[Unreleased]: https://github.com/awslabs/aws-lambda-powertools-python/compare/v2.16.1...HEAD
+[v2.16.1]: https://github.com/awslabs/aws-lambda-powertools-python/compare/v2.16.0...v2.16.1
[v2.16.0]: https://github.com/awslabs/aws-lambda-powertools-python/compare/v2.15.0...v2.16.0
[v2.15.0]: https://github.com/awslabs/aws-lambda-powertools-python/compare/v2.14.1...v2.15.0
[v2.14.1]: https://github.com/awslabs/aws-lambda-powertools-python/compare/v2.14.0...v2.14.1
diff --git a/Makefile b/Makefile
index 47854f3dd27..39cab23945a 100644
--- a/Makefile
+++ b/Makefile
@@ -6,11 +6,13 @@ target:
dev:
pip install --upgrade pip pre-commit poetry
+ @$(MAKE) dev-version-plugin
poetry install --extras "all"
pre-commit install
dev-gitpod:
pip install --upgrade pip poetry
+ @$(MAKE) dev-version-plugin
poetry install --extras "all"
pre-commit install
@@ -106,3 +108,7 @@ changelog:
mypy:
poetry run mypy --pretty aws_lambda_powertools examples
+
+
+dev-version-plugin:
+ poetry self add git+https://github.com/monim67/poetry-bumpversion@ef49c63acef7fe8680789ddb31f376cc898f0012
diff --git a/aws_lambda_powertools/logging/logger.py b/aws_lambda_powertools/logging/logger.py
index a529510ba01..558c681ce9e 100644
--- a/aws_lambda_powertools/logging/logger.py
+++ b/aws_lambda_powertools/logging/logger.py
@@ -287,9 +287,9 @@ def _init_logger(self, formatter_options: Optional[Dict] = None, log_level: Unio
if self.child or is_logger_preconfigured:
return
- self._logger.setLevel(self._determine_log_level(log_level))
+ self.setLevel(self._determine_log_level(log_level))
self._configure_sampling()
- self._logger.addHandler(self.logger_handler)
+ self.addHandler(self.logger_handler)
self.structure_logs(formatter_options=formatter_options, **kwargs)
# Maintenance: We can drop this upon Py3.7 EOL. It's a backport for "location" key to work
@@ -633,6 +633,12 @@ def get_correlation_id(self) -> Optional[str]:
return self.registered_formatter.log_format.get("correlation_id")
return None
+ def setLevel(self, level: Union[str, int]) -> None:
+ return self._logger.setLevel(level)
+
+ def addHandler(self, handler: logging.Handler) -> None:
+ return self._logger.addHandler(handler)
+
@property
def registered_handler(self) -> logging.Handler:
"""Convenience property to access the first logger handler"""
diff --git a/aws_lambda_powertools/shared/version.py b/aws_lambda_powertools/shared/version.py
index 0db71627089..1c0d9617d85 100644
--- a/aws_lambda_powertools/shared/version.py
+++ b/aws_lambda_powertools/shared/version.py
@@ -1,16 +1,3 @@
-"""
- This file serves to create a constant that informs
- the current version of the Powertools package and exposes it in the main module
+"""Exposes version constant to avoid circular dependencies."""
- Since Python 3.8 there the built-in importlib.metadata
- When support for Python3.7 is dropped, we can remove the optional importlib_metadata dependency
- See: https://docs.python.org/3/library/importlib.metadata.html
-"""
-import sys
-
-if sys.version_info >= (3, 8):
- from importlib.metadata import version
-else:
- from importlib_metadata import version
-
-VERSION = version("aws-lambda-powertools")
+VERSION = "2.16.2"
diff --git a/aws_lambda_powertools/utilities/parameters/appconfig.py b/aws_lambda_powertools/utilities/parameters/appconfig.py
index 297762628e1..7fc4bcc7cbb 100644
--- a/aws_lambda_powertools/utilities/parameters/appconfig.py
+++ b/aws_lambda_powertools/utilities/parameters/appconfig.py
@@ -94,7 +94,7 @@ def __init__(
self.environment = environment
self.current_version = ""
- self._next_token = "" # nosec - token for get_latest_configuration executions
+ self._next_token: Dict[str, str] = {} # nosec - token for get_latest_configuration executions
self.last_returned_value = ""
def _get(self, name: str, **sdk_options) -> str:
@@ -108,19 +108,19 @@ def _get(self, name: str, **sdk_options) -> str:
sdk_options: dict, optional
SDK options to propagate to `start_configuration_session` API call
"""
- if not self._next_token:
+ if name not in self._next_token:
sdk_options["ConfigurationProfileIdentifier"] = name
sdk_options["ApplicationIdentifier"] = self.application
sdk_options["EnvironmentIdentifier"] = self.environment
response_configuration = self.client.start_configuration_session(**sdk_options)
- self._next_token = response_configuration["InitialConfigurationToken"]
+ self._next_token[name] = response_configuration["InitialConfigurationToken"]
# The new AppConfig APIs require two API calls to return the configuration
# First we start the session and after that we retrieve the configuration
# We need to store the token to use in the next execution
- response = self.client.get_latest_configuration(ConfigurationToken=self._next_token)
+ response = self.client.get_latest_configuration(ConfigurationToken=self._next_token[name])
return_value = response["Configuration"].read()
- self._next_token = response["NextPollConfigurationToken"]
+ self._next_token[name] = response["NextPollConfigurationToken"]
if return_value:
self.last_returned_value = return_value
diff --git a/docs/index.md b/docs/index.md
index 1a475cf0e02..5ef67526277 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -26,8 +26,8 @@ Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverles
You can install Powertools for AWS Lambda (Python) using one of the following options:
-* **Lambda Layer (x86_64)**: [**arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32**](#){: .copyMe}:clipboard:
-* **Lambda Layer (arm64)**: [**arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32**](#){: .copyMe}:clipboard:
+* **Lambda Layer (x86_64)**: [**arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33**](#){: .copyMe}:clipboard:
+* **Lambda Layer (arm64)**: [**arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33**](#){: .copyMe}:clipboard:
* **Pip**: **[`pip install "aws-lambda-powertools"`](#){: .copyMe}:clipboard:**
??? question "Using Pip? You might need to install additional dependencies."
@@ -78,60 +78,60 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
| Region | Layer ARN |
| ---------------- | ---------------------------------------------------------------------------------------------------------- |
- | `af-south-1` | [arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-east-1` | [arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-south-1` | [arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-south-2` | [arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `ca-central-1` | [arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-central-1` | [arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-central-2` | [arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-north-1` | [arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-south-1` | [arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-south-2` | [arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-west-1` | [arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-west-2` | [arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `eu-west-3` | [arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `me-central-1` | [arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `me-south-1` | [arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `sa-east-1` | [arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `us-east-1` | [arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `us-east-2` | [arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `us-west-1` | [arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
- | `us-west-2` | [arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:32](#){: .copyMe}:clipboard: |
+ | `af-south-1` | [arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-east-1` | [arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-south-1` | [arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-south-2` | [arn:aws:lambda:ap-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-4` | [arn:aws:lambda:ap-southeast-4:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `ca-central-1` | [arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-central-1` | [arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-central-2` | [arn:aws:lambda:eu-central-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-north-1` | [arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-south-1` | [arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-south-2` | [arn:aws:lambda:eu-south-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-west-1` | [arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-west-2` | [arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `eu-west-3` | [arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `me-central-1` | [arn:aws:lambda:me-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `me-south-1` | [arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `sa-east-1` | [arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `us-east-1` | [arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `us-east-2` | [arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `us-west-1` | [arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
+ | `us-west-2` | [arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2:33](#){: .copyMe}:clipboard: |
=== "arm64"
| Region | Layer ARN |
| ---------------- | ---------------------------------------------------------------------------------------------------------------- |
- | `af-south-1` | [arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-east-1` | [arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-south-1` | [arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `ca-central-1` | [arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `eu-central-1` | [arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `eu-north-1` | [arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `eu-south-1` | [arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `eu-west-1` | [arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `eu-west-2` | [arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `eu-west-3` | [arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `me-south-1` | [arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `sa-east-1` | [arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `us-east-1` | [arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `us-east-2` | [arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `us-west-1` | [arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
- | `us-west-2` | [arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32](#){: .copyMe}:clipboard: |
+ | `af-south-1` | [arn:aws:lambda:af-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-east-1` | [arn:aws:lambda:ap-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-northeast-1` | [arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-northeast-2` | [arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-northeast-3` | [arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-south-1` | [arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-1` | [arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-2` | [arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ap-southeast-3` | [arn:aws:lambda:ap-southeast-3:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `ca-central-1` | [arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `eu-central-1` | [arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `eu-north-1` | [arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `eu-south-1` | [arn:aws:lambda:eu-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `eu-west-1` | [arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `eu-west-2` | [arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `eu-west-3` | [arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `me-south-1` | [arn:aws:lambda:me-south-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `sa-east-1` | [arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `us-east-1` | [arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `us-east-2` | [arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `us-west-1` | [arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
+ | `us-west-2` | [arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33](#){: .copyMe}:clipboard: |
??? note "Note: Click to expand and copy code snippets for popular frameworks"
@@ -144,7 +144,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
Type: AWS::Serverless::Function
Properties:
Layers:
- - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
```
=== "Serverless framework"
@@ -154,7 +154,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
hello:
handler: lambda_function.lambda_handler
layers:
- - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
```
=== "CDK"
@@ -170,7 +170,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn(
self,
id="lambda-powertools",
- layer_version_arn=f"arn:aws:lambda:{env.region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32"
+ layer_version_arn=f"arn:aws:lambda:{env.region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33"
)
aws_lambda.Function(self,
'sample-app-lambda',
@@ -219,7 +219,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
role = aws_iam_role.iam_for_lambda.arn
handler = "index.test"
runtime = "python3.9"
- layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32"]
+ layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33"]
source_code_hash = filebase64sha256("lambda_function_payload.zip")
}
@@ -272,7 +272,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
? Do you want to configure advanced settings? Yes
...
? Do you want to enable Lambda layers for this function? Yes
- ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
❯ amplify push -y
@@ -283,7 +283,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
- Name:
? Which setting do you want to update? Lambda layers configuration
? Do you want to enable Lambda layers for this function? Yes
- ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
? Do you want to edit the local lambda function now? No
```
@@ -297,7 +297,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
Properties:
Architectures: [arm64]
Layers:
- - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32
+ - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33
```
=== "Serverless framework"
@@ -308,7 +308,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
handler: lambda_function.lambda_handler
architecture: arm64
layers:
- - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32
+ - arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33
```
=== "CDK"
@@ -324,7 +324,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn(
self,
id="lambda-powertools",
- layer_version_arn=f"arn:aws:lambda:{env.region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32"
+ layer_version_arn=f"arn:aws:lambda:{env.region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33"
)
aws_lambda.Function(self,
'sample-app-lambda',
@@ -374,7 +374,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
role = aws_iam_role.iam_for_lambda.arn
handler = "index.test"
runtime = "python3.9"
- layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32"]
+ layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33"]
architectures = ["arm64"]
source_code_hash = filebase64sha256("lambda_function_payload.zip")
@@ -430,7 +430,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
? Do you want to configure advanced settings? Yes
...
? Do you want to enable Lambda layers for this function? Yes
- ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32
+ ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33
❯ amplify push -y
@@ -441,7 +441,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
- Name:
? Which setting do you want to update? Lambda layers configuration
? Do you want to enable Lambda layers for this function? Yes
- ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:32
+ ? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:33
? Do you want to edit the local lambda function now? No
```
@@ -449,7 +449,7 @@ You can include Powertools for AWS Lambda (Python) Lambda Layer using [AWS Lambd
Change {region} to your AWS region, e.g. `eu-west-1`
```bash title="AWS CLI"
- aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32 --region {region}
+ aws lambda get-layer-version-by-arn --arn arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33 --region {region}
```
The pre-signed URL to download this Lambda Layer will be within `Location` key.
diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md
index 3e2fd37c8aa..7c77a976983 100644
--- a/docs/utilities/parameters.md
+++ b/docs/utilities/parameters.md
@@ -91,6 +91,9 @@ You can fetch application configurations in AWS AppConfig using `get_app_config`
The following will retrieve the latest version and store it in the cache.
+???+ warning
+ We make two API calls to fetch each unique configuration name during the first time. This is by design in AppConfig. Please consider adjusting `max_age` parameter to enhance performance.
+
=== "getting_started_appconfig.py"
```python hl_lines="5 12"
--8<-- "examples/parameters/src/getting_started_appconfig.py"
diff --git a/examples/logger/sam/template.yaml b/examples/logger/sam/template.yaml
index 7e4bde3512d..2950a21653e 100644
--- a/examples/logger/sam/template.yaml
+++ b/examples/logger/sam/template.yaml
@@ -14,7 +14,7 @@ Globals:
Layers:
# Find the latest Layer version in the official documentation
# https://awslabs.github.io/aws-lambda-powertools-python/latest/#lambda-layer
- - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
Resources:
LoggerLambdaHandlerExample:
diff --git a/examples/metrics/sam/template.yaml b/examples/metrics/sam/template.yaml
index f300066b752..3f333878143 100644
--- a/examples/metrics/sam/template.yaml
+++ b/examples/metrics/sam/template.yaml
@@ -15,7 +15,7 @@ Globals:
Layers:
# Find the latest Layer version in the official documentation
# https://awslabs.github.io/aws-lambda-powertools-python/latest/#lambda-layer
- - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
Resources:
CaptureLambdaHandlerExample:
diff --git a/examples/tracer/sam/template.yaml b/examples/tracer/sam/template.yaml
index f0da401d516..6139832c3fd 100644
--- a/examples/tracer/sam/template.yaml
+++ b/examples/tracer/sam/template.yaml
@@ -13,7 +13,7 @@ Globals:
Layers:
# Find the latest Layer version in the official documentation
# https://awslabs.github.io/aws-lambda-powertools-python/latest/#lambda-layer
- - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:32
+ - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:33
Resources:
CaptureLambdaHandlerExample:
diff --git a/package-lock.json b/package-lock.json
index 68a7e78f22c..68dc129148c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,13 +8,13 @@
"name": "aws-lambda-powertools-python-e2e",
"version": "1.0.0",
"devDependencies": {
- "aws-cdk": "^2.81.0"
+ "aws-cdk": "^2.82.0"
}
},
"node_modules/aws-cdk": {
- "version": "2.81.0",
- "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.81.0.tgz",
- "integrity": "sha512-EEwacXaauxHmVBLQzbFDOcjJOAZw57vzUQDJ7eDl3MIDSrKG2dZ1XYHVuMbSloqJpgDW6xZ9vAZ45rXTTjdSzw==",
+ "version": "2.82.0",
+ "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.82.0.tgz",
+ "integrity": "sha512-4uAhKN8HMdxxM10Th8aMQJLSINO6evYV9UKTPL0hbVQ6dh6+i5LbSejcvDRw0HfBoP6qV1LNV8P8XGLYIC3tyQ==",
"dev": true,
"bin": {
"cdk": "bin/cdk"
@@ -43,9 +43,9 @@
},
"dependencies": {
"aws-cdk": {
- "version": "2.81.0",
- "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.81.0.tgz",
- "integrity": "sha512-EEwacXaauxHmVBLQzbFDOcjJOAZw57vzUQDJ7eDl3MIDSrKG2dZ1XYHVuMbSloqJpgDW6xZ9vAZ45rXTTjdSzw==",
+ "version": "2.82.0",
+ "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.82.0.tgz",
+ "integrity": "sha512-4uAhKN8HMdxxM10Th8aMQJLSINO6evYV9UKTPL0hbVQ6dh6+i5LbSejcvDRw0HfBoP6qV1LNV8P8XGLYIC3tyQ==",
"dev": true,
"requires": {
"fsevents": "2.3.2"
diff --git a/package.json b/package.json
index dd312dfab95..17211debe46 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,6 @@
"name": "aws-lambda-powertools-python-e2e",
"version": "1.0.0",
"devDependencies": {
- "aws-cdk": "^2.81.0"
+ "aws-cdk": "^2.82.0"
}
}
diff --git a/poetry.lock b/poetry.lock
index 777650dc2a3..4bcb070b9ed 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,10 +1,9 @@
-# This file is automatically @generated by Poetry and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
[[package]]
name = "anyio"
version = "3.6.2"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
-category = "dev"
optional = false
python-versions = ">=3.6.2"
files = [
@@ -26,7 +25,6 @@ trio = ["trio (>=0.16,<0.22)"]
name = "attrs"
version = "22.2.0"
description = "Classes Without Boilerplate"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -45,7 +43,6 @@ tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy
name = "aws-cdk-asset-awscli-v1"
version = "2.2.145"
description = "A library that contains the AWS CLI for use in Lambda Layers"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -62,7 +59,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-cdk-asset-kubectl-v20"
version = "2.1.1"
description = "A library that contains kubectl for use in Lambda Layers"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -79,7 +75,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-cdk-asset-node-proxy-agent-v5"
version = "2.0.120"
description = "@aws-cdk/asset-node-proxy-agent-v5"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -96,7 +91,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-cdk-aws-apigatewayv2-alpha"
version = "2.75.1a0"
description = "The CDK Construct Library for AWS::APIGatewayv2"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -115,7 +109,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-cdk-aws-apigatewayv2-authorizers-alpha"
version = "2.75.1a0"
description = "Authorizers for AWS APIGateway V2"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -135,7 +128,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-cdk-aws-apigatewayv2-integrations-alpha"
version = "2.75.1a0"
description = "Integrations for AWS APIGateway V2"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -155,7 +147,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-cdk-lib"
version = "2.75.1"
description = "Version 2 of the AWS Cloud Development Kit library"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -176,7 +167,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "aws-requests-auth"
version = "0.4.3"
description = "AWS signature version 4 signing process for the python requests module"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -191,7 +181,6 @@ requests = ">=0.14.0"
name = "aws-sam-translator"
version = "1.68.0"
description = "AWS SAM Translator is a library that transform SAM templates into AWS CloudFormation templates"
-category = "dev"
optional = false
python-versions = ">=3.7, <=4.0, !=4.0"
files = [
@@ -200,19 +189,18 @@ files = [
]
[package.dependencies]
-boto3 = ">=1.19.5,<2.0.0"
+boto3 = ">=1.19.5,<2.dev0"
jsonschema = ">=3.2,<5"
pydantic = ">=1.8,<2.0"
typing-extensions = ">=4.4,<5"
[package.extras]
-dev = ["black (==23.1.0)", "boto3 (>=1.23,<2)", "boto3-stubs[appconfig,serverlessrepo] (>=1.19.5,<2.0.0)", "coverage (>=5.3,<8)", "dateparser (>=1.1,<2.0)", "importlib-metadata", "mypy (>=1.1.0,<1.2.0)", "parameterized (>=0.7,<1.0)", "pytest (>=6.2,<8)", "pytest-cov (>=2.10,<5)", "pytest-env (>=0.6,<1)", "pytest-rerunfailures (>=9.1,<12)", "pytest-xdist (>=2.5,<4)", "pyyaml (>=6.0,<7.0)", "requests (>=2.28,<3.0)", "ruamel.yaml (==0.17.21)", "ruff (==0.0.263)", "tenacity (>=8.0,<9.0)", "types-PyYAML (>=6.0,<7.0)", "types-jsonschema (>=3.2,<4.0)"]
+dev = ["black (==23.1.0)", "boto3 (>=1.23,<2)", "boto3-stubs[appconfig,serverlessrepo] (>=1.19.5,<2.dev0)", "coverage (>=5.3,<8)", "dateparser (>=1.1,<2.0)", "importlib-metadata", "mypy (>=1.1.0,<1.2.0)", "parameterized (>=0.7,<1.0)", "pytest (>=6.2,<8)", "pytest-cov (>=2.10,<5)", "pytest-env (>=0.6,<1)", "pytest-rerunfailures (>=9.1,<12)", "pytest-xdist (>=2.5,<4)", "pyyaml (>=6.0,<7.0)", "requests (>=2.28,<3.0)", "ruamel.yaml (==0.17.21)", "ruff (==0.0.263)", "tenacity (>=8.0,<9.0)", "types-PyYAML (>=6.0,<7.0)", "types-jsonschema (>=3.2,<4.0)"]
[[package]]
name = "aws-xray-sdk"
version = "2.12.0"
description = "The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service."
-category = "main"
optional = true
python-versions = "*"
files = [
@@ -228,7 +216,6 @@ wrapt = "*"
name = "bandit"
version = "1.7.5"
description = "Security oriented static analyser for python code."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -252,7 +239,6 @@ yaml = ["PyYAML"]
name = "black"
version = "23.3.0"
description = "The uncompromising code formatter."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -303,7 +289,6 @@ uvloop = ["uvloop (>=0.15.2)"]
name = "boto3"
version = "1.26.115"
description = "The AWS SDK for Python"
-category = "main"
optional = false
python-versions = ">= 3.7"
files = [
@@ -323,7 +308,6 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
name = "botocore"
version = "1.29.115"
description = "Low-level, data-driven core of boto 3."
-category = "main"
optional = false
python-versions = ">= 3.7"
files = [
@@ -343,7 +327,6 @@ crt = ["awscrt (==0.16.9)"]
name = "cattrs"
version = "22.2.0"
description = "Composable complex class support for attrs and dataclasses."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -360,7 +343,6 @@ typing_extensions = {version = "*", markers = "python_version < \"3.8\""}
name = "certifi"
version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -372,7 +354,6 @@ files = [
name = "cfn-lint"
version = "0.77.6"
description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved"
-category = "dev"
optional = false
python-versions = ">=3.7, <=4.0, !=4.0"
files = [
@@ -396,7 +377,6 @@ sympy = ">=1.0.0"
name = "charset-normalizer"
version = "3.1.0"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-category = "dev"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -481,7 +461,6 @@ files = [
name = "checksumdir"
version = "1.2.0"
description = "Compute a single hash of the file contents of a directory."
-category = "dev"
optional = false
python-versions = ">=3.6,<4.0"
files = [
@@ -493,7 +472,6 @@ files = [
name = "click"
version = "8.1.3"
description = "Composable command line interface toolkit"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -509,7 +487,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
-category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
@@ -521,7 +498,6 @@ files = [
name = "constructs"
version = "10.2.1"
description = "A programming model for software-defined state"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -538,7 +514,6 @@ typeguard = ">=2.13.3,<2.14.0"
name = "coverage"
version = "7.2.7"
description = "Code coverage measurement for Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -614,7 +589,6 @@ toml = ["tomli"]
name = "decorator"
version = "5.1.1"
description = "Decorators for Humans"
-category = "dev"
optional = false
python-versions = ">=3.5"
files = [
@@ -626,7 +600,6 @@ files = [
name = "eradicate"
version = "2.2.0"
description = "Removes commented-out code."
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -638,7 +611,6 @@ files = [
name = "exceptiongroup"
version = "1.1.1"
description = "Backport of PEP 654 (exception groups)"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -653,7 +625,6 @@ test = ["pytest (>=6)"]
name = "execnet"
version = "1.9.0"
description = "execnet: rapid multi-Python deployment"
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
@@ -668,7 +639,6 @@ testing = ["pre-commit"]
name = "fastjsonschema"
version = "2.17.1"
description = "Fastest Python implementation of JSON schema"
-category = "main"
optional = true
python-versions = "*"
files = [
@@ -683,7 +653,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
name = "filelock"
version = "3.12.0"
description = "A platform independent file lock."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -699,7 +668,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "p
name = "flake8"
version = "3.9.2"
description = "the modular source code checker: pep8 pyflakes and co"
-category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
files = [
@@ -717,7 +685,6 @@ pyflakes = ">=2.3.0,<2.4.0"
name = "flake8"
version = "5.0.4"
description = "the modular source code checker: pep8 pyflakes and co"
-category = "dev"
optional = false
python-versions = ">=3.6.1"
files = [
@@ -734,7 +701,6 @@ pyflakes = ">=2.5.0,<2.6.0"
name = "flake8-black"
version = "0.3.6"
description = "flake8 plugin to call black as a code style validator"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -754,7 +720,6 @@ develop = ["build", "twine"]
name = "flake8-bugbear"
version = "23.3.12"
description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -773,7 +738,6 @@ dev = ["coverage", "hypothesis", "hypothesmith (>=0.2)", "pre-commit", "pytest",
name = "flake8-builtins"
version = "2.1.0"
description = "Check for python builtins being used as variables or parameters."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -791,7 +755,6 @@ test = ["pytest"]
name = "flake8-comprehensions"
version = "3.12.0"
description = "A flake8 plugin to help you write better list/set/dict comprehensions."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -807,7 +770,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
name = "flake8-debugger"
version = "4.1.2"
description = "ipdb/pdb statement checker plugin for flake8"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -823,7 +785,6 @@ pycodestyle = "*"
name = "flake8-eradicate"
version = "1.4.0"
description = "Flake8 plugin to find commented out code"
-category = "dev"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -841,7 +802,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
name = "flake8-fixme"
version = "1.1.1"
description = "Check for FIXME, TODO and other temporary developer notes. Plugin for flake8."
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -853,7 +813,6 @@ files = [
name = "flake8-variables-names"
version = "0.0.5"
description = "A flake8 extension that helps to make more readable variables names"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -865,7 +824,6 @@ files = [
name = "future"
version = "0.18.3"
description = "Clean single-source support for Python 3 and 2"
-category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -876,7 +834,6 @@ files = [
name = "ghp-import"
version = "2.1.0"
description = "Copy your docs directly to the gh-pages branch."
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -894,7 +851,6 @@ dev = ["flake8", "markdown", "twine", "wheel"]
name = "gitdb"
version = "4.0.10"
description = "Git Object Database"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -909,7 +865,6 @@ smmap = ">=3.0.1,<6"
name = "gitpython"
version = "3.1.31"
description = "GitPython is a Python library used to interact with Git repositories"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -925,7 +880,6 @@ typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""
name = "h11"
version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -940,7 +894,6 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
name = "httpcore"
version = "0.17.0"
description = "A minimal low-level HTTP client."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -952,17 +905,16 @@ files = [
anyio = ">=3.0,<5.0"
certifi = "*"
h11 = ">=0.13,<0.15"
-sniffio = ">=1.0.0,<2.0.0"
+sniffio = "==1.*"
[package.extras]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "httpx"
version = "0.24.1"
description = "The next generation HTTP client."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -978,15 +930,14 @@ sniffio = "*"
[package.extras]
brotli = ["brotli", "brotlicffi"]
-cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "hvac"
version = "1.1.0"
description = "HashiCorp Vault API client"
-category = "dev"
optional = false
python-versions = ">=3.6.2,<4.0.0"
files = [
@@ -1002,7 +953,6 @@ requests = ">=2.27.1,<3.0.0"
name = "idna"
version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)"
-category = "dev"
optional = false
python-versions = ">=3.5"
files = [
@@ -1014,7 +964,6 @@ files = [
name = "ijson"
version = "3.2.0.post0"
description = "Iterative JSON parser with standard Python iterator interfaces"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1102,7 +1051,6 @@ files = [
name = "importlib-metadata"
version = "6.6.0"
description = "Read metadata from Python packages"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1123,7 +1071,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag
name = "importlib-resources"
version = "5.12.0"
description = "Read resources from Python packages"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1142,7 +1089,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec
name = "iniconfig"
version = "2.0.0"
description = "brain-dead simple config-ini parsing"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1154,7 +1100,6 @@ files = [
name = "isort"
version = "5.11.5"
description = "A Python utility / library to sort Python imports."
-category = "dev"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -1172,7 +1117,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"]
name = "jinja2"
version = "3.1.2"
description = "A very fast and expressive template engine."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1190,7 +1134,6 @@ i18n = ["Babel (>=2.7)"]
name = "jmespath"
version = "1.0.1"
description = "JSON Matching Expressions"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1202,7 +1145,6 @@ files = [
name = "jschema-to-python"
version = "1.2.3"
description = "Generate source code for Python classes from a JSON schema."
-category = "dev"
optional = false
python-versions = ">= 2.7"
files = [
@@ -1219,7 +1161,6 @@ pbr = "*"
name = "jsii"
version = "1.80.0"
description = "Python client for jsii runtime"
-category = "dev"
optional = false
python-versions = "~=3.7"
files = [
@@ -1240,7 +1181,6 @@ typing-extensions = ">=3.7,<5.0"
name = "jsonpatch"
version = "1.32"
description = "Apply JSON-Patches (RFC 6902)"
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
@@ -1255,7 +1195,6 @@ jsonpointer = ">=1.9"
name = "jsonpickle"
version = "3.0.1"
description = "Python library for serializing any arbitrary object graph into JSON"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1275,7 +1214,6 @@ testing-libs = ["simplejson", "ujson"]
name = "jsonpointer"
version = "2.3"
description = "Identify specific nodes in a JSON document (RFC 6901)"
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -1287,7 +1225,6 @@ files = [
name = "jsonschema"
version = "4.17.3"
description = "An implementation of JSON Schema validation for Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1311,7 +1248,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-
name = "junit-xml"
version = "1.9"
description = "Creates JUnit XML test result documents that can be read by tools such as Jenkins"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1326,7 +1262,6 @@ six = "*"
name = "mako"
version = "1.2.4"
description = "A super-fast templating language that borrows the best ideas from the existing templating languages."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1347,7 +1282,6 @@ testing = ["pytest"]
name = "mando"
version = "0.6.4"
description = "Create Python CLI apps with little to no effort at all!"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1365,7 +1299,6 @@ restructuredtext = ["rst2ansi"]
name = "markdown"
version = "3.3.7"
description = "Python implementation of Markdown."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -1383,7 +1316,6 @@ testing = ["coverage", "pyyaml"]
name = "markdown-it-py"
version = "2.2.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1409,7 +1341,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe"
version = "2.1.2"
description = "Safely add untrusted strings to HTML/XML markup."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1469,7 +1400,6 @@ files = [
name = "mccabe"
version = "0.6.1"
description = "McCabe checker, plugin for flake8"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1481,7 +1411,6 @@ files = [
name = "mccabe"
version = "0.7.0"
description = "McCabe checker, plugin for flake8"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -1493,7 +1422,6 @@ files = [
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1505,7 +1433,6 @@ files = [
name = "mergedeep"
version = "1.3.4"
description = "A deep merge function for 🐍."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -1517,7 +1444,6 @@ files = [
name = "mike"
version = "1.1.2"
description = "Manage multiple versions of your MkDocs-powered documentation"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1539,7 +1465,6 @@ test = ["coverage", "flake8 (>=3.0)", "shtab"]
name = "mkdocs"
version = "1.4.2"
description = "Project documentation with Markdown."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1569,7 +1494,6 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp
name = "mkdocs-git-revision-date-plugin"
version = "0.3.2"
description = "MkDocs plugin for setting revision date from git per markdown file."
-category = "dev"
optional = false
python-versions = ">=3.4"
files = [
@@ -1585,7 +1509,6 @@ mkdocs = ">=0.17"
name = "mkdocs-material"
version = "9.1.15"
description = "Documentation that simply works"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1608,7 +1531,6 @@ requests = ">=2.26"
name = "mkdocs-material-extensions"
version = "1.1.1"
description = "Extension pack for Python Markdown and MkDocs Material."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1620,7 +1542,6 @@ files = [
name = "mpmath"
version = "1.3.0"
description = "Python library for arbitrary-precision floating-point arithmetic"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1638,7 +1559,6 @@ tests = ["pytest (>=4.6)"]
name = "mypy"
version = "1.3.0"
description = "Optional static typing for Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1686,7 +1606,6 @@ reports = ["lxml"]
name = "mypy-boto3-appconfig"
version = "1.26.71"
description = "Type annotations for boto3.AppConfig 1.26.71 service generated with mypy-boto3-builder 7.12.3"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1701,7 +1620,6 @@ typing-extensions = ">=4.1.0"
name = "mypy-boto3-appconfigdata"
version = "1.26.70"
description = "Type annotations for boto3.AppConfigData 1.26.70 service generated with mypy-boto3-builder 7.12.3"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1714,14 +1632,13 @@ typing-extensions = ">=4.1.0"
[[package]]
name = "mypy-boto3-cloudformation"
-version = "1.26.108"
-description = "Type annotations for boto3.CloudFormation 1.26.108 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
+version = "1.26.147"
+description = "Type annotations for boto3.CloudFormation 1.26.147 service generated with mypy-boto3-builder 7.14.5"
optional = false
python-versions = ">=3.7"
files = [
- {file = "mypy-boto3-cloudformation-1.26.108.tar.gz", hash = "sha256:feeb7cae3d2b850c8fc848585e1c4410bddc9860198edd14401a1c030789994d"},
- {file = "mypy_boto3_cloudformation-1.26.108-py3-none-any.whl", hash = "sha256:566487e5037170f58229af7f9fb2c62b0e98e5a1aa5bcd5eef54afb38a214561"},
+ {file = "mypy-boto3-cloudformation-1.26.147.tar.gz", hash = "sha256:4e68713b617d7c007cd2314ebb781439cce9b8144a6077845df054fd27f537da"},
+ {file = "mypy_boto3_cloudformation-1.26.147-py3-none-any.whl", hash = "sha256:d72c47f6f731226b443d4c7bc59cdd84bdbfdab671f45efbd2fee6ed4692a26d"},
]
[package.dependencies]
@@ -1731,7 +1648,6 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
name = "mypy-boto3-cloudwatch"
version = "1.26.127"
description = "Type annotations for boto3.CloudWatch 1.26.127 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1746,7 +1662,6 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
name = "mypy-boto3-dynamodb"
version = "1.26.115"
description = "Type annotations for boto3.DynamoDB 1.26.115 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1759,14 +1674,13 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
[[package]]
name = "mypy-boto3-lambda"
-version = "1.26.122"
-description = "Type annotations for boto3.Lambda 1.26.122 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
+version = "1.26.147"
+description = "Type annotations for boto3.Lambda 1.26.147 service generated with mypy-boto3-builder 7.14.5"
optional = false
python-versions = ">=3.7"
files = [
- {file = "mypy-boto3-lambda-1.26.122.tar.gz", hash = "sha256:b46d153f69b407c76d17ba97390fad9285215fa3dcf484bb7d6ffa0880fca746"},
- {file = "mypy_boto3_lambda-1.26.122-py3-none-any.whl", hash = "sha256:2839045d23b48f7a99ac3fdc71bcecde15998245c6e515b1cf2e8f589a9ae23e"},
+ {file = "mypy-boto3-lambda-1.26.147.tar.gz", hash = "sha256:18cc123c82be6a10cb5c6eefdbc92072f2d546ec6b2ce6e3253d4a242b3acb27"},
+ {file = "mypy_boto3_lambda-1.26.147-py3-none-any.whl", hash = "sha256:8a6b8b9a4259137321f5119763605da63c6fc57db7846aa14d9c70d56a878e10"},
]
[package.dependencies]
@@ -1776,7 +1690,6 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
name = "mypy-boto3-logs"
version = "1.26.53"
description = "Type annotations for boto3.CloudWatchLogs 1.26.53 service generated with mypy-boto3-builder 7.12.3"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1791,7 +1704,6 @@ typing-extensions = ">=4.1.0"
name = "mypy-boto3-s3"
version = "1.26.127"
description = "Type annotations for boto3.S3 1.26.127 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1806,7 +1718,6 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
name = "mypy-boto3-secretsmanager"
version = "1.26.135"
description = "Type annotations for boto3.SecretsManager 1.26.135 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1821,7 +1732,6 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
name = "mypy-boto3-ssm"
version = "1.26.97"
description = "Type annotations for boto3.SSM 1.26.97 service generated with mypy-boto3-builder 7.13.0"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1836,7 +1746,6 @@ typing-extensions = ">=4.1.0"
name = "mypy-boto3-xray"
version = "1.26.122"
description = "Type annotations for boto3.XRay 1.26.122 service generated with mypy-boto3-builder 7.14.5"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1851,7 +1760,6 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.9\""}
name = "mypy-extensions"
version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker."
-category = "dev"
optional = false
python-versions = ">=3.5"
files = [
@@ -1863,7 +1771,6 @@ files = [
name = "networkx"
version = "2.6.3"
description = "Python package for creating and manipulating graphs and networks"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1882,7 +1789,6 @@ test = ["codecov (>=2.1)", "pytest (>=6.2)", "pytest-cov (>=2.12)"]
name = "packaging"
version = "23.1"
description = "Core utilities for Python packages"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1894,7 +1800,6 @@ files = [
name = "pathspec"
version = "0.11.1"
description = "Utility library for gitignore style pattern matching of file paths."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1906,7 +1811,6 @@ files = [
name = "pbr"
version = "5.11.1"
description = "Python Build Reasonableness"
-category = "dev"
optional = false
python-versions = ">=2.6"
files = [
@@ -1918,7 +1822,6 @@ files = [
name = "pdoc3"
version = "0.10.0"
description = "Auto-generate API documentation for Python projects."
-category = "dev"
optional = false
python-versions = ">= 3.6"
files = [
@@ -1934,7 +1837,6 @@ markdown = ">=3.0"
name = "pkgutil-resolve-name"
version = "1.3.10"
description = "Resolve a name to an object."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -1946,7 +1848,6 @@ files = [
name = "platformdirs"
version = "3.2.0"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -1965,7 +1866,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-
name = "pluggy"
version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -1984,7 +1884,6 @@ testing = ["pytest", "pytest-benchmark"]
name = "publication"
version = "0.0.3"
description = "Publication helps you maintain public-api-friendly modules by preventing unintentional access to private implementation details via introspection."
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -1996,7 +1895,6 @@ files = [
name = "py"
version = "1.11.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
@@ -2008,7 +1906,6 @@ files = [
name = "py-cpuinfo"
version = "9.0.0"
description = "Get CPU info with pure Python"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2020,7 +1917,6 @@ files = [
name = "pycodestyle"
version = "2.7.0"
description = "Python style guide checker"
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -2032,7 +1928,6 @@ files = [
name = "pycodestyle"
version = "2.9.1"
description = "Python style guide checker"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2044,7 +1939,6 @@ files = [
name = "pydantic"
version = "1.10.8"
description = "Data validation and settings management using python type hints"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2097,7 +1991,6 @@ email = ["email-validator (>=1.0.3)"]
name = "pyflakes"
version = "2.3.1"
description = "passive checker of Python programs"
-category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -2109,7 +2002,6 @@ files = [
name = "pyflakes"
version = "2.5.0"
description = "passive checker of Python programs"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2121,7 +2013,6 @@ files = [
name = "pygments"
version = "2.15.1"
description = "Pygments is a syntax highlighting package written in Python."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2136,7 +2027,6 @@ plugins = ["importlib-metadata"]
name = "pyhcl"
version = "0.4.4"
description = "HCL configuration parser for python"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2147,7 +2037,6 @@ files = [
name = "pymdown-extensions"
version = "10.0"
description = "Extension pack for Python Markdown."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2163,7 +2052,6 @@ pyyaml = "*"
name = "pyrsistent"
version = "0.19.3"
description = "Persistent/Functional/Immutable data structures"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2200,7 +2088,6 @@ files = [
name = "pytest"
version = "7.3.1"
description = "pytest: simple powerful testing with Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2224,7 +2111,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no
name = "pytest-asyncio"
version = "0.21.0"
description = "Pytest support for asyncio"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2244,7 +2130,6 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy
name = "pytest-benchmark"
version = "4.0.0"
description = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2265,7 +2150,6 @@ histogram = ["pygal", "pygaljs"]
name = "pytest-cov"
version = "4.1.0"
description = "Pytest plugin for measuring coverage."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2284,7 +2168,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale
name = "pytest-mock"
version = "3.10.0"
description = "Thin-wrapper around the mock package for easier use with pytest"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2302,7 +2185,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"]
name = "pytest-xdist"
version = "3.3.1"
description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2323,7 +2205,6 @@ testing = ["filelock"]
name = "python-dateutil"
version = "2.8.2"
description = "Extensions to the standard Python datetime module"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
@@ -2338,7 +2219,6 @@ six = ">=1.5"
name = "python-snappy"
version = "0.6.1"
description = "Python library for the snappy compression library from Google"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2396,7 +2276,6 @@ files = [
name = "pyyaml"
version = "6.0"
description = "YAML parser and emitter for Python"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2446,7 +2325,6 @@ files = [
name = "pyyaml-env-tag"
version = "0.1"
description = "A custom YAML tag for referencing environment variables in YAML files. "
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2461,7 +2339,6 @@ pyyaml = "*"
name = "radon"
version = "5.1.0"
description = "Code Metrics in Python"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2478,7 +2355,6 @@ mando = ">=0.6,<0.7"
name = "regex"
version = "2022.10.31"
description = "Alternative regular expression module, to replace re."
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2576,7 +2452,6 @@ files = [
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2598,7 +2473,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "retry"
version = "0.9.2"
description = "Easy to use retry decorator."
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2614,7 +2488,6 @@ py = ">=1.4.26,<2.0.0"
name = "rich"
version = "13.3.4"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "dev"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -2634,7 +2507,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "s3transfer"
version = "0.6.0"
description = "An Amazon S3 Transfer Manager"
-category = "main"
optional = false
python-versions = ">= 3.7"
files = [
@@ -2652,7 +2524,6 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
name = "sarif-om"
version = "1.0.4"
description = "Classes implementing the SARIF 2.1.0 object model."
-category = "dev"
optional = false
python-versions = ">= 2.7"
files = [
@@ -2666,19 +2537,18 @@ pbr = "*"
[[package]]
name = "sentry-sdk"
-version = "1.24.0"
+version = "1.25.0"
description = "Python client for Sentry (https://sentry.io)"
-category = "dev"
optional = false
python-versions = "*"
files = [
- {file = "sentry-sdk-1.24.0.tar.gz", hash = "sha256:0bbcecda9f51936904c1030e7fef0fe693e633888f02a14d1cb68646a50e83b3"},
- {file = "sentry_sdk-1.24.0-py2.py3-none-any.whl", hash = "sha256:56d6d9d194c898d853a7c1dd99bed92ce82334ee1282292c15bcc967ff1a49b5"},
+ {file = "sentry-sdk-1.25.0.tar.gz", hash = "sha256:5be3296fc574fa8a4d9b213b4dcf8c8d0246c08f8bd78315c6286f386c37555a"},
+ {file = "sentry_sdk-1.25.0-py2.py3-none-any.whl", hash = "sha256:fe85cf5d0b3d0aa3480df689f9f6dc487de783defb0a95043368375dc893645e"},
]
[package.dependencies]
certifi = "*"
-urllib3 = {version = ">=1.26.11,<2.0.0", markers = "python_version >= \"3.6\""}
+urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""}
[package.extras]
aiohttp = ["aiohttp (>=3.5)"]
@@ -2711,7 +2581,6 @@ tornado = ["tornado (>=5)"]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -2723,7 +2592,6 @@ files = [
name = "smmap"
version = "5.0.0"
description = "A pure Python implementation of a sliding window memory map manager"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2735,7 +2603,6 @@ files = [
name = "sniffio"
version = "1.3.0"
description = "Sniff out which async library your code is running under"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2747,7 +2614,6 @@ files = [
name = "stevedore"
version = "3.5.2"
description = "Manage dynamic plugins for Python applications"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2763,7 +2629,6 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0"
name = "sympy"
version = "1.10.1"
description = "Computer algebra system (CAS) in Python"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2778,7 +2643,6 @@ mpmath = ">=0.19"
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2790,7 +2654,6 @@ files = [
name = "typed-ast"
version = "1.5.4"
description = "a fork of Python 2 and 3 ast modules with type comment support"
-category = "dev"
optional = false
python-versions = ">=3.6"
files = [
@@ -2824,7 +2687,6 @@ files = [
name = "typeguard"
version = "2.13.3"
description = "Run-time type checker for Python"
-category = "dev"
optional = false
python-versions = ">=3.5.3"
files = [
@@ -2840,7 +2702,6 @@ test = ["mypy", "pytest", "typing-extensions"]
name = "types-python-dateutil"
version = "2.8.19.13"
description = "Typing stubs for python-dateutil"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2852,7 +2713,6 @@ files = [
name = "types-requests"
version = "2.31.0.1"
description = "Typing stubs for requests"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2867,7 +2727,6 @@ types-urllib3 = "*"
name = "types-urllib3"
version = "1.26.25.10"
description = "Typing stubs for urllib3"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2879,7 +2738,6 @@ files = [
name = "typing-extensions"
version = "4.6.2"
description = "Backported and Experimental Type Hints for Python 3.7+"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -2891,7 +2749,6 @@ files = [
name = "urllib3"
version = "1.26.15"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
@@ -2908,7 +2765,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "verspec"
version = "0.1.0"
description = "Flexible version handling"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -2923,7 +2779,6 @@ test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"]
name = "watchdog"
version = "3.0.0"
description = "Filesystem events monitoring"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -2963,7 +2818,6 @@ watchmedo = ["PyYAML (>=3.10)"]
name = "wrapt"
version = "1.15.0"
description = "Module for decorators, wrappers and monkey patching."
-category = "main"
optional = true
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
files = [
@@ -3048,7 +2902,6 @@ files = [
name = "xenon"
version = "0.9.0"
description = "Monitor code metrics for Python on your CI server"
-category = "dev"
optional = false
python-versions = "*"
files = [
@@ -3065,7 +2918,6 @@ requests = ">=2.0,<3.0"
name = "zipp"
version = "3.15.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -3078,7 +2930,7 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker
testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"]
[extras]
-all = ["pydantic", "aws-xray-sdk", "fastjsonschema"]
+all = ["aws-xray-sdk", "fastjsonschema", "pydantic"]
aws-sdk = ["boto3"]
parser = ["pydantic"]
tracer = ["aws-xray-sdk"]
@@ -3087,4 +2939,4 @@ validation = ["fastjsonschema"]
[metadata]
lock-version = "2.0"
python-versions = "^3.7.4"
-content-hash = "5f0f3b40a4b7a8dee3008f7739c488a10102751142042c1a6ce3d3e63977d274"
+content-hash = "23fcc55cee4680f4e082103b5fbc74fb182da8e25cc7a8498677d1efc20f6a3d"
diff --git a/pyproject.toml b/pyproject.toml
index c3601fdd66a..9b2ba836cf6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "aws_lambda_powertools"
-version = "2.16.0"
+version = "2.16.2"
description = "Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity."
authors = ["Amazon Web Services"]
include = ["aws_lambda_powertools/py.typed", "THIRD-PARTY-LICENSES"]
@@ -32,7 +32,6 @@ aws-xray-sdk = { version = "^2.8.0", optional = true }
fastjsonschema = { version = "^2.14.5", optional = true }
pydantic = { version = "^1.8.2", optional = true }
boto3 = { version = "^1.20.32", optional = true }
-importlib-metadata = {version = "^6.6.0", python = "<3.8"}
typing-extensions = "^4.6.2"
[tool.poetry.dev-dependencies]
@@ -72,10 +71,10 @@ aws-cdk-lib = "^2.75.0"
pytest-benchmark = "^4.0.0"
python-snappy = "^0.6.1"
mypy-boto3-appconfig = "^1.26.71"
-mypy-boto3-cloudformation = "^1.26.108"
+mypy-boto3-cloudformation = "^1.26.147"
mypy-boto3-cloudwatch = "^1.26.127"
mypy-boto3-dynamodb = "^1.26.115"
-mypy-boto3-lambda = "^1.26.122"
+mypy-boto3-lambda = "^1.26.147"
mypy-boto3-logs = "^1.26.53"
mypy-boto3-secretsmanager = "^1.26.135"
mypy-boto3-ssm = "^1.26.97"
@@ -182,6 +181,10 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry.build]
generate-setup-file = true
+[tool.poetry_bumpversion.file."aws_lambda_powertools/shared/version.py"]
+search = 'VERSION = "{current_version}"'
+replace = 'VERSION = "{new_version}"'
+
# NOTE
# As of now, Feb 2020, flake8 don't support pyproject
# For latest: https://github.com/flying-sheep/awesome-python-packaging
diff --git a/tests/functional/test_utilities_parameters.py b/tests/functional/test_utilities_parameters.py
index 83b6440a50c..c03a20cdab8 100644
--- a/tests/functional/test_utilities_parameters.py
+++ b/tests/functional/test_utilities_parameters.py
@@ -2171,7 +2171,7 @@ def test_appconf_provider_get_configuration_no_transform(mock_name, config):
stubber.activate()
try:
- value: str = provider.get(mock_name)
+ value: bytes = provider.get(mock_name)
str_value = value.decode("utf-8")
assert str_value == json.dumps(mock_body_json)
stubber.assert_no_pending_responses()
@@ -2179,6 +2179,60 @@ def test_appconf_provider_get_configuration_no_transform(mock_name, config):
stubber.deactivate()
+def test_appconf_provider_multiple_unique_config_names(mock_name, config):
+ """
+ Test appconfig_provider.get with multiple config names
+ """
+
+ # GIVEN a provider instance, we should be able to retrieve multiple appconfig profiles.
+ environment = "dev"
+ application = "myapp"
+ provider = parameters.AppConfigProvider(environment=environment, application=application, config=config)
+
+ mock_body_json_first_call = {"myenvvar1": "Black Panther", "myenvvar2": 3}
+ encoded_message_first_call = json.dumps(mock_body_json_first_call).encode("utf-8")
+ mock_value_first_call = StreamingBody(BytesIO(encoded_message_first_call), len(encoded_message_first_call))
+
+ mock_body_json_second_call = {"myenvvar1": "Thor", "myenvvar2": 5}
+ encoded_message_second_call = json.dumps(mock_body_json_second_call).encode("utf-8")
+ mock_value_second_call = StreamingBody(BytesIO(encoded_message_second_call), len(encoded_message_second_call))
+
+ # WHEN making two API calls using the same provider instance.
+ stubber = stub.Stubber(provider.client)
+
+ response_get_latest_config_first_call = {
+ "Configuration": mock_value_first_call,
+ "NextPollConfigurationToken": "initial_token",
+ "ContentType": "application/json",
+ }
+
+ response_start_config_session = {"InitialConfigurationToken": "initial_token"}
+ stubber.add_response("start_configuration_session", response_start_config_session)
+ stubber.add_response("get_latest_configuration", response_get_latest_config_first_call)
+
+ response_get_latest_config_second_call = {
+ "Configuration": mock_value_second_call,
+ "NextPollConfigurationToken": "initial_token",
+ "ContentType": "application/json",
+ }
+ response_start_config_session = {"InitialConfigurationToken": "initial_token"}
+ stubber.add_response("start_configuration_session", response_start_config_session)
+ stubber.add_response("get_latest_configuration", response_get_latest_config_second_call)
+
+ stubber.activate()
+
+ try:
+ # THEN we should expect different return values.
+ value_first_call: bytes = provider.get(mock_name)
+ value_second_call: bytes = provider.get(f"{mock_name}_ second_config")
+
+ assert value_first_call != value_second_call
+ stubber.assert_no_pending_responses()
+
+ finally:
+ stubber.deactivate()
+
+
def test_appconf_get_app_config_no_transform(monkeypatch, mock_name):
"""
Test get_app_config()