Skip to content

Commit b558b18

Browse files
author
Michael Brewer
authored
fix(idempotent): Correctly raise IdempotencyKeyError (#378)
1 parent a2c82b5 commit b558b18

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
IdempotencyInconsistentStateError,
1212
IdempotencyItemAlreadyExistsError,
1313
IdempotencyItemNotFoundError,
14+
IdempotencyKeyError,
1415
IdempotencyPersistenceLayerError,
1516
IdempotencyValidationError,
1617
)
@@ -132,6 +133,8 @@ def handle(self) -> Any:
132133
# We call save_inprogress first as an optimization for the most common case where no idempotent record
133134
# already exists. If it succeeds, there's no need to call get_record.
134135
self.persistence_store.save_inprogress(event=self.event, context=self.context)
136+
except IdempotencyKeyError:
137+
raise
135138
except IdempotencyItemAlreadyExistsError:
136139
# Now we know the item already exists, we can retrieve it
137140
record = self._get_idempotency_record()

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

+17
Original file line numberDiff line numberDiff line change
@@ -828,3 +828,20 @@ def lambda_handler(event, context):
828828
stubber.assert_no_pending_responses()
829829
stubber.deactivate()
830830
assert "Failed to save in progress record to idempotency store" == e.value.args[0]
831+
832+
833+
def test_handler_raise_idempotency_key_error(persistence_store: DynamoDBPersistenceLayer, lambda_context):
834+
# GIVEN raise_on_no_idempotency_key is True
835+
idempotency_config = IdempotencyConfig(event_key_jmespath="idemKey", raise_on_no_idempotency_key=True)
836+
837+
# WHEN handling the idempotent call
838+
# AND save_inprogress raises a IdempotencyKeyError
839+
@idempotent(persistence_store=persistence_store, config=idempotency_config)
840+
def handler(event, context):
841+
raise ValueError("Should not be raised")
842+
843+
# THEN idempotent should re-raise the IdempotencyKeyError
844+
with pytest.raises(IdempotencyKeyError) as e:
845+
handler({}, lambda_context)
846+
847+
assert "No data found to create a hashed idempotency_key" == e.value.args[0]

0 commit comments

Comments
 (0)