Skip to content

Commit de3cf28

Browse files
fix(event-sources): handle claimsOverrideDetails set to null (aws-powertools#878)
1 parent 0348bd6 commit de3cf28

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

aws_lambda_powertools/metrics/metric.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
import logging
33
from contextlib import contextmanager
4-
from typing import Dict, Optional, Union, Generator
4+
from typing import Dict, Generator, Optional, Union
55

66
from .base import MetricManager, MetricUnit
77

@@ -61,7 +61,9 @@ def add_metric(self, name: str, unit: Union[MetricUnit, str], value: float) -> N
6161

6262

6363
@contextmanager
64-
def single_metric(name: str, unit: MetricUnit, value: float, namespace: Optional[str] = None) -> Generator[SingleMetric, None, None]:
64+
def single_metric(
65+
name: str, unit: MetricUnit, value: float, namespace: Optional[str] = None
66+
) -> Generator[SingleMetric, None, None]:
6567
"""Context manager to simplify creation of a single metric
6668
6769
Example

aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -523,8 +523,9 @@ def set_group_configuration_preferred_role(self, value: str):
523523
class PreTokenGenerationTriggerEventResponse(DictWrapper):
524524
@property
525525
def claims_override_details(self) -> ClaimsOverrideDetails:
526-
# Ensure we have a `claimsOverrideDetails` element
527-
self._data["response"].setdefault("claimsOverrideDetails", {})
526+
# Ensure we have a `claimsOverrideDetails` element and is not set to None
527+
if self._data["response"].get("claimsOverrideDetails") is None:
528+
self._data["response"]["claimsOverrideDetails"] = {}
528529
return ClaimsOverrideDetails(self._data["response"]["claimsOverrideDetails"])
529530

530531

tests/functional/test_data_classes.py

+10
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,16 @@ def test_cognito_pre_token_generation_trigger_event():
281281
assert claims_override_details.group_configuration.preferred_role == "role_name"
282282
assert event["response"]["claimsOverrideDetails"]["groupOverrideDetails"]["preferredRole"] == "role_name"
283283

284+
# Ensure that even if "claimsOverrideDetails" was explicitly set to None
285+
# accessing `event.response.claims_override_details` would set it to `{}`
286+
event["response"]["claimsOverrideDetails"] = None
287+
claims_override_details = event.response.claims_override_details
288+
assert claims_override_details._data == {}
289+
assert event["response"]["claimsOverrideDetails"] == {}
290+
claims_override_details.claims_to_suppress = ["email"]
291+
assert claims_override_details.claims_to_suppress[0] == "email"
292+
assert event["response"]["claimsOverrideDetails"]["claimsToSuppress"] == ["email"]
293+
284294

285295
def test_cognito_define_auth_challenge_trigger_event():
286296
event = DefineAuthChallengeTriggerEvent(load_event("cognitoDefineAuthChallengeEvent.json"))

0 commit comments

Comments
 (0)