diff --git a/aws_lambda_powertools/exceptions/__init__.py b/aws_lambda_powertools/exceptions/__init__.py new file mode 100644 index 00000000000..cb8724c4490 --- /dev/null +++ b/aws_lambda_powertools/exceptions/__init__.py @@ -0,0 +1,5 @@ +"""Shared exceptions that don't belong to a single utility""" + + +class InvalidEnvelopeExpressionError(Exception): + """When JMESPath fails to parse expression""" diff --git a/aws_lambda_powertools/shared/jmespath_utils.py b/aws_lambda_powertools/shared/jmespath_utils.py index f2a865d4807..9cc736aedfb 100644 --- a/aws_lambda_powertools/shared/jmespath_utils.py +++ b/aws_lambda_powertools/shared/jmespath_utils.py @@ -1,13 +1,15 @@ import base64 import gzip import json +import logging from typing import Any, Dict, Optional, Union import jmespath from jmespath.exceptions import LexerError -from aws_lambda_powertools.utilities.validation import InvalidEnvelopeExpressionError -from aws_lambda_powertools.utilities.validation.base import logger +from aws_lambda_powertools.exceptions import InvalidEnvelopeExpressionError + +logger = logging.getLogger(__name__) class PowertoolsFunctions(jmespath.functions.Functions): @@ -27,7 +29,7 @@ def _func_powertools_base64_gzip(self, value): return uncompressed.decode() -def unwrap_event_from_envelope(data: Union[Dict, str], envelope: str, jmespath_options: Optional[Dict]) -> Any: +def extract_data_from_envelope(data: Union[Dict, str], envelope: str, jmespath_options: Optional[Dict]) -> Any: """Searches data using JMESPath expression Parameters diff --git a/aws_lambda_powertools/utilities/feature_flags/appconfig.py b/aws_lambda_powertools/utilities/feature_flags/appconfig.py index 30c70b6c590..2e0edc3b9b1 100644 --- a/aws_lambda_powertools/utilities/feature_flags/appconfig.py +++ b/aws_lambda_powertools/utilities/feature_flags/appconfig.py @@ -80,7 +80,7 @@ def get_configuration(self) -> Dict[str, Any]: ) if self.envelope: - config = jmespath_utils.unwrap_event_from_envelope( + config = jmespath_utils.extract_data_from_envelope( data=config, envelope=self.envelope, jmespath_options=self.jmespath_options ) diff --git a/aws_lambda_powertools/utilities/validation/exceptions.py b/aws_lambda_powertools/utilities/validation/exceptions.py index 7dbe3f786e4..d4aaa500ec7 100644 --- a/aws_lambda_powertools/utilities/validation/exceptions.py +++ b/aws_lambda_powertools/utilities/validation/exceptions.py @@ -1,3 +1,6 @@ +from ...exceptions import InvalidEnvelopeExpressionError + + class SchemaValidationError(Exception): """When serialization fail schema validation""" @@ -6,5 +9,4 @@ class InvalidSchemaFormatError(Exception): """When JSON Schema is in invalid format""" -class InvalidEnvelopeExpressionError(Exception): - """When JMESPath fails to parse expression""" +__all__ = ["SchemaValidationError", "InvalidSchemaFormatError", "InvalidEnvelopeExpressionError"] diff --git a/aws_lambda_powertools/utilities/validation/validator.py b/aws_lambda_powertools/utilities/validation/validator.py index 02a685a1565..d9ce35fe41b 100644 --- a/aws_lambda_powertools/utilities/validation/validator.py +++ b/aws_lambda_powertools/utilities/validation/validator.py @@ -117,7 +117,7 @@ def handler(event, context): When JMESPath expression to unwrap event is invalid """ if envelope: - event = jmespath_utils.unwrap_event_from_envelope( + event = jmespath_utils.extract_data_from_envelope( data=event, envelope=envelope, jmespath_options=jmespath_options ) @@ -219,7 +219,7 @@ def handler(event, context): When JMESPath expression to unwrap event is invalid """ if envelope: - event = jmespath_utils.unwrap_event_from_envelope( + event = jmespath_utils.extract_data_from_envelope( data=event, envelope=envelope, jmespath_options=jmespath_options ) diff --git a/pyproject.toml b/pyproject.toml index bfb083371a3..033282f7465 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ pydantic = ["pydantic", "email-validator"] [tool.coverage.run] source = ["aws_lambda_powertools"] -omit = ["tests/*"] +omit = ["tests/*", "aws_lambda_powertools/exceptions/*"] branch = true [tool.coverage.html] diff --git a/tests/functional/idempotency/conftest.py b/tests/functional/idempotency/conftest.py index 9f61d50d656..e613bb85e60 100644 --- a/tests/functional/idempotency/conftest.py +++ b/tests/functional/idempotency/conftest.py @@ -11,7 +11,7 @@ from botocore.config import Config from jmespath import functions -from aws_lambda_powertools.shared.jmespath_utils import unwrap_event_from_envelope +from aws_lambda_powertools.shared.jmespath_utils import extract_data_from_envelope from aws_lambda_powertools.shared.json_encoder import Encoder from aws_lambda_powertools.utilities.idempotency import DynamoDBPersistenceLayer from aws_lambda_powertools.utilities.idempotency.idempotency import IdempotencyConfig @@ -149,7 +149,7 @@ def hashed_idempotency_key(lambda_apigw_event, default_jmespath, lambda_context) @pytest.fixture def hashed_idempotency_key_with_envelope(lambda_apigw_event): - event = unwrap_event_from_envelope( + event = extract_data_from_envelope( data=lambda_apigw_event, envelope=envelopes.API_GATEWAY_HTTP, jmespath_options={} ) return "test-func#" + hashlib.md5(json.dumps(event).encode()).hexdigest()