Skip to content

Commit 8775110

Browse files
nc-dirkniliusdirk.niliusleandrodamascenaanafalcao
authored
fix(data-classes): ensure lazy initialization for Cognito token generation response properties (#7653)
* fix(data-classes): ensure lazy initialization for Cognito token generation responses Fixed inconsistent lazy initialization in PreTokenGenerationTriggerEventResponse and PreTokenGenerationV2TriggerEvent response properties. Properties now consistently initialize empty dictionaries in _data when None, preventing None returns and ensuring modifications persist correctly. Affects: claims_override_details, claims_scope_override_details, id_token_generation, and access_token_generation properties. * test(data-classes): use the original test scenario but keep the fixed access * test(data-classes): fix linter format issues * test(data-classes): add assertions for lazy initialization of token generation properties --------- Co-authored-by: dirk.nilius <[email protected]> Co-authored-by: Leandro Damascena <[email protected]> Co-authored-by: Ana Falcão <[email protected]>
1 parent 93c4b27 commit 8775110

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -575,13 +575,10 @@ def scopes_to_suppress(self, value: list[str]):
575575

576576
class ClaimsAndScopeOverrideDetails(GroupConfigurationBase):
577577
@property
578-
def id_token_generation(self) -> TokenClaimsAndScopeOverrideDetails | None:
579-
id_token_generation_details = self._data.get("idTokenGeneration")
580-
return (
581-
None
582-
if id_token_generation_details is None
583-
else TokenClaimsAndScopeOverrideDetails(id_token_generation_details)
584-
)
578+
def id_token_generation(self) -> TokenClaimsAndScopeOverrideDetails:
579+
if self._data.get("idTokenGeneration") is None:
580+
self._data["idTokenGeneration"] = {}
581+
return TokenClaimsAndScopeOverrideDetails(self._data["idTokenGeneration"])
585582

586583
@id_token_generation.setter
587584
def id_token_generation(self, value: dict[str, Any]):
@@ -597,13 +594,10 @@ def id_token_generation(self, value: dict[str, Any]):
597594
self._data["idTokenGeneration"] = value
598595

599596
@property
600-
def access_token_generation(self) -> TokenClaimsAndScopeOverrideDetails | None:
601-
access_token_generation_details = self._data.get("accessTokenGeneration")
602-
return (
603-
None
604-
if access_token_generation_details is None
605-
else TokenClaimsAndScopeOverrideDetails(access_token_generation_details)
606-
)
597+
def access_token_generation(self) -> TokenClaimsAndScopeOverrideDetails:
598+
if self._data.get("accessTokenGeneration") is None:
599+
self._data["accessTokenGeneration"] = {}
600+
return TokenClaimsAndScopeOverrideDetails(self._data["accessTokenGeneration"])
607601

608602
@access_token_generation.setter
609603
def access_token_generation(self, value: dict[str, Any]):
@@ -622,13 +616,17 @@ def access_token_generation(self, value: dict[str, Any]):
622616
class PreTokenGenerationTriggerEventResponse(DictWrapper):
623617
@property
624618
def claims_override_details(self) -> ClaimsOverrideDetails:
625-
return ClaimsOverrideDetails(self.get("claimsOverrideDetails") or {})
619+
if self._data.get("claimsOverrideDetails") is None:
620+
self._data["claimsOverrideDetails"] = {}
621+
return ClaimsOverrideDetails(self._data["claimsOverrideDetails"])
626622

627623

628624
class PreTokenGenerationTriggerV2EventResponse(DictWrapper):
629625
@property
630626
def claims_scope_override_details(self) -> ClaimsAndScopeOverrideDetails:
631-
return ClaimsAndScopeOverrideDetails(self.get("claimsAndScopeOverrideDetails") or {})
627+
if self._data.get("claimsAndScopeOverrideDetails") is None:
628+
self._data["claimsAndScopeOverrideDetails"] = {}
629+
return ClaimsAndScopeOverrideDetails(self._data["claimsAndScopeOverrideDetails"])
632630

633631

634632
class PreTokenGenerationTriggerEvent(BaseTriggerEvent):

tests/unit/data_classes/required_dependencies/test_cognito_user_pool_event.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def test_cognito_pre_token_generation_trigger_event():
187187

188188
expected_claims = {"test": "value"}
189189
claims_override_details.claims_to_add_or_override = expected_claims
190-
assert claims_override_details.claims_to_add_or_override["test"] == "value"
190+
assert parsed_event.response.claims_override_details.claims_to_add_or_override["test"] == "value"
191191

192192
claims_override_details.claims_to_suppress = ["email"]
193193
assert claims_override_details.claims_to_suppress[0] == "email"
@@ -229,6 +229,10 @@ def test_cognito_pre_token_v2_generation_trigger_event():
229229
assert parsed_event.request.scopes == raw_event["request"]["scopes"]
230230

231231
claims_scope_override_details = parsed_event.response.claims_scope_override_details
232+
# Test that accessing id_token_generation and access_token_generation properties initialize empty dicts
233+
assert claims_scope_override_details.id_token_generation.claims_to_add_or_override == {}
234+
assert claims_scope_override_details.access_token_generation.claims_to_add_or_override == {}
235+
232236
claims_scope_override_details.id_token_generation = claims_scope_override_details.access_token_generation = {}
233237
assert claims_scope_override_details.id_token_generation.claims_to_add_or_override == {}
234238
assert claims_scope_override_details.id_token_generation.claims_to_suppress == []
@@ -246,8 +250,14 @@ def test_cognito_pre_token_v2_generation_trigger_event():
246250
expected_claims = {"test": "value"}
247251
claims_scope_override_details.id_token_generation.claims_to_add_or_override = expected_claims
248252
claims_scope_override_details.access_token_generation.claims_to_add_or_override = expected_claims
249-
assert claims_scope_override_details.id_token_generation.claims_to_add_or_override["test"] == "value"
250-
assert claims_scope_override_details.access_token_generation.claims_to_add_or_override["test"] == "value"
253+
assert (
254+
parsed_event.response.claims_scope_override_details.id_token_generation.claims_to_add_or_override["test"]
255+
== "value"
256+
)
257+
assert (
258+
parsed_event.response.claims_scope_override_details.access_token_generation.claims_to_add_or_override["test"]
259+
== "value"
260+
)
251261

252262
claims_scope_override_details.id_token_generation.claims_to_suppress = (
253263
claims_scope_override_details.access_token_generation.claims_to_suppress

0 commit comments

Comments
 (0)