Skip to content

Commit e05901e

Browse files
committed
refactor: expose jmespath powertools functions
1 parent dec3c88 commit e05901e

File tree

7 files changed

+36
-7
lines changed

7 files changed

+36
-7
lines changed

aws_lambda_powertools/logging/logger.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ def set_package_logger(
446446
-------
447447
**Enables debug logging for AWS Lambda Powertools package**
448448
449-
>>> from aws_lambda_powertools.logging.logger import set_package_logger
449+
>>> aws_lambda_powertools.logging.logger import set_package_logger
450450
>>> set_package_logger()
451451
452452
Parameters

aws_lambda_powertools/utilities/feature_flags/appconfig.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
from botocore.config import Config
66

7+
from aws_lambda_powertools.utilities import jmespath_utils
78
from aws_lambda_powertools.utilities.parameters import AppConfigProvider, GetParameterError, TransformParameterError
89

910
from ... import Logger
10-
from ...shared import jmespath_utils
1111
from .base import StoreProvider
1212
from .exceptions import ConfigurationStoreError, StoreClientError
1313

aws_lambda_powertools/utilities/idempotency/persistence/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
from aws_lambda_powertools.shared import constants
1818
from aws_lambda_powertools.shared.cache_dict import LRUDict
19-
from aws_lambda_powertools.shared.jmespath_utils import PowertoolsFunctions
2019
from aws_lambda_powertools.shared.json_encoder import Encoder
2120
from aws_lambda_powertools.utilities.idempotency.config import IdempotencyConfig
2221
from aws_lambda_powertools.utilities.idempotency.exceptions import (
@@ -25,6 +24,7 @@
2524
IdempotencyKeyError,
2625
IdempotencyValidationError,
2726
)
27+
from aws_lambda_powertools.utilities.jmespath_utils import PowertoolsFunctions
2828

2929
logger = logging.getLogger(__name__)
3030

aws_lambda_powertools/shared/jmespath_utils.py renamed to aws_lambda_powertools/utilities/jmespath_utils/__init__.py

+22-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,27 @@ def _func_powertools_base64_gzip(self, value):
3030
return uncompressed.decode()
3131

3232

33-
def extract_data_from_envelope(data: Union[Dict, str], envelope: str, jmespath_options: Optional[Dict]) -> Any:
34-
"""Searches data using JMESPath expression
33+
def extract_data_from_envelope(data: Union[Dict, str], envelope: str, jmespath_options: Optional[Dict] = None) -> Any:
34+
"""Searches and extracts data using JMESPath
35+
36+
Envelope being the JMESPath expression to extract the data you're after
37+
38+
Built-in JMESPath functions include: powertools_json, powertools_base64, powertools_base64_gzip
39+
40+
Examples
41+
--------
42+
43+
**Deserialize JSON string and extracts data from body key**
44+
45+
from aws_lambda_powertools.utilities.jmespath_utils import extract_data_from_envelope
46+
from aws_lambda_powertools.utilities.typing import LambdaContext
47+
48+
49+
def handler(event: dict, context: LambdaContext):
50+
# event = {"body": "{\"customerId\":\"dd4649e6-2484-4993-acb8-0f9123103394\"}"} # noqa: E800
51+
payload = extract_data_from_envelope(data=event, envelope="powertools_json(body)")
52+
customer = payload.get("customerId") # now deserialized
53+
...
3554
3655
Parameters
3756
----------
@@ -42,6 +61,7 @@ def extract_data_from_envelope(data: Union[Dict, str], envelope: str, jmespath_o
4261
jmespath_options : Dict
4362
Alternative JMESPath options to be included when filtering expr
4463
64+
4565
Returns
4666
-------
4767
Any
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
API_GATEWAY_REST = "powertools_json(body)"
2+
API_GATEWAY_HTTP = API_GATEWAY_REST
3+
SQS = "Records[*].powertools_json(body)"
4+
SNS = "Records[0].Sns.Message | powertools_json(@)"
5+
EVENTBRIDGE = "detail"
6+
CLOUDWATCH_EVENTS_SCHEDULED = EVENTBRIDGE
7+
KINESIS_DATA_STREAM = "Records[*].kinesis.powertools_json(powertools_base64(data))"
8+
CLOUDWATCH_LOGS = "awslogs.powertools_base64_gzip(data) | powertools_json(@).logEvents[*]"

aws_lambda_powertools/utilities/validation/validator.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import logging
22
from typing import Any, Callable, Dict, Optional, Union
33

4+
from aws_lambda_powertools.utilities import jmespath_utils
5+
46
from ...middleware_factory import lambda_handler_decorator
5-
from ...shared import jmespath_utils
67
from .base import validate_data_against_schema
78

89
logger = logging.getLogger(__name__)

tests/functional/idempotency/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
from botocore.config import Config
1212
from jmespath import functions
1313

14-
from aws_lambda_powertools.shared.jmespath_utils import extract_data_from_envelope
1514
from aws_lambda_powertools.shared.json_encoder import Encoder
1615
from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer
1716
from aws_lambda_powertools.utilities.idempotency.idempotency import IdempotencyConfig
17+
from aws_lambda_powertools.utilities.jmespath_utils import extract_data_from_envelope
1818
from aws_lambda_powertools.utilities.validation import envelopes
1919
from tests.functional.utils import load_event
2020

0 commit comments

Comments
 (0)