aws-lambda-powertools 3.8.1a6__py3-none-any.whl → 3.8.1a8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. aws_lambda_powertools/metrics/provider/datadog/datadog.py +4 -1
  2. aws_lambda_powertools/shared/version.py +1 -1
  3. aws_lambda_powertools/utilities/data_classes/__init__.py +2 -0
  4. aws_lambda_powertools/utilities/data_classes/alb_event.py +2 -6
  5. aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py +2 -2
  6. aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +12 -21
  7. aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py +128 -0
  8. aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py +7 -7
  9. aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py +2 -4
  10. aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +116 -169
  11. aws_lambda_powertools/utilities/data_classes/common.py +46 -47
  12. aws_lambda_powertools/utilities/data_classes/kinesis_firehose_event.py +7 -11
  13. aws_lambda_powertools/utilities/data_classes/kinesis_stream_event.py +6 -6
  14. aws_lambda_powertools/utilities/data_classes/s3_event.py +20 -20
  15. aws_lambda_powertools/utilities/data_classes/ses_event.py +3 -3
  16. aws_lambda_powertools/utilities/data_classes/vpc_lattice.py +2 -10
  17. {aws_lambda_powertools-3.8.1a6.dist-info → aws_lambda_powertools-3.8.1a8.dist-info}/METADATA +2 -2
  18. {aws_lambda_powertools-3.8.1a6.dist-info → aws_lambda_powertools-3.8.1a8.dist-info}/RECORD +20 -19
  19. {aws_lambda_powertools-3.8.1a6.dist-info → aws_lambda_powertools-3.8.1a8.dist-info}/LICENSE +0 -0
  20. {aws_lambda_powertools-3.8.1a6.dist-info → aws_lambda_powertools-3.8.1a8.dist-info}/WHEEL +0 -0
@@ -205,7 +205,6 @@ class BaseProxyEvent(DictWrapper):
205
205
  """Parses the submitted body as json"""
206
206
  if self.decoded_body:
207
207
  return self._json_deserializer(self.decoded_body)
208
-
209
208
  return None
210
209
 
211
210
  @cached_property
@@ -370,81 +369,81 @@ class RequestContextClientCert(DictWrapper):
370
369
  class APIGatewayEventIdentity(DictWrapper):
371
370
  @property
372
371
  def access_key(self) -> str | None:
373
- return self["requestContext"]["identity"].get("accessKey")
372
+ return self.get("accessKey")
374
373
 
375
374
  @property
376
375
  def account_id(self) -> str | None:
377
376
  """The AWS account ID associated with the request."""
378
- return self["requestContext"]["identity"].get("accountId")
377
+ return self.get("accountId")
379
378
 
380
379
  @property
381
380
  def api_key(self) -> str | None:
382
381
  """For API methods that require an API key, this variable is the API key associated with the method request.
383
382
  For methods that don't require an API key, this variable is null."""
384
- return self["requestContext"]["identity"].get("apiKey")
383
+ return self.get("apiKey")
385
384
 
386
385
  @property
387
386
  def api_key_id(self) -> str | None:
388
387
  """The API key ID associated with an API request that requires an API key."""
389
- return self["requestContext"]["identity"].get("apiKeyId")
388
+ return self.get("apiKeyId")
390
389
 
391
390
  @property
392
391
  def caller(self) -> str | None:
393
392
  """The principal identifier of the caller making the request."""
394
- return self["requestContext"]["identity"].get("caller")
393
+ return self.get("caller")
395
394
 
396
395
  @property
397
396
  def cognito_authentication_provider(self) -> str | None:
398
397
  """A comma-separated list of the Amazon Cognito authentication providers used by the caller
399
398
  making the request. Available only if the request was signed with Amazon Cognito credentials."""
400
- return self["requestContext"]["identity"].get("cognitoAuthenticationProvider")
399
+ return self.get("cognitoAuthenticationProvider")
401
400
 
402
401
  @property
