1
1
from typing import Any , Dict , List , Optional
2
2
3
- from aws_lambda_powertools .utilities .data_classes .common import BaseProxyEvent , DictWrapper
4
-
5
-
6
- class APIGatewayEventIdentity (DictWrapper ):
7
- @property
8
- def access_key (self ) -> Optional [str ]:
9
- return self ["requestContext" ]["identity" ].get ("accessKey" )
10
-
11
- @property
12
- def account_id (self ) -> Optional [str ]:
13
- """The AWS account ID associated with the request."""
14
- return self ["requestContext" ]["identity" ].get ("accountId" )
15
-
16
- @property
17
- def api_key (self ) -> Optional [str ]:
18
- """For API methods that require an API key, this variable is the API key associated with the method request.
19
- For methods that don't require an API key, this variable is null."""
20
- return self ["requestContext" ]["identity" ].get ("apiKey" )
21
-
22
- @property
23
- def api_key_id (self ) -> Optional [str ]:
24
- """The API key ID associated with an API request that requires an API key."""
25
- return self ["requestContext" ]["identity" ].get ("apiKeyId" )
26
-
27
- @property
28
- def caller (self ) -> Optional [str ]:
29
- """The principal identifier of the caller making the request."""
30
- return self ["requestContext" ]["identity" ].get ("caller" )
31
-
32
- @property
33
- def cognito_authentication_provider (self ) -> Optional [str ]:
34
- """A comma-separated list of the Amazon Cognito authentication providers used by the caller
35
- making the request. Available only if the request was signed with Amazon Cognito credentials."""
36
- return self ["requestContext" ]["identity" ].get ("cognitoAuthenticationProvider" )
37
-
38
- @property
39
- def cognito_authentication_type (self ) -> Optional [str ]:
40
- """The Amazon Cognito authentication type of the caller making the request.
41
- Available only if the request was signed with Amazon Cognito credentials."""
42
- return self ["requestContext" ]["identity" ].get ("cognitoAuthenticationType" )
43
-
44
- @property
45
- def cognito_identity_id (self ) -> Optional [str ]:
46
- """The Amazon Cognito identity ID of the caller making the request.
47
- Available only if the request was signed with Amazon Cognito credentials."""
48
- return self ["requestContext" ]["identity" ].get ("cognitoIdentityId" )
49
-
50
- @property
51
- def cognito_identity_pool_id (self ) -> Optional [str ]:
52
- """The Amazon Cognito identity pool ID of the caller making the request.
53
- Available only if the request was signed with Amazon Cognito credentials."""
54
- return self ["requestContext" ]["identity" ].get ("cognitoIdentityPoolId" )
55
-
56
- @property
57
- def principal_org_id (self ) -> Optional [str ]:
58
- """The AWS organization ID."""
59
- return self ["requestContext" ]["identity" ].get ("principalOrgId" )
60
-
61
- @property
62
- def source_ip (self ) -> str :
63
- """The source IP address of the TCP connection making the request to API Gateway."""
64
- return self ["requestContext" ]["identity" ]["sourceIp" ]
65
-
66
- @property
67
- def user (self ) -> Optional [str ]:
68
- """The principal identifier of the user making the request."""
69
- return self ["requestContext" ]["identity" ].get ("user" )
70
-
71
- @property
72
- def user_agent (self ) -> Optional [str ]:
73
- """The User Agent of the API caller."""
74
- return self ["requestContext" ]["identity" ].get ("userAgent" )
75
-
76
- @property
77
- def user_arn (self ) -> Optional [str ]:
78
- """The Amazon Resource Name (ARN) of the effective user identified after authentication."""
79
- return self ["requestContext" ]["identity" ].get ("userArn" )
3
+ from aws_lambda_powertools .utilities .data_classes .common import (
4
+ BaseProxyEvent ,
5
+ BaseRequestContext ,
6
+ BaseRequestContextV2 ,
7
+ DictWrapper ,
8
+ )
80
9
81
10
82
11
class APIGatewayEventAuthorizer (DictWrapper ):
@@ -89,21 +18,7 @@ def scopes(self) -> Optional[List[str]]:
89
18
return self ["requestContext" ]["authorizer" ].get ("scopes" )
90
19
91
20
92
- class APIGatewayEventRequestContext (DictWrapper ):
93
- @property
94
- def account_id (self ) -> str :
95
- """The AWS account ID associated with the request."""
96
- return self ["requestContext" ]["accountId" ]
97
-
98
- @property
99
- def api_id (self ) -> str :
100
- """The identifier API Gateway assigns to your API."""
101
- return self ["requestContext" ]["apiId" ]
102
-
103
- @property
104
- def authorizer (self ) -> APIGatewayEventAuthorizer :
105
- return APIGatewayEventAuthorizer (self ._data )
106
-
21
+ class APIGatewayEventRequestContext (BaseRequestContext ):
107
22
@property
108
23
def connected_at (self ) -> Optional [int ]:
109
24
"""The Epoch-formatted connection time. (WebSocket API)"""
@@ -114,40 +29,11 @@ def connection_id(self) -> Optional[str]:
114
29
"""A unique ID for the connection that can be used to make a callback to the client. (WebSocket API)"""
115
30
return self ["requestContext" ].get ("connectionId" )
116
31
117
- @property
118
- def domain_name (self ) -> Optional [str ]:
119
- """A domain name"""
120
- return self ["requestContext" ].get ("domainName" )
121
-
122
- @property
123
- def domain_prefix (self ) -> Optional [str ]:
124
- return self ["requestContext" ].get ("domainPrefix" )
125
-
126
32
@property
127
33
def event_type (self ) -> Optional [str ]:
128
34
"""The event type: `CONNECT`, `MESSAGE`, or `DISCONNECT`. (WebSocket API)"""
129
35
return self ["requestContext" ].get ("eventType" )
130
36
131
- @property
132
- def extended_request_id (self ) -> Optional [str ]:
133
- """An automatically generated ID for the API call, which contains more useful information
134
- for debugging/troubleshooting."""
135
- return self ["requestContext" ].get ("extendedRequestId" )
136
-
137
- @property
138
- def protocol (self ) -> str :
139
- """The request protocol, for example, HTTP/1.1."""
140
- return self ["requestContext" ]["protocol" ]
141
-
142
- @property
143
- def http_method (self ) -> str :
144
- """The HTTP method used. Valid values include: DELETE, GET, HEAD, OPTIONS, PATCH, POST, and PUT."""
145
- return self ["requestContext" ]["httpMethod" ]
146
-
147
- @property
148
- def identity (self ) -> APIGatewayEventIdentity :
149
- return APIGatewayEventIdentity (self ._data )
150
-
151
37
@property
152
38
def message_direction (self ) -> Optional [str ]:
153
39
"""Message direction (WebSocket API)"""
@@ -159,46 +45,18 @@ def message_id(self) -> Optional[str]:
159
45
return self ["requestContext" ].get ("messageId" )
160
46
161
47
@property
162
- def path (self ) -> str :
163
- return self ["requestContext" ]["path" ]
164
-
165
- @property
166
- def stage (self ) -> str :
167
- """The deployment stage of the API request"""
168
- return self ["requestContext" ]["stage" ]
169
-
170
- @property
171
- def request_id (self ) -> str :
172
- """The ID that API Gateway assigns to the API request."""
173
- return self ["requestContext" ]["requestId" ]
174
-
175
- @property
176
- def request_time (self ) -> Optional [str ]:
177
- """The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm)"""
178
- return self ["requestContext" ].get ("requestTime" )
179
-
180
- @property
181
- def request_time_epoch (self ) -> int :
182
- """The Epoch-formatted request time."""
183
- return self ["requestContext" ]["requestTimeEpoch" ]
184
-
185
- @property
186
- def resource_id (self ) -> str :
187
- return self ["requestContext" ]["resourceId" ]
188
-
189
- @property
190
- def resource_path (self ) -> str :
191
- return self ["requestContext" ]["resourcePath" ]
48
+ def operation_name (self ) -> Optional [str ]:
49
+ """The name of the operation being performed"""
50
+ return self ["requestContext" ].get ("operationName" )
192
51
193
52
@property
194
53
def route_key (self ) -> Optional [str ]:
195
54
"""The selected route key."""
196
55
return self ["requestContext" ].get ("routeKey" )
197
56
198
57
@property
199
- def operation_name (self ) -> Optional [str ]:
200
- """The name of the operation being performed"""
201
- return self ["requestContext" ].get ("operationName" )
58
+ def authorizer (self ) -> APIGatewayEventAuthorizer :
59
+ return APIGatewayEventAuthorizer (self ._data )
202
60
203
61
204
62
class APIGatewayProxyEvent (BaseProxyEvent ):
@@ -238,31 +96,6 @@ def stage_variables(self) -> Optional[Dict[str, str]]:
238
96
return self .get ("stageVariables" )
239
97
240
98
241
- class RequestContextV2Http (DictWrapper ):
242
- @property
243
- def method (self ) -> str :
244
- return self ["requestContext" ]["http" ]["method" ]
245
-
246
- @property
247
- def path (self ) -> str :
248
- return self ["requestContext" ]["http" ]["path" ]
249
-
250
- @property
251
- def protocol (self ) -> str :
252
- """The request protocol, for example, HTTP/1.1."""
253
- return self ["requestContext" ]["http" ]["protocol" ]
254
-
255
- @property
256
- def source_ip (self ) -> str :
257
- """The source IP address of the TCP connection making the request to API Gateway."""
258
- return self ["requestContext" ]["http" ]["sourceIp" ]
259
-
260
- @property
261
- def user_agent (self ) -> str :
262
- """The User Agent of the API caller."""
263
- return self ["requestContext" ]["http" ]["userAgent" ]
264
-
265
-
266
99
class RequestContextV2AuthorizerIam (DictWrapper ):
267
100
@property
268
101
def access_key (self ) -> Optional [str ]:
@@ -334,60 +167,12 @@ def iam(self) -> Optional[RequestContextV2AuthorizerIam]:
334
167
return None if iam is None else RequestContextV2AuthorizerIam (iam )
335
168
336
169
337
- class RequestContextV2 (DictWrapper ):
338
- @property
339
- def account_id (self ) -> str :
340
- """The AWS account ID associated with the request."""
341
- return self ["requestContext" ]["accountId" ]
342
-
343
- @property
344
- def api_id (self ) -> str :
345
- """The identifier API Gateway assigns to your API."""
346
- return self ["requestContext" ]["apiId" ]
347
-
170
+ class RequestContextV2 (BaseRequestContextV2 ):
348
171
@property
349
172
def authorizer (self ) -> Optional [RequestContextV2Authorizer ]:
350
173
authorizer = self ["requestContext" ].get ("authorizer" )
351
174
return None if authorizer is None else RequestContextV2Authorizer (authorizer )
352
175
353
- @property
354
- def domain_name (self ) -> str :
355
- """A domain name"""
356
- return self ["requestContext" ]["domainName" ]
357
-
358
- @property
359
- def domain_prefix (self ) -> str :
360
- return self ["requestContext" ]["domainPrefix" ]
361
-
362
- @property
363
- def http (self ) -> RequestContextV2Http :
364
- return RequestContextV2Http (self ._data )
365
-
366
- @property
367
- def request_id (self ) -> str :
368
- """The ID that API Gateway assigns to the API request."""
369
- return self ["requestContext" ]["requestId" ]
370
-
371
- @property
372
- def route_key (self ) -> str :
373
- """The selected route key."""
374
- return self ["requestContext" ]["routeKey" ]
375
-
376
- @property
377
- def stage (self ) -> str :
378
- """The deployment stage of the API request"""
379
- return self ["requestContext" ]["stage" ]
380
-
381
- @property
382
- def time (self ) -> str :
383
- """The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm)."""
384
- return self ["requestContext" ]["time" ]
385
-
386
- @property
387
- def time_epoch (self ) -> int :
388
- """The Epoch-formatted request time."""
389
- return self ["requestContext" ]["timeEpoch" ]
390
-
391
176
392
177
class APIGatewayProxyEventV2 (BaseProxyEvent ):
393
178
"""AWS Lambda proxy V2 event
0 commit comments