Skip to content

Commit 2ea8114

Browse files
Reverting deletion + adding get_context function
1 parent 721fbaf commit 2ea8114

File tree

6 files changed

+40
-1
lines changed

6 files changed

+40
-1
lines changed

aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ def route_key(self) -> Optional[str]:
7474
def authorizer(self) -> APIGatewayEventAuthorizer:
7575
return APIGatewayEventAuthorizer(self._data["requestContext"]["authorizer"])
7676

77+
def get_context(self) -> Optional[Dict[str, Any]]:
78+
"""Retrieve the authorization context details for Lambda.
79+
80+
Returns:
81+
--------
82+
Optional[Dict[str, Any]]
83+
A dictionary containing Lambda authorization context details, or None if the information is not available.
84+
"""
85+
return self.get("requestContext", {}).get("authorizer", {})
86+
7787

7888
class APIGatewayProxyEvent(BaseProxyEvent):
7989
"""AWS Lambda proxy V1
@@ -179,6 +189,21 @@ def jwt_scopes(self) -> Optional[List[str]]:
179189
jwt = self.get("jwt") or {} # not available in FunctionURL
180190
return jwt.get("scopes")
181191

192+
@property
193+
def get_lambda(self) -> Optional[Dict[str, Any]]:
194+
"""Lambda authorization context details"""
195+
return self.get("lambda")
196+
197+
def get_context(self) -> Optional[Dict[str, Any]]:
198+
"""Retrieve the authorization context details for Lambda.
199+
200+
Returns:
201+
--------
202+
Optional[Dict[str, Any]]
203+
A dictionary containing Lambda authorization context details, or None if the information is not available.
204+
"""
205+
return self.get("lambda")
206+
182207
@property
183208
def iam(self) -> Optional[RequestContextV2AuthorizerIam]:
184209
"""IAM authorization details used for making the request."""

aws_lambda_powertools/utilities/parser/models/apigwv2.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import Any, Dict, List, Optional, Type, Union
33

4-
from pydantic import BaseModel
4+
from pydantic import BaseModel, Field
55
from pydantic.networks import IPvAnyNetwork
66

77
from aws_lambda_powertools.utilities.parser.types import Literal
@@ -31,6 +31,7 @@ class RequestContextV2AuthorizerJwt(BaseModel):
3131
class RequestContextV2Authorizer(BaseModel):
3232
jwt: Optional[RequestContextV2AuthorizerJwt] = None
3333
iam: Optional[RequestContextV2AuthorizerIam] = None
34+
lambda_value: Optional[Dict[str, Any]] = Field(None, alias="lambda")
3435

3536

3637
class RequestContextV2Http(BaseModel):

tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
"scope1",
3333
"scope2"
3434
]
35+
},
36+
"lambda": {
37+
"tenantId": "123-456-789-012"
3538
}
3639
},
3740
"apiId": "api-id",

tests/unit/data_classes/test_api_gateway_proxy_event.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,11 @@ def test_api_gateway_proxy_v2_lambda_authorizer_event():
200200

201201
request_context = parsed_event.request_context
202202
assert request_context is not None
203+
204+
lambda_props = request_context.authorizer.get_lambda
205+
assert lambda_props is not None
206+
assert lambda_props.get("tenantId") == raw_event["requestContext"]["authorizer"]["lambda"]["tenantId"]
207+
203208
jwt_claims = request_context.authorizer.jwt_claim
204209
assert jwt_claims is not None
205210
assert jwt_claims.get("claim1") == raw_event["requestContext"]["authorizer"]["jwt"]["claims"]["claim1"]

tests/unit/data_classes/test_lambda_function_url.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def test_lambda_function_url_event_iam():
104104
assert authorizer is not None
105105
assert authorizer.jwt_claim is None
106106
assert authorizer.jwt_scopes is None
107+
assert authorizer.get_lambda is None
107108

108109
iam = authorizer.iam
109110
iam_raw = raw_event["requestContext"]["authorizer"]["iam"]

tests/unit/parser/test_apigwv2.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ def test_api_gateway_proxy_v2_event_lambda_authorizer():
7777
request_context: RequestContextV2 = parsed_event.requestContext
7878
assert request_context is not None
7979

80+
lambda_props: RequestContextV2Authorizer = request_context.authorizer.lambda_value
81+
assert lambda_props is not None
82+
assert lambda_props["tenantId"] == raw_event["requestContext"]["authorizer"]["lambda"]["tenantId"]
83+
8084
jwt_claims: RequestContextV2Authorizer = request_context.authorizer.jwt.claims
8185
assert jwt_claims is not None
8286
assert jwt_claims["claim1"] == raw_event["requestContext"]["authorizer"]["jwt"]["claims"]["claim1"]

0 commit comments

Comments
 (0)