Skip to content

Commit 2b1a5bb

Browse files
refactor(data_classes): simplify nested data classes (#6289)
* refactor(data_classes): simplify nested data classes Make each nested data class only know its own properties instead of having to reference from the root of the data. This hopefully simplifies the code and avoids DRY. Also simplify test cases. * refactor(data_classes): fix tests * refactor(data_classes): push another small commit to see if GH works --------- Co-authored-by: Leandro Damascena <[email protected]>
1 parent c12fd21 commit 2b1a5bb

12 files changed

+228
-301
lines changed

aws_lambda_powertools/utilities/data_classes/alb_event.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class ALBEventRequestContext(DictWrapper):
1818
@property
1919
def elb_target_group_arn(self) -> str:
2020
"""Target group arn for your Lambda function"""
21-
return self["requestContext"]["elb"]["targetGroupArn"]
21+
return self["elb"]["targetGroupArn"]
2222

2323

2424
class ALBEvent(BaseProxyEvent):
@@ -32,7 +32,7 @@ class ALBEvent(BaseProxyEvent):
3232

3333
@property
3434
def request_context(self) -> ALBEventRequestContext:
35-
return ALBEventRequestContext(self._data)
35+
return ALBEventRequestContext(self["requestContext"])
3636

3737
@property
3838
def multi_value_query_string_parameters(self) -> dict[str, list[str]]:

aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ def stage_variables(self) -> dict[str, str]:
183183

184184
@property
185185
def request_context(self) -> BaseRequestContext:
186-
return BaseRequestContext(self._data)
186+
return BaseRequestContext(self["requestContext"])
187187

188188
@overload
189189
def get_header_value(
@@ -306,7 +306,7 @@ def query_string_parameters(self) -> dict[str, str]:
306306

307307
@property
308308
def request_context(self) -> BaseRequestContextV2:
309-
return BaseRequestContextV2(self._data)
309+
return BaseRequestContextV2(self["requestContext"])
310310

311311
@property
312312
def path_parameters(self) -> dict[str, str]:

aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py

+11-13
Original file line numberDiff line numberDiff line change
@@ -61,42 +61,41 @@ class APIGatewayEventRequestContext(BaseRequestContext):
6161
@property
6262
def connected_at(self) -> int | None:
6363
"""The Epoch-formatted connection time. (WebSocket API)"""
64-
return self["requestContext"].get("connectedAt")
64+
return self.get("connectedAt")
6565

6666
@property
6767
def connection_id(self) -> str | None:
6868
"""A unique ID for the connection that can be used to make a callback to the client. (WebSocket API)"""
69-
return self["requestContext"].get("connectionId")
69+
return self.get("connectionId")
7070

7171
@property
7272
def event_type(self) -> str | None:
7373
"""The event type: `CONNECT`, `MESSAGE`, or `DISCONNECT`. (WebSocket API)"""
74-
return self["requestContext"].get("eventType")
74+
return self.get("eventType")
7575

7676
@property
7777
def message_direction(self) -> str | None:
7878
"""Message direction (WebSocket API)"""
79-
return self["requestContext"].get("messageDirection")
79+
return self.get("messageDirection")
8080

8181
@property
8282
def message_id(self) -> str | None:
8383
"""A unique server-side ID for a message. Available only when the `eventType` is `MESSAGE`."""
84-
return self["requestContext"].get("messageId")
84+
return self.get("messageId")
8585

8686
@property
8787
def operation_name(self) -> str | None:
8888
"""The name of the operation being performed"""
89-
return self["requestContext"].get("operationName")
89+
return self.get("operationName")
9090

9191
@property
9292
def route_key(self) -> str | None:
9393
"""The selected route key."""
94-
return self["requestContext"].get("routeKey")
94+
return self.get("routeKey")
9595

9696
@property
9797
def authorizer(self) -> APIGatewayEventAuthorizer:
98-
authz_data = self._data.get("requestContext", {}).get("authorizer", {})
99-
return APIGatewayEventAuthorizer(authz_data)
98+
return APIGatewayEventAuthorizer(self.get("authorizer") or {})
10099

101100

102101
class APIGatewayProxyEvent(BaseProxyEvent):
@@ -136,7 +135,7 @@ def resolved_headers_field(self) -> dict[str, Any]:
136135

137136
@property
138137
def request_context(self) -> APIGatewayEventRequestContext:
139-
return APIGatewayEventRequestContext(self._data)
138+
return APIGatewayEventRequestContext(self["requestContext"])
140139

141140
@property
142141
def path_parameters(self) -> dict[str, str]:
@@ -248,8 +247,7 @@ def iam(self) -> RequestContextV2AuthorizerIam:
248247
class RequestContextV2(BaseRequestContextV2):
249248
@property
250249
def authorizer(self) -> RequestContextV2Authorizer:
251-
ctx = self.get("requestContext") or {} # key might exist but can be `null`
252-
return RequestContextV2Authorizer(ctx.get("authorizer", {}))
250+
return RequestContextV2Authorizer(self.get("authorizer") or {})
253251

254252

255253
class APIGatewayProxyEventV2(BaseProxyEvent):
@@ -291,7 +289,7 @@ def cookies(self) -> list[str]:
291289

292290
@property
293291
def request_context(self) -> RequestContextV2:
294-
return RequestContextV2(self._data)
292+
return RequestContextV2(self["requestContext"])
295293

296294
@property
297295
def path_parameters(self) -> dict[str, str]:

aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,32 @@ class AppSyncAuthorizerEventRequestContext(DictWrapper):
1111
@property
1212
def api_id(self) -> str:
1313
"""AppSync API ID"""
14-
return self["requestContext"]["apiId"]
14+
return self["apiId"]
1515

1616
@property
1717
def account_id(self) -> str:
1818
"""AWS Account ID"""
19-
return self["requestContext"]["accountId"]
19+
return self["accountId"]
2020

2121
@property
2222
def request_id(self) -> str:
2323
"""Requestt ID"""
24-
return self["requestContext"]["requestId"]
24+
return self["requestId"]
2525

2626
@property
2727
def query_string(self) -> str:
2828
"""GraphQL query string"""
29-
return self["requestContext"]["queryString"]
29+
return self["queryString"]
3030

3131
@property
3232
def operation_name(self) -> str | None:
3333
"""GraphQL operation name, optional"""
34-
return self["requestContext"].get("operationName")
34+
return self.get("operationName")
3535

3636
@property
3737
def variables(self) -> dict:
3838
"""GraphQL variables"""
39-
return self["requestContext"]["variables"]
39+
return self["variables"]
4040

4141

4242
class AppSyncAuthorizerEvent(DictWrapper):
@@ -57,7 +57,7 @@ def authorization_token(self) -> str:
5757
@property
5858
def request_context(self) -> AppSyncAuthorizerEventRequestContext:
5959
"""Request context"""
60-
return AppSyncAuthorizerEventRequestContext(self._data)
60+
return AppSyncAuthorizerEventRequestContext(self["requestContext"])
6161

6262

6363
class AppSyncAuthorizerResponse:

0 commit comments

Comments
 (0)