From 252445d1866a24936ca6399a79da8ff40ca35e06 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 25 Jul 2023 14:39:50 +0200 Subject: [PATCH 1/5] fix(parameters): make cache aware of single vs multiple calls Signed-off-by: heitorlessa --- aws_lambda_powertools/utilities/parameters/base.py | 2 +- aws_lambda_powertools/utilities/parameters/types.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/aws_lambda_powertools/utilities/parameters/base.py b/aws_lambda_powertools/utilities/parameters/base.py index 710634636d0..411a2520ae9 100644 --- a/aws_lambda_powertools/utilities/parameters/base.py +++ b/aws_lambda_powertools/utilities/parameters/base.py @@ -27,7 +27,7 @@ from aws_lambda_powertools.shared import constants, user_agent from aws_lambda_powertools.shared.functions import resolve_max_age -from aws_lambda_powertools.utilities.parameters.types import TransformOptions +from aws_lambda_powertools.utilities.parameters.types import RecursiveOptions, TransformOptions from .exceptions import GetParameterError, TransformParameterError diff --git a/aws_lambda_powertools/utilities/parameters/types.py b/aws_lambda_powertools/utilities/parameters/types.py index faa06cee89e..a916f1a344d 100644 --- a/aws_lambda_powertools/utilities/parameters/types.py +++ b/aws_lambda_powertools/utilities/parameters/types.py @@ -1,3 +1,4 @@ from aws_lambda_powertools.shared.types import Literal TransformOptions = Literal["json", "binary", "auto", None] +RecursiveOptions = Literal[True, False] From 4140d3169b02c3408c142e6fad6ddfd511db278e Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 25 Jul 2023 15:16:51 +0200 Subject: [PATCH 2/5] chore: cleanup, add test for single and nested Signed-off-by: heitorlessa --- aws_lambda_powertools/utilities/parameters/base.py | 2 +- aws_lambda_powertools/utilities/parameters/types.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/aws_lambda_powertools/utilities/parameters/base.py b/aws_lambda_powertools/utilities/parameters/base.py index 411a2520ae9..710634636d0 100644 --- a/aws_lambda_powertools/utilities/parameters/base.py +++ b/aws_lambda_powertools/utilities/parameters/base.py @@ -27,7 +27,7 @@ from aws_lambda_powertools.shared import constants, user_agent from aws_lambda_powertools.shared.functions import resolve_max_age -from aws_lambda_powertools.utilities.parameters.types import RecursiveOptions, TransformOptions +from aws_lambda_powertools.utilities.parameters.types import TransformOptions from .exceptions import GetParameterError, TransformParameterError diff --git a/aws_lambda_powertools/utilities/parameters/types.py b/aws_lambda_powertools/utilities/parameters/types.py index a916f1a344d..faa06cee89e 100644 --- a/aws_lambda_powertools/utilities/parameters/types.py +++ b/aws_lambda_powertools/utilities/parameters/types.py @@ -1,4 +1,3 @@ from aws_lambda_powertools.shared.types import Literal TransformOptions = Literal["json", "binary", "auto", None] -RecursiveOptions = Literal[True, False] From c8424dfe764da5f263f6aa239453410da05229b7 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 21 Nov 2023 15:38:01 +0100 Subject: [PATCH 3/5] chore: test logger can use custom jmespath fns Signed-off-by: heitorlessa --- tests/functional/test_logger.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/functional/test_logger.py b/tests/functional/test_logger.py index 4a34da946be..4195eca6777 100644 --- a/tests/functional/test_logger.py +++ b/tests/functional/test_logger.py @@ -568,6 +568,24 @@ def handler(event, context): assert request_id == log["correlation_id"] +def test_logger_set_correlation_id_path_custom_functions(lambda_context, stdout, service_name): + # GIVEN an initialized Logger + # AND a Lambda handler decorated with a JMESPath expression using Powertools custom functions + logger = Logger(service=service_name, stream=stdout) + + @logger.inject_lambda_context(correlation_id_path="Records[*].powertools_json(body).id") + def handler(event, context): + ... + + # WHEN handler is called + request_id = "xxx-111-222" + mock_event = {"Records": [{"body": json.dumps({"id": request_id})}]} + handler(mock_event, lambda_context) + + # THEN there should be no exception and correlation ID should match + assert logger.get_correlation_id() == [request_id] + + def test_logger_append_remove_keys(stdout, service_name): # GIVEN a Logger is initialized logger = Logger(service=service_name, stream=stdout) From 513a66b8a6fbd7a9b41badf12ac528fb0ef89cbc Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 21 Nov 2023 15:38:41 +0100 Subject: [PATCH 4/5] fix(logger): inject powertools jmespath functions Signed-off-by: heitorlessa --- aws_lambda_powertools/logging/logger.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/aws_lambda_powertools/logging/logger.py b/aws_lambda_powertools/logging/logger.py index dc626471f33..a11039fac14 100644 --- a/aws_lambda_powertools/logging/logger.py +++ b/aws_lambda_powertools/logging/logger.py @@ -22,8 +22,6 @@ overload, ) -import jmespath - from aws_lambda_powertools.logging import compat from aws_lambda_powertools.shared import constants from aws_lambda_powertools.shared.functions import ( @@ -31,6 +29,7 @@ resolve_env_var_choice, resolve_truthy_env_var_choice, ) +from aws_lambda_powertools.utilities import jmespath_utils from ..shared.types import AnyCallableT from .exceptions import InvalidLoggerSamplingRateError @@ -443,7 +442,9 @@ def decorate(event, context, *args, **kwargs): self.append_keys(cold_start=cold_start, **lambda_context.__dict__) if correlation_id_path: - self.set_correlation_id(jmespath.search(correlation_id_path, event)) + self.set_correlation_id( + jmespath_utils.extract_data_from_envelope(envelope=correlation_id_path, data=event), + ) if log_event: logger.debug("Event received") From d48729f1f5a639bcddbec0a14d5e71ce86e710e7 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 21 Nov 2023 15:47:08 +0100 Subject: [PATCH 5/5] docs(logger): note that custom JMESPath fn works Signed-off-by: heitorlessa --- docs/core/logger.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/logger.md b/docs/core/logger.md index de968a4ddc7..8c915fcd589 100644 --- a/docs/core/logger.md +++ b/docs/core/logger.md @@ -85,10 +85,10 @@ When debugging in non-production environments, you can instruct Logger to log th ### Setting a Correlation ID -You can set a Correlation ID using `correlation_id_path` param by passing a [JMESPath expression](https://jmespath.org/tutorial.html){target="_blank" rel="nofollow"}. +You can set a Correlation ID using `correlation_id_path` param by passing a [JMESPath expression](https://jmespath.org/tutorial.html){target="_blank" rel="nofollow"}, including [our custom JMESPath Functions](../utilities/jmespath_functions.md#powertools_json-function). ???+ tip - You can retrieve correlation IDs via `get_correlation_id` method + You can retrieve correlation IDs via `get_correlation_id` method. === "set_correlation_id.py"