Skip to content

Commit 8308fe1

Browse files
author
Michael Brewer
committed
feat(idempotencty): Raise error when event data is None
GIVEN a persistence_store with event_key_jmespath = `body` WHEN getting the hashed idempotency key with an event without a `body` key THEN raise IdempotencyValidationError
1 parent f1a8832 commit 8308fe1

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

Diff for: aws_lambda_powertools/utilities/idempotency/persistence/base.py

+4
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ def _get_hashed_idempotency_key(self, lambda_event: Dict[str, Any]) -> str:
162162
data = lambda_event
163163
if self.event_key_jmespath:
164164
data = self.event_key_compiled_jmespath.search(lambda_event)
165+
166+
if data is None:
167+
raise IdempotencyValidationError("No data found to create a hashed idempotency_key")
168+
165169
return self._generate_hash(data)
166170

167171
def _get_hashed_payload(self, lambda_event: Dict[str, Any]) -> str:

Diff for: tests/functional/idempotency/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def hashed_validation_key(lambda_apigw_event):
152152
@pytest.fixture
153153
def persistence_store(config, request, default_jmespath):
154154
persistence_store = DynamoDBPersistenceLayer(
155-
event_key_jmespath=default_jmespath,
155+
event_key_jmespath=request.param.get("event_key_jmespath") or default_jmespath,
156156
table_name=TABLE_NAME,
157157
boto_config=config,
158158
use_local_cache=request.param["use_local_cache"],

Diff for: tests/functional/idempotency/test_idempotency.py

+14
Original file line numberDiff line numberDiff line change
@@ -627,3 +627,17 @@ def test_user_local_disabled(persistence_store):
627627
# THEN raise AttributeError
628628
# AND don't have a _cache attribute
629629
assert not hasattr("persistence_store", "_cache")
630+
631+
632+
@pytest.mark.parametrize("persistence_store", [{"use_local_cache": False, "event_key_jmespath": "body"}], indirect=True)
633+
def test_no_data_for_generate_hash(persistence_store):
634+
# GIVEN a persistence_store with use_local_cache = False and event_key_jmespath = "body"
635+
assert persistence_store.use_local_cache is False
636+
assert "body" in persistence_store.event_key_jmespath
637+
638+
# WHEN getting the hashed idempotency key for an event with no `body` key
639+
with pytest.raises(IdempotencyValidationError) as excinfo:
640+
persistence_store._get_hashed_idempotency_key({})
641+
642+
# THEN raise IdempotencyValidationError error
643+
assert "No data found to create a hashed idempotency_key" in str(excinfo.value)

0 commit comments

Comments
 (0)