Skip to content

Commit 5ff76b7

Browse files
author
Michael Brewer
authored
fix(idempotency): TypeError when calling is_missing_idempotency_key with an int (#315)
1 parent bc17b5f commit 5ff76b7

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

aws_lambda_powertools/utilities/idempotency/persistence/base.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ def _get_hashed_idempotency_key(self, lambda_event: Dict[str, Any]) -> str:
183183

184184
@staticmethod
185185
def is_missing_idempotency_key(data) -> bool:
186-
return data is None or not data or all(x is None for x in data)
186+
if type(data).__name__ in ("tuple", "list", "dict"):
187+
return all(x is None for x in data)
188+
return not data
187189

188190
def _get_hashed_payload(self, lambda_event: Dict[str, Any]) -> str:
189191
"""

tests/functional/idempotency/test_idempotency.py

+27-11
Original file line numberDiff line numberDiff line change
@@ -677,22 +677,38 @@ def test_delete_from_cache_when_empty(
677677

678678

679679
def test_is_missing_idempotency_key():
680+
# GIVEN an empty tuple THEN is_missing_idempotency_key is True
681+
assert BasePersistenceLayer.is_missing_idempotency_key(())
682+
# GIVEN an empty list THEN is_missing_idempotency_key is True
683+
assert BasePersistenceLayer.is_missing_idempotency_key([])
684+
# GIVEN an empty dictionary THEN is_missing_idempotency_key is True
685+
assert BasePersistenceLayer.is_missing_idempotency_key({})
686+
# GIVEN an empty str THEN is_missing_idempotency_key is True
687+
assert BasePersistenceLayer.is_missing_idempotency_key("")
688+
# GIVEN False THEN is_missing_idempotency_key is True
689+
assert BasePersistenceLayer.is_missing_idempotency_key(False)
690+
# GIVEN number 0 THEN is_missing_idempotency_key is True
691+
assert BasePersistenceLayer.is_missing_idempotency_key(0)
692+
680693
# GIVEN None THEN is_missing_idempotency_key is True
681694
assert BasePersistenceLayer.is_missing_idempotency_key(None)
682695
# GIVEN a list of Nones THEN is_missing_idempotency_key is True
683696
assert BasePersistenceLayer.is_missing_idempotency_key([None, None])
684-
# GIVEN a list of all not None THEN is_missing_idempotency_key is false
685-
assert BasePersistenceLayer.is_missing_idempotency_key([None, "Value"]) is False
686-
# GIVEN a str THEN is_missing_idempotency_key is false
697+
# GIVEN a tuples of Nones THEN is_missing_idempotency_key is True
698+
assert BasePersistenceLayer.is_missing_idempotency_key((None, None))
699+
# GIVEN a dict of Nones THEN is_missing_idempotency_key is True
700+
assert BasePersistenceLayer.is_missing_idempotency_key({None: None})
701+
702+
# GIVEN a str THEN is_missing_idempotency_key is False
687703
assert BasePersistenceLayer.is_missing_idempotency_key("Value") is False
688-
# GIVEN an empty tuple THEN is_missing_idempotency_key is false
689-
assert BasePersistenceLayer.is_missing_idempotency_key(())
690-
# GIVEN an empty list THEN is_missing_idempotency_key is false
691-
assert BasePersistenceLayer.is_missing_idempotency_key([])
692-
# GIVEN an empty dictionary THEN is_missing_idempotency_key is false
693-
assert BasePersistenceLayer.is_missing_idempotency_key({})
694-
# GIVEN an empty str THEN is_missing_idempotency_key is false
695-
assert BasePersistenceLayer.is_missing_idempotency_key("")
704+
# GIVEN str "False" THEN is_missing_idempotency_key is False
705+
assert BasePersistenceLayer.is_missing_idempotency_key("False") is False
706+
# GIVEN an number THEN is_missing_idempotency_key is False
707+
assert BasePersistenceLayer.is_missing_idempotency_key(1000) is False
708+
# GIVEN a float THEN is_missing_idempotency_key is False
709+
assert BasePersistenceLayer.is_missing_idempotency_key(10.01) is False
710+
# GIVEN a list of all not None THEN is_missing_idempotency_key is False
711+
assert BasePersistenceLayer.is_missing_idempotency_key([None, "Value"]) is False
696712

697713

698714
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)