diff --git a/aws_lambda_powertools/utilities/idempotency/persistence/base.py b/aws_lambda_powertools/utilities/idempotency/persistence/base.py index 58f67a292e7..de726115d95 100644 --- a/aws_lambda_powertools/utilities/idempotency/persistence/base.py +++ b/aws_lambda_powertools/utilities/idempotency/persistence/base.py @@ -183,7 +183,9 @@ def _get_hashed_idempotency_key(self, lambda_event: Dict[str, Any]) -> str: @staticmethod def is_missing_idempotency_key(data) -> bool: - return data is None or not data or all(x is None for x in data) + if type(data).__name__ in ("tuple", "list", "dict"): + return all(x is None for x in data) + return not data def _get_hashed_payload(self, lambda_event: Dict[str, Any]) -> str: """ diff --git a/tests/functional/idempotency/test_idempotency.py b/tests/functional/idempotency/test_idempotency.py index 2f541587227..6f5ba74a7aa 100644 --- a/tests/functional/idempotency/test_idempotency.py +++ b/tests/functional/idempotency/test_idempotency.py @@ -677,22 +677,38 @@ def test_delete_from_cache_when_empty( def test_is_missing_idempotency_key(): + # GIVEN an empty tuple THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key(()) + # GIVEN an empty list THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key([]) + # GIVEN an empty dictionary THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key({}) + # GIVEN an empty str THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key("") + # GIVEN False THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key(False) + # GIVEN number 0 THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key(0) + # GIVEN None THEN is_missing_idempotency_key is True assert BasePersistenceLayer.is_missing_idempotency_key(None) # GIVEN a list of Nones THEN is_missing_idempotency_key is True assert BasePersistenceLayer.is_missing_idempotency_key([None, None]) - # GIVEN a list of all not None THEN is_missing_idempotency_key is false - assert BasePersistenceLayer.is_missing_idempotency_key([None, "Value"]) is False - # GIVEN a str THEN is_missing_idempotency_key is false + # GIVEN a tuples of Nones THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key((None, None)) + # GIVEN a dict of Nones THEN is_missing_idempotency_key is True + assert BasePersistenceLayer.is_missing_idempotency_key({None: None}) + + # GIVEN a str THEN is_missing_idempotency_key is False assert BasePersistenceLayer.is_missing_idempotency_key("Value") is False - # GIVEN an empty tuple THEN is_missing_idempotency_key is false - assert BasePersistenceLayer.is_missing_idempotency_key(()) - # GIVEN an empty list THEN is_missing_idempotency_key is false - assert BasePersistenceLayer.is_missing_idempotency_key([]) - # GIVEN an empty dictionary THEN is_missing_idempotency_key is false - assert BasePersistenceLayer.is_missing_idempotency_key({}) - # GIVEN an empty str THEN is_missing_idempotency_key is false - assert BasePersistenceLayer.is_missing_idempotency_key("") + # GIVEN str "False" THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key("False") is False + # GIVEN an number THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key(1000) is False + # GIVEN a float THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key(10.01) is False + # GIVEN a list of all not None THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key([None, "Value"]) is False @pytest.mark.parametrize(