403
402
  def cognito_authentication_type(self) -> str | None:
404
403
  """The Amazon Cognito authentication type of the caller making the request.
405
404
  Available only if the request was signed with Amazon Cognito credentials."""
406
- return self["requestContext"]["identity"].get("cognitoAuthenticationType")
405
+ return self.get("cognitoAuthenticationType")
407
406
 
408
407
  @property
409
408
  def cognito_identity_id(self) -> str | None:
410
409
  """The Amazon Cognito identity ID of the caller making the request.
411
410
  Available only if the request was signed with Amazon Cognito credentials."""
412
- return self["requestContext"]["identity"].get("cognitoIdentityId")
411
+ return self.get("cognitoIdentityId")
413
412
 
414
413
  @property
415
414
  def cognito_identity_pool_id(self) -> str | None:
416
415
  """The Amazon Cognito identity pool ID of the caller making the request.
417
416
  Available only if the request was signed with Amazon Cognito credentials."""
418
- return self["requestContext"]["identity"].get("cognitoIdentityPoolId")
417
+ return self.get("cognitoIdentityPoolId")
419
418
 
420
419
  @property
421
420
  def principal_org_id(self) -> str | None:
422
421
  """The AWS organization ID."""
423
- return self["requestContext"]["identity"].get("principalOrgId")
422
+ return self.get("principalOrgId")
424
423
 
425
424
  @property
426
425
  def source_ip(self) -> str:
427
426
  """The source IP address of the TCP connection making the request to API Gateway."""
428
- return self["requestContext"]["identity"]["sourceIp"]
427
+ return self["sourceIp"]
429
428
 
430
429
  @property
431
430
  def user(self) -> str | None:
432
431
  """The principal identifier of the user making the request."""
433
- return self["requestContext"]["identity"].get("user")
432
+ return self.get("user")
434
433
 
435
434
  @property
436
435
  def user_agent(self) -> str | None:
437
436
  """The User Agent of the API caller."""
438
- return self["requestContext"]["identity"].get("userAgent")
437
+ return self.get("userAgent")
439
438
 
440
439
  @property
441
440
  def user_arn(self) -> str | None:
442
441
  """The Amazon Resource Name (ARN) of the effective user identified after authentication."""
443
- return self["requestContext"]["identity"].get("userArn")
442
+ return self.get("userArn")
444
443
 
445
444
  @property
446
445
  def client_cert(self) -> RequestContextClientCert | None:
447
- client_cert = self["requestContext"]["identity"].get("clientCert")
446
+ client_cert = self.get("clientCert")
448
447
  return None if client_cert is None else RequestContextClientCert(client_cert)
449
448
 
450
449
 
@@ -452,153 +451,153 @@ class BaseRequestContext(DictWrapper):
452
451
  @property
453
452
  def account_id(self) -> str:
454
453
  """The AWS account ID associated with the request."""
455
- return self["requestContext"]["accountId"]
454
+ return self["accountId"]
456
455
 
457
456
  @property
458
457
  def api_id(self) -> str:
459
458
  """The identifier API Gateway assigns to your API."""
460
- return self["requestContext"]["apiId"]
459
+ return self["apiId"]
461
460
 
462
461
  @property
463
462
  def domain_name(self) -> str | None:
464
463
  """A domain name"""
465
- return self["requestContext"].get("domainName")
464
+ return self.get("domainName")
466
465
 
467
466
  @property
468
467
  def domain_prefix(self) -> str | None:
469
- return self["requestContext"].get("domainPrefix")
468
+ return self.get("domainPrefix")
470
469
 
471
470
  @property
472
471
  def extended_request_id(self) -> str | None:
473
472
  """An automatically generated ID for the API call, which contains more useful information
474
473
  for debugging/troubleshooting."""
475
- return self["requestContext"].get("extendedRequestId")
474
+ return self.get("extendedRequestId")
476
475
 
477
476
  @property
