diff --git a/aws_lambda_powertools/utilities/idempotency/persistence/base.py b/aws_lambda_powertools/utilities/idempotency/persistence/base.py index 1c3508d28d8..4a23fd47276 100644 --- a/aws_lambda_powertools/utilities/idempotency/persistence/base.py +++ b/aws_lambda_powertools/utilities/idempotency/persistence/base.py @@ -194,8 +194,10 @@ def _get_hashed_idempotency_key(self, data: Dict[str, Any]) -> Optional[str]: @staticmethod def is_missing_idempotency_key(data) -> bool: - if type(data).__name__ in ("tuple", "list", "dict"): + if isinstance(data, (tuple, list, dict)): return all(x is None for x in data) + elif isinstance(data, (int, float, bool)): + return False return not data def _get_hashed_payload(self, data: Dict[str, Any]) -> str: diff --git a/tests/e2e/event_handler/infrastructure.py b/tests/e2e/event_handler/infrastructure.py index ca0d1ad8378..8d7f98045e1 100644 --- a/tests/e2e/event_handler/infrastructure.py +++ b/tests/e2e/event_handler/infrastructure.py @@ -73,7 +73,14 @@ def _create_api_gateway_http(self, function: Function): CfnOutput(self.stack, "APIGatewayHTTPUrl", value=(apigw.url or "")) def _create_api_gateway_rest(self, function: Function): - apigw = apigwv1.RestApi(self.stack, "APIGatewayRest", deploy_options=apigwv1.StageOptions(stage_name="dev")) + apigw = apigwv1.RestApi( + self.stack, + "APIGatewayRest", + deploy_options=apigwv1.StageOptions(stage_name="dev"), + # disables creation of a role that is not destroyed due to a breaking change in CDK + # https://github.com/aws/aws-cdk/issues/22020 + cloud_watch_role=False, + ) todos = apigw.root.add_resource("todos") todos.add_method("POST", apigwv1.LambdaIntegration(function, proxy=True)) diff --git a/tests/functional/idempotency/test_idempotency.py b/tests/functional/idempotency/test_idempotency.py index 1cde1979d64..9722a1e9841 100644 --- a/tests/functional/idempotency/test_idempotency.py +++ b/tests/functional/idempotency/test_idempotency.py @@ -952,11 +952,6 @@ def test_is_missing_idempotency_key(): 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 @@ -966,15 +961,23 @@ def test_is_missing_idempotency_key(): # GIVEN a dict of Nones THEN is_missing_idempotency_key is True assert BasePersistenceLayer.is_missing_idempotency_key({None: None}) + # GIVEN True THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key(True) is False + # GIVEN False THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key(False) is False + # GIVEN number 0 THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key(0) is False + # GIVEN number 0.0 THEN is_missing_idempotency_key is False + assert BasePersistenceLayer.is_missing_idempotency_key(0.0) is False # GIVEN a str THEN is_missing_idempotency_key is False assert BasePersistenceLayer.is_missing_idempotency_key("Value") is False # 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 + # GIVEN a 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 + # GIVEN a list with some items THEN is_missing_idempotency_key is False assert BasePersistenceLayer.is_missing_idempotency_key([None, "Value"]) is False