478
477
  def protocol(self) -> str:
479
478
  """The request protocol, for example, HTTP/1.1."""
480
- return self["requestContext"]["protocol"]
479
+ return self["protocol"]
481
480
 
482
481
  @property
483
482
  def http_method(self) -> str:
484
483
  """The HTTP method used. Valid values include: DELETE, GET, HEAD, OPTIONS, PATCH, POST, and PUT."""
485
- return self["requestContext"]["httpMethod"]
484
+ return self["httpMethod"]
486
485
 
487
486
  @property
488
487
  def identity(self) -> APIGatewayEventIdentity:
489
- return APIGatewayEventIdentity(self._data)
488
+ return APIGatewayEventIdentity(self["identity"])
490
489
 
491
490
  @property
492
491
  def path(self) -> str:
493
- return self["requestContext"]["path"]
492
+ return self["path"]
494
493
 
495
494
  @property
496
495
  def stage(self) -> str:
497
496
  """The deployment stage of the API request"""
498
- return self["requestContext"]["stage"]
497
+ return self["stage"]
499
498
 
500
499
  @property
501
500
  def request_id(self) -> str:
502
501
  """The ID that API Gateway assigns to the API request."""
503
- return self["requestContext"]["requestId"]
502
+ return self["requestId"]
504
503
 
505
504
  @property
506
505
  def request_time(self) -> str | None:
507
506
  """The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm)"""
508
- return self["requestContext"].get("requestTime")
507
+ return self.get("requestTime")
509
508
 
510
509
  @property
511
510
  def request_time_epoch(self) -> int:
512
511
  """The Epoch-formatted request time."""
513
- return self["requestContext"]["requestTimeEpoch"]
512
+ return self["requestTimeEpoch"]
514
513
 
515
514
  @property
516
515
  def resource_id(self) -> str:
517
- return self["requestContext"]["resourceId"]
516
+ return self["resourceId"]
518
517
 
519
518
  @property
520
519
  def resource_path(self) -> str:
521
- return self["requestContext"]["resourcePath"]
520
+ return self["resourcePath"]
522
521
 
523
522
 
524
523
  class RequestContextV2Http(DictWrapper):
525
524
  @property
526
525
  def method(self) -> str:
527
- return self["requestContext"]["http"]["method"]
526
+ return self["method"]
528
527
 
529
528
  @property
530
529
  def path(self) -> str:
531
- return self["requestContext"]["http"]["path"]
530
+ return self["path"]
532
531
 
533
532
  @property
534
533
  def protocol(self) -> str:
535
534
  """The request protocol, for example, HTTP/1.1."""
536
- return self["requestContext"]["http"]["protocol"]
535
+ return self["protocol"]
537
536
 
538
537
  @property
539
538
  def source_ip(self) -> str:
540
539
  """The source IP address of the TCP connection making the request to API Gateway."""
541
- return self["requestContext"]["http"]["sourceIp"]
540
+ return self["sourceIp"]
542
541
 
543
542
  @property
544
543
  def user_agent(self) -> str:
545
544
  """The User Agent of the API caller."""
546
- return self["requestContext"]["http"]["userAgent"]
545
+ return self["userAgent"]
547
546
 
548
547
 
549
548
  class BaseRequestContextV2(DictWrapper):
550
549
  @property
551
550
  def account_id(self) -> str:
552
551
  """The AWS account ID associated with the request."""
553
- return self["requestContext"]["accountId"]
552
+ return self["accountId"]
554
553
 
555
554
  @property
556
555
  def api_id(self) -> str:
557
556
  """The identifier API Gateway assigns to your API."""
558
- return self["requestContext"]["apiId"]
557
+ return self["apiId"]
559
558
 
560
559
  @property
561
560
  def domain_name(self) -> str:
562
561
  """A domain name"""
563
- return self["requestContext"]["domainName"]
562
+ return self["domainName"]
564
563
 
565
564
  @property
566
565
  def domain_prefix(self) -> str:
567
- return self["requestContext"]["domainPrefix"]
566
+ return self["domainPrefix"]
568
567
 
569
568
  @property
570
569
  def http(self) -> RequestContextV2Http:
571
- return RequestContextV2Http(self._data)
570
+ return RequestContextV2Http(self["http"])
572
571
 
573
572
  @property
574
573
  def request_id(self) -> str:
575
574
  """The ID that API Gateway assigns to the API request."""
576
- return self["requestContext"]["requestId"]
575
+ return self["requestId"]
577
576
 
578
577
  @property
579
578
  def route_key(self) -> str:
580
579
  """The selected route key."""
581
- return self["requestContext"]["routeKey"]
580
+ return self["routeKey"]
582
581
 
583
582
  @property
584
583
  def stage(self) -> str:
585
584
  """The deployment stage of the API request"""
586
- return self["requestContext"]["stage"]
585
+ return self["stage"]
587
586
 
588
587
  @property
589
588
  def time(self) -> str:
590
589
  """The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm)."""
591
- return self["requestContext"]["time"]
590
+ return self["time"]
592
591
 
593
592
  @property
594
593
  def time_epoch(self) -> int:
595
594
  """The Epoch-formatted request time."""
596
- return self["requestContext"]["timeEpoch"]
595
+ return self["timeEpoch"]
597
596
 
598
597
  @property
599
598
  def authentication(self) -> RequestContextClientCert | None:
600
599
  """Optional when using mutual TLS authentication"""
601
600
  # FunctionURL might have NONE as AuthZ
602
- authentication = self["requestContext"].get("authentication") or {}
601
+ authentication = self.get("authentication") or {}
603
602
  client_cert = authentication.get("clientCert")
604
603
  return None if client_cert is None else RequestContextClientCert(client_cert)
@@ -177,30 +177,25 @@ class KinesisFirehoseDataTransformationResponse:
177
177
 
178
178
 
179
179
  class KinesisFirehoseRecordMetadata(DictWrapper):
180
- @property
181
- def _metadata(self) -> dict:
182
- """Optional: metadata associated with this record; present only when Kinesis Stream is source"""
183
- return self["kinesisRecordMetadata"] # could raise KeyError
184
-
185
180
  @property
186
181
  def shard_id(self) -> str:
187
182
  """Kinesis stream shard ID; present only when Kinesis Stream is source"""
188
- return self._metadata["shardId"]
183
+ return self["shardId"]
189
184
 
190
185
  @property
191
186
  def partition_key(self) -> str:
192
187
  """Kinesis stream partition key; present only when Kinesis Stream is source"""
193
- return self._metadata["partitionKey"]
188
+ return self["partitionKey"]
194
189
 
195
190
  @property
196
191
  def approximate_arrival_timestamp(self) -> int:
197
192
  """Kinesis stream approximate arrival ISO timestamp; present only when Kinesis Stream is source"""
198
- return self._metadata["approximateArrivalTimestamp"]
193
+ return self["approximateArrivalTimestamp"]
199
194
 
200
195
  @property
201
196
  def sequence_number(self) -> str:
202
197
  """Kinesis stream sequence number; present only when Kinesis Stream is source"""
203
- return self._metadata["sequenceNumber"]
198
+ return self["sequenceNumber"]
204
199
 
205
200
  @property
206
201
  def subsequence_number(self) -> int:
@@ -208,7 +203,7 @@ class KinesisFirehoseRecordMetadata(DictWrapper):
208
203
 
209
204
  Note: this will only be present for Kinesis streams using record aggregation
210
205
  """
211
- return self._metadata["subsequenceNumber"]
206
+ return self["subsequenceNumber"]
212
207
 
213
208
 
214
209
  class KinesisFirehoseRecord(DictWrapper):
@@ -230,7 +225,8 @@ class KinesisFirehoseRecord(DictWrapper):
230
225
  @property
231
226
  def metadata(self) -> KinesisFirehoseRecordMetadata | None:
232
227
  """Optional: metadata associated with this record; present only when Kinesis Stream is source"""
233
- return KinesisFirehoseRecordMetadata(self._data) if self.get("kinesisRecordMetadata") else None
228
+ metadata = self.get("kinesisRecordMetadata")
229
+ return KinesisFirehoseRecordMetadata(metadata) if metadata else None
234
230
 
235
231
  @property
236
232
  def data_as_bytes(self) -> bytes:
@@ -15,27 +15,27 @@ class KinesisStreamRecordPayload(DictWrapper):
15
15
  @property
16
16
  def approximate_arrival_timestamp(self) -> float:
17
17
  """The approximate time that the record was inserted into the stream"""
18
- return float(self["kinesis"]["approximateArrivalTimestamp"])
18
+ return float(self["approximateArrivalTimestamp"])
19
19
 
20
20
  @property
21
21
  def data(self) -> str:
22
22
  """The data blob"""
23
- return self["kinesis"]["data"]
23
+ return self["data"]
24
24
 
25
25
  @property
26
26
  def kinesis_schema_version(self) -> str:
27
27
  """Schema version for the record"""
28
- return self["kinesis"]["kinesisSchemaVersion"]
28
+ return self["kinesisSchemaVersion"]
29
29
 
30
30
  @property
31
31
  def partition_key(self) -> str:
32
32
  """Identifies which shard in the stream the data record is assigned to"""
33
- return self["kinesis"]["partitionKey"]
33
+ return self["partitionKey"]
34
34
 
35
35
  @property
36
36
  def sequence_number(self) -> str:
37
37
  """The unique identifier of the record within its shard"""
38
- return self["kinesis"]["sequenceNumber"]
38
+ return self["sequenceNumber"]
39
39
 
40
40
  def data_as_bytes(self) -> bytes:
41
41
  """Decode binary encoded data as bytes"""
@@ -94,7 +94,7 @@ class KinesisStreamRecord(DictWrapper):
94
94
  @property
95
95
  def kinesis(self) -> KinesisStreamRecordPayload:
96
96
  """Underlying Kinesis record associated with the event"""
97
- return KinesisStreamRecordPayload(self._data)
97
+ return KinesisStreamRecordPayload(self["kinesis"])
98
98
 
99
99
 
100
100
  class KinesisStreamEvent(DictWrapper):
@@ -18,7 +18,7 @@ class S3Identity(DictWrapper):
18
18
  class S3RequestParameters(DictWrapper):
19
19
  @property
20
20
  def source_ip_address(self) -> str:
21
- return self["requestParameters"]["sourceIPAddress"]
21
+ return self["sourceIPAddress"]
22
22
 
23
23
 
24
24
  class S3EventNotificationEventBridgeBucket(DictWrapper):
@@ -40,8 +40,8 @@ class S3EventBridgeNotificationObject(DictWrapper):
40
40
 
41
41
  @property
42
42
  def etag(self) -> str:
43
- """Object etag. Object deletion event doesn't contain etag; we default to empty string"""
44
- return self.get("etag", "") # type: ignore[return-value] # false positive
43
+ """Object eTag. Object deletion event doesn't contain eTag; we default to empty string"""
44
+ return self.get("etag") or ""
45
45
 
46
46
  @property
47
47
  def version_id(self) -> str:
@@ -156,77 +156,77 @@ class S3EventBridgeNotificationEvent(EventBridgeEvent):
156
156
  class S3Bucket(DictWrapper):
157
157
  @property
158
158
  def name(self) -> str:
159
- return self["s3"]["bucket"]["name"]
159
+ return self["name"]
160
160
 
161
161
  @property
162
162
  def owner_identity(self) -> S3Identity:
163
- return S3Identity(self["s3"]["bucket"]["ownerIdentity"])
163
+ return S3Identity(self["ownerIdentity"])
164
164
 
165
165
  @property
166
166
  def arn(self) -> str:
167
- return self["s3"]["bucket"]["arn"]
167
+ return self["arn"]
168
168
 
169
169
 
170
170
  class S3Object(DictWrapper):
171
171
  @property
172
172
  def key(self) -> str:
173
173
  """Object key"""
174
- return self["s3"]["object"]["key"]
174
+ return self["key"]
175
175
 
176
176
  @property
177
177
  def size(self) -> int:
178
178
  """Object byte size"""
179
- return int(self["s3"]["object"]["size"])
179
+ return int(self["size"])
180
180
 
181
181
  @property
182
182
  def etag(self) -> str:
183
183
  """Object eTag. Object deletion event doesn't contain eTag; we default to empty string"""
184
- return self["s3"]["object"].get("eTag", "")
184
+ return self.get("eTag") or ""
185
185
 
186
186
  @property
187
187
  def version_id(self) -> str | None:
188
188
  """Object version if bucket is versioning-enabled, otherwise null"""
189
- return self["s3"]["object"].get("versionId")
189
+ return self.get("versionId")
190
190
 
191
191
  @property
192
192
  def sequencer(self) -> str:
193
193
  """A string representation of a hexadecimal value used to determine event sequence,
194
194
  only used with PUTs and DELETEs
195
195
  """
196
- return self["s3"]["object"]["sequencer"]
196
+ return self["sequencer"]
197
197
 
198
198
 
199
199
  class S3Message(DictWrapper):
200
200
  @property
201
201
  def s3_schema_version(self) -> str:
202
- return self["s3"]["s3SchemaVersion"]
202
+ return self["s3SchemaVersion"]
203
203
 
204
204
  @property
205
205
  def configuration_id(self) -> str:
206
206
  """ID found in the bucket notification configuration"""
207
- return self["s3"]["configurationId"]
207
+ return self["configurationId"]
208
208
 
209
209
  @property
210
210
  def bucket(self) -> S3Bucket:
211
- return S3Bucket(self._data)
211
+ return S3Bucket(self["bucket"])
212
212
 
213
213
  @property
214
214
  def get_object(self) -> S3Object:
215
215
  """Get the `object` property as an S3Object"""
216
216
  # Note: this name conflicts with existing python builtins
217
- return S3Object(self._data)
217
+ return S3Object(self["object"])
218
218
 
219
219
 
220
220
  class S3EventRecordGlacierRestoreEventData(DictWrapper):
221
221
  @property
222
222
  def lifecycle_restoration_expiry_time(self) -> str:
223
223
  """Time when the object restoration will be expired."""
224
- return self["restoreEventData"]["lifecycleRestorationExpiryTime"]
224
+ return self["lifecycleRestorationExpiryTime"]
225
225
 
226
226
  @property
227
227
  def lifecycle_restore_storage_class(self) -> str:
228
228
  """Source storage class for restore"""
229
- return self["restoreEventData"]["lifecycleRestoreStorageClass"]
229
+ return self["lifecycleRestoreStorageClass"]
230
230
 
231
231
 
232
232
  class S3EventRecordGlacierEventData(DictWrapper):
@@ -236,7 +236,7 @@ class S3EventRecordGlacierEventData(DictWrapper):
236
236
 
237
237
  The glacierEventData key is only visible for s3:ObjectRestore:Completed events
238
238
  """
239
- return S3EventRecordGlacierRestoreEventData(self._data)
239
+ return S3EventRecordGlacierRestoreEventData(self["restoreEventData"])
240
240
 
241
241
 
242
242
  class S3EventRecord(DictWrapper):
@@ -272,7 +272,7 @@ class S3EventRecord(DictWrapper):
272
272
 
273
273
  @property
274
274
  def request_parameters(self) -> S3RequestParameters:
275
- return S3RequestParameters(self._data)
275
+ return S3RequestParameters(self["requestParameters"])
276
276
 
277
277
  @property
278
278
  def response_elements(self) -> dict[str, str]:
@@ -286,7 +286,7 @@ class S3EventRecord(DictWrapper):
286
286
 
287
287
  @property
288
288
  def s3(self) -> S3Message:
289
- return S3Message(self._data)
289
+ return S3Message(self["s3"])
290
290
 
291
291
  @property
292
292
  def glacier_event_data(self) -> S3EventRecordGlacierEventData | None:
@@ -212,11 +212,11 @@ class SESReceipt(DictWrapper):
212
212
  class SESMessage(DictWrapper):
213
213
  @property
214
214
  def mail(self) -> SESMail:
215
- return SESMail(self["ses"]["mail"])
215
+ return SESMail(self["mail"])
216
216
 
217
217
  @property
218
218
  def receipt(self) -> SESReceipt:
219
- return SESReceipt(self["ses"]["receipt"])
219
+ return SESReceipt(self["receipt"])
220
220
 
221
221
 
222
222
  class SESEventRecord(DictWrapper):
@@ -232,7 +232,7 @@ class SESEventRecord(DictWrapper):
232
232
 
233
233
  @property
234
234
  def ses(self) -> SESMessage:
235
- return SESMessage(self._data)
235
+ return SESMessage(self["ses"])
236
236
 
237
237
 
238
238
  class SESEvent(DictWrapper):
@@ -16,6 +16,8 @@ from aws_lambda_powertools.utilities.data_classes.shared_functions import base64
16
16
 
17
17
 
18
18
  class VPCLatticeEventBase(BaseProxyEvent):
19
+ # is_base64_encoded and path are inherited from BaseProxyEvent class.
20
+
19
21
  @property
20
22
  def body(self) -> str:
21
23
  """The VPC Lattice body."""
@@ -169,16 +171,6 @@ class VPCLatticeEventV2(VPCLatticeEventBase):
169
171
  """The VPC Lattice v2 Event version"""
170
172
  return self["version"]
171
173
 
172
- @property
173
- def is_base64_encoded(self) -> bool | None:
174
- """A boolean flag to indicate if the applicable request payload is Base64-encode"""
175
- return self.get("isBase64Encoded")
176
-
177
- @property
178
- def path(self) -> str:
179
- """The VPC Lattice v2 Event path"""
180
- return self["path"]
181
-
182
174
  @property
183
175
  def request_context(self) -> vpcLatticeEventV2RequestContext:
184
176
  """The VPC Lattice v2 Event request context."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aws_lambda_powertools
3
- Version: 3.8.1a6
3
+ Version: 3.8.1a8
4
4
  Summary: Powertools for AWS Lambda (Python) is a developer toolkit to implement Serverless best practices and increase developer velocity.
5
5
  License: MIT
6
6
  Keywords: aws_lambda_powertools,aws,tracing,logging,lambda,powertools,feature_flags,idempotency,middleware
@@ -28,7 +28,7 @@ Provides-Extra: validation
28
28
  Requires-Dist: aws-encryption-sdk (>=3.1.1,<5.0.0) ; extra == "all" or extra == "datamasking"
29
29
  Requires-Dist: aws-xray-sdk (>=2.8.0,<3.0.0) ; extra == "tracer" or extra == "all"
30
30
  Requires-Dist: boto3 (>=1.34.32,<2.0.0) ; extra == "aws-sdk"
31
- Requires-Dist: datadog-lambda (>=4.77,<7.0) ; extra == "datadog"
31
+ Requires-Dist: datadog-lambda (>=6.106.0,<7.0.0) ; extra == "datadog"
32
32
  Requires-Dist: fastjsonschema (>=2.14.5,<3.0.0) ; extra == "validation" or extra == "all"
33
33
  Requires-Dist: jmespath (>=1.0.1,<2.0.0)
34
34
  Requires-Dist: jsonpath-ng (>=1.6.0,<2.0.0) ; extra == "all" or extra == "datamasking"