aws-lambda-powertools 3.9.1a7__py3-none-any.whl → 3.9.1a9__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.
- aws_lambda_powertools/logging/formatter.py +14 -8
- aws_lambda_powertools/shared/version.py +1 -1
- aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py +8 -0
- aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +5 -4
- aws_lambda_powertools/utilities/parser/models/__init__.py +4 -0
- aws_lambda_powertools/utilities/parser/models/appsync.py +72 -0
- {aws_lambda_powertools-3.9.1a7.dist-info → aws_lambda_powertools-3.9.1a9.dist-info}/METADATA +1 -1
- {aws_lambda_powertools-3.9.1a7.dist-info → aws_lambda_powertools-3.9.1a9.dist-info}/RECORD +10 -9
- {aws_lambda_powertools-3.9.1a7.dist-info → aws_lambda_powertools-3.9.1a9.dist-info}/LICENSE +0 -0
- {aws_lambda_powertools-3.9.1a7.dist-info → aws_lambda_powertools-3.9.1a9.dist-info}/WHEEL +0 -0
@@ -357,19 +357,25 @@ class LambdaPowertoolsFormatter(BasePowertoolsFormatter):
|
|
357
357
|
return message
|
358
358
|
|
359
359
|
def _serialize_stacktrace(self, log_record: logging.LogRecord) -> LogStackTrace | None:
|
360
|
-
if
|
360
|
+
# Check if the first element of exc_info has the __name__ attribute,
|
361
|
+
# which indicates it is likely an exception class or object.
|
362
|
+
# See: https://github.com/aws-powertools/powertools-lambda-python/issues/6358
|
363
|
+
if isinstance(log_record.exc_info, tuple) and hasattr(log_record.exc_info[0], "__name__"):
|
361
364
|
exception_info: LogStackTrace = {
|
362
365
|
"type": log_record.exc_info[0].__name__, # type: ignore
|
363
366
|
"value": log_record.exc_info[1], # type: ignore
|
364
367
|
"module": log_record.exc_info[1].__class__.__module__,
|
365
|
-
"frames": [
|
368
|
+
"frames": [
|
369
|
+
{
|
370
|
+
"file": fs.filename,
|
371
|
+
"line": fs.lineno,
|
372
|
+
"function": fs.name,
|
373
|
+
"statement": fs.line,
|
374
|
+
}
|
375
|
+
for fs in traceback.extract_tb(log_record.exc_info[2])
|
376
|
+
],
|
366
377
|
}
|
367
378
|
|
368
|
-
exception_info["frames"] = [
|
369
|
-
{"file": fs.filename, "line": fs.lineno, "function": fs.name, "statement": fs.line}
|
370
|
-
for fs in traceback.extract_tb(log_record.exc_info[2])
|
371
|
-
]
|
372
|
-
|
373
379
|
return exception_info
|
374
380
|
|
375
381
|
return None
|
@@ -387,7 +393,7 @@ class LambdaPowertoolsFormatter(BasePowertoolsFormatter):
|
|
387
393
|
log_record: tuple[str, str] | tuple[None, None]
|
388
394
|
Log record with constant traceback info and exception name
|
389
395
|
"""
|
390
|
-
if log_record.exc_info:
|
396
|
+
if isinstance(log_record.exc_info, tuple) and hasattr(log_record.exc_info[0], "__name__"):
|
391
397
|
return self.formatException(log_record.exc_info), log_record.exc_info[0].__name__ # type: ignore
|
392
398
|
|
393
399
|
return None, None
|
@@ -123,6 +123,14 @@ class APIGatewayWebSocketEvent(DictWrapper):
|
|
123
123
|
def multi_value_headers(self) -> dict[str, list[str]]:
|
124
124
|
return CaseInsensitiveDict(self.get("multiValueHeaders"))
|
125
125
|
|
126
|
+
@property
|
127
|
+
def query_string_parameters(self) -> dict[str, str]:
|
128
|
+
return CaseInsensitiveDict(self.get("queryStringParameters"))
|
129
|
+
|
130
|
+
@property
|
131
|
+
def multi_value_query_string_parameters(self) -> dict[str, list[str]]:
|
132
|
+
return CaseInsensitiveDict(self.get("multiValueQueryStringParameters"))
|
133
|
+
|
126
134
|
@property
|
127
135
|
def request_context(self) -> APIGatewayWebSocketEventRequestContext:
|
128
136
|
return APIGatewayWebSocketEventRequestContext(self["requestContext"])
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import json
|
3
4
|
from typing import Any, Literal
|
4
5
|
|
5
6
|
from aws_lambda_powertools.utilities.data_classes.common import (
|
@@ -44,7 +45,7 @@ class TransferFamilyAuthorizerResponse:
|
|
44
45
|
role_arn: str,
|
45
46
|
policy: str | None = None,
|
46
47
|
home_directory: str | None = None,
|
47
|
-
home_directory_details: dict | None = None,
|
48
|
+
home_directory_details: list[dict] | None = None,
|
48
49
|
home_directory_type: Literal["LOGICAL", "PATH"] = "PATH",
|
49
50
|
user_gid: int | None = None,
|
50
51
|
user_uid: int | None = None,
|
@@ -62,7 +63,7 @@ class TransferFamilyAuthorizerResponse:
|
|
62
63
|
if not home_directory_details:
|
63
64
|
raise ValueError("home_directory_details must be set when home_directory_type is LOGICAL")
|
64
65
|
|
65
|
-
response["HomeDirectoryDetails"] =
|
66
|
+
response["HomeDirectoryDetails"] = json.dumps(home_directory_details)
|
66
67
|
|
67
68
|
else:
|
68
69
|
raise ValueError(f"Invalid home_directory_type: {home_directory_type}")
|
@@ -88,7 +89,7 @@ class TransferFamilyAuthorizerResponse:
|
|
88
89
|
user_uid: int,
|
89
90
|
policy: str | None = None,
|
90
91
|
home_directory: str | None = None,
|
91
|
-
home_directory_details: dict | None = None,
|
92
|
+
home_directory_details: list[dict] | None = None,
|
92
93
|
home_directory_type: Literal["LOGICAL", "PATH"] = "PATH",
|
93
94
|
public_keys: str | None = None,
|
94
95
|
) -> dict[str, Any]:
|
@@ -143,7 +144,7 @@ class TransferFamilyAuthorizerResponse:
|
|
143
144
|
role_arn: str,
|
144
145
|
policy: str | None = None,
|
145
146
|
home_directory: str | None = None,
|
146
|
-
home_directory_details: dict | None = None,
|
147
|
+
home_directory_details: list[dict] | None = None,
|
147
148
|
home_directory_type: Literal["LOGICAL", "PATH"] = "PATH",
|
148
149
|
public_keys: str | None = None,
|
149
150
|
) -> dict[str, Any]:
|
@@ -27,6 +27,9 @@ from .apigwv2 import (
|
|
27
27
|
RequestContextV2AuthorizerJwt,
|
28
28
|
RequestContextV2Http,
|
29
29
|
)
|
30
|
+
from .appsync import (
|
31
|
+
AppSyncResolverEventModel,
|
32
|
+
)
|
30
33
|
from .bedrock_agent import (
|
31
34
|
BedrockAgentEventModel,
|
32
35
|
BedrockAgentModel,
|
@@ -137,6 +140,7 @@ __all__ = [
|
|
137
140
|
"AlbModel",
|
138
141
|
"AlbRequestContext",
|
139
142
|
"AlbRequestContextData",
|
143
|
+
"AppSyncResolverEventModel",
|
140
144
|
"DynamoDBStreamModel",
|
141
145
|
"EventBridgeModel",
|
142
146
|
"DynamoDBStreamChangedRecordModel",
|
@@ -0,0 +1,72 @@
|
|
1
|
+
from typing import Any, Dict, List, Optional, Union
|
2
|
+
|
3
|
+
from pydantic import BaseModel
|
4
|
+
|
5
|
+
|
6
|
+
class AppSyncIamIdentity(BaseModel):
|
7
|
+
accountId: str
|
8
|
+
cognitoIdentityPoolId: Optional[str]
|
9
|
+
cognitoIdentityId: Optional[str]
|
10
|
+
sourceIp: List[str]
|
11
|
+
username: str
|
12
|
+
userArn: str
|
13
|
+
cognitoIdentityAuthType: Optional[str]
|
14
|
+
cognitoIdentityAuthProvider: Optional[str]
|
15
|
+
|
16
|
+
|
17
|
+
class AppSyncCognitoIdentity(BaseModel):
|
18
|
+
sub: str
|
19
|
+
issuer: str
|
20
|
+
username: str
|
21
|
+
claims: Dict[str, Any]
|
22
|
+
sourceIp: List[str]
|
23
|
+
defaultAuthStrategy: str
|
24
|
+
groups: Optional[List[str]]
|
25
|
+
|
26
|
+
|
27
|
+
class AppSyncOidcIdentity(BaseModel):
|
28
|
+
claims: Dict[str, Any]
|
29
|
+
issuer: str
|
30
|
+
sub: str
|
31
|
+
|
32
|
+
|
33
|
+
class AppSyncLambdaIdentity(BaseModel):
|
34
|
+
resolverContext: Dict[str, Any]
|
35
|
+
|
36
|
+
|
37
|
+
AppSyncIdentity = Union[
|
38
|
+
AppSyncIamIdentity,
|
39
|
+
AppSyncCognitoIdentity,
|
40
|
+
AppSyncOidcIdentity,
|
41
|
+
AppSyncLambdaIdentity,
|
42
|
+
]
|
43
|
+
|
44
|
+
|
45
|
+
class AppSyncRequestModel(BaseModel):
|
46
|
+
domainName: Optional[str]
|
47
|
+
headers: Dict[str, str]
|
48
|
+
|
49
|
+
|
50
|
+
class AppSyncInfoModel(BaseModel):
|
51
|
+
selectionSetList: List[str]
|
52
|
+
selectionSetGraphQL: str
|
53
|
+
parentTypeName: str
|
54
|
+
fieldName: str
|
55
|
+
variables: Dict[str, Any]
|
56
|
+
|
57
|
+
|
58
|
+
class AppSyncPrevModel(BaseModel):
|
59
|
+
result: Dict[str, Any]
|
60
|
+
|
61
|
+
|
62
|
+
class AppSyncResolverEventModel(BaseModel):
|
63
|
+
arguments: Dict[str, Any]
|
64
|
+
identity: Optional[AppSyncIdentity]
|
65
|
+
source: Optional[Dict[str, Any]]
|
66
|
+
request: AppSyncRequestModel
|
67
|
+
info: AppSyncInfoModel
|
68
|
+
prev: Optional[AppSyncPrevModel]
|
69
|
+
stash: Dict[str, Any]
|
70
|
+
|
71
|
+
|
72
|
+
AppSyncBatchResolverEventModel = List[AppSyncResolverEventModel]
|
{aws_lambda_powertools-3.9.1a7.dist-info → aws_lambda_powertools-3.9.1a9.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: aws_lambda_powertools
|
3
|
-
Version: 3.9.
|
3
|
+
Version: 3.9.1a9
|
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
|
@@ -45,7 +45,7 @@ aws_lambda_powertools/logging/constants.py,sha256=P0XgbCmG4NiP96kx0qxe6QUC3ShN12
|
|
45
45
|
aws_lambda_powertools/logging/correlation_paths.py,sha256=uHHrl03aWzpOsrGHZ-9E6PNoMFyKjv3APNMMkI1EN_c,411
|
46
46
|
aws_lambda_powertools/logging/exceptions.py,sha256=Fe_jk8O9vgUSUHxxOkz6Ev521aXsgPkMgA9Hb1nBn6g,232
|
47
47
|
aws_lambda_powertools/logging/filters.py,sha256=icet1o3-QSSvrmj2udL4ZYT0msf5b3rXj5l7p6dAxAs,523
|
48
|
-
aws_lambda_powertools/logging/formatter.py,sha256=
|
48
|
+
aws_lambda_powertools/logging/formatter.py,sha256=hWyxAubdJeiHEuCNH2JnPYWEACh0ApLqVfCedEJHrEU,19072
|
49
49
|
aws_lambda_powertools/logging/formatters/__init__.py,sha256=OqddpJcWMqRYhx5SFy-SPqtt72tkRZbfpEi_oCC47eI,301
|
50
50
|
aws_lambda_powertools/logging/formatters/datadog.py,sha256=NwaaBOp7jIlOAH158NzyvW-EwmWqqnYX9f7Uu_nIUYQ,3169
|
51
51
|
aws_lambda_powertools/logging/lambda_context.py,sha256=VHst_6hxMpXgScoxNwaC61UXPTIdd3AEBHTPzb4esPc,1736
|
@@ -88,7 +88,7 @@ aws_lambda_powertools/shared/json_encoder.py,sha256=JQeWNu-4M7_xI_hqYExrxsb3OcEH
|
|
88
88
|
aws_lambda_powertools/shared/lazy_import.py,sha256=TbXQm2bcwXdZrYdBaJJXIswyLlumM85RJ_A_0w-h-GU,2019
|
89
89
|
aws_lambda_powertools/shared/types.py,sha256=APkI38HbiTpSF19NSNii8Ydx73vmVUVotgEQ9jHruEI,124
|
90
90
|
aws_lambda_powertools/shared/user_agent.py,sha256=DrCMFQuT4a4iIrpcWpAIjY37EFqR9-QxlxDGD-Nn9Gg,7081
|
91
|
-
aws_lambda_powertools/shared/version.py,sha256=
|
91
|
+
aws_lambda_powertools/shared/version.py,sha256=nYtbRI1F1gKQqHYK75BqTxsNe1gX02ki7UnyyxdXBcw,84
|
92
92
|
aws_lambda_powertools/tracing/__init__.py,sha256=f4bMThOPBPWTPVcYqcAIErAJPerMsf3H_Z4gCXCsK9I,141
|
93
93
|
aws_lambda_powertools/tracing/base.py,sha256=DbLD8OSK05KLdSV36oNA5wDSGv8KbcOD19qMUqoXh58,4513
|
94
94
|
aws_lambda_powertools/tracing/extensions.py,sha256=APOfXOq-hRBKaK5WyfIyrd_6M1_9SWJZ3zxLA9jDZzU,492
|
@@ -105,7 +105,7 @@ aws_lambda_powertools/utilities/data_classes/active_mq_event.py,sha256=gJPzcSmw1
|
|
105
105
|
aws_lambda_powertools/utilities/data_classes/alb_event.py,sha256=cHfLaAWwhSuIk-H52xIA4Mq1nx8b0tDxN0slPy0ZamQ,1836
|
106
106
|
aws_lambda_powertools/utilities/data_classes/api_gateway_authorizer_event.py,sha256=dmoR9aIbhqRIrFKX__BFxvbkYl3fr72RbLct7hG5f04,27034
|
107
107
|
aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py,sha256=X5SxZDjVROT4h9xxw3CqZ5YAPD6m1w48CSG4sPpUPe8,10412
|
108
|
-
aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py,sha256=
|
108
|
+
aws_lambda_powertools/utilities/data_classes/api_gateway_websocket_event.py,sha256=6Ou7KMRn1OA-ri3zrBaqLpirL6NgXDJ7ba9ogq8rZBw,3526
|
109
109
|
aws_lambda_powertools/utilities/data_classes/appsync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
110
110
|
aws_lambda_powertools/utilities/data_classes/appsync/scalar_types_utils.py,sha256=EjaJKZsPwyM6XY-FrooZzadfAtvZRbYS1BHiyQi-GrQ,2662
|
111
111
|
aws_lambda_powertools/utilities/data_classes/appsync_authorizer_event.py,sha256=312D_hbPpCFK3978Ruhu91du5pj0N-5GeJ0rj9jZxk4,3833
|
@@ -138,7 +138,7 @@ aws_lambda_powertools/utilities/data_classes/ses_event.py,sha256=ViKTSB4N-7Kljfu
|
|
138
138
|
aws_lambda_powertools/utilities/data_classes/shared_functions.py,sha256=zAv_JzSJy_k3ZhLKyARXoX6zH7exqw9pjTDsmGB7qxw,4426
|
139
139
|
aws_lambda_powertools/utilities/data_classes/sns_event.py,sha256=bUL57gmObClTGrd_TFBLd1sNobnaurum0QkXyOJoNmI,3853
|
140
140
|
aws_lambda_powertools/utilities/data_classes/sqs_event.py,sha256=seWIKCpPbzKpPdXZWvrs94C92Nj2XwfGC1vXcI5gdQA,8804
|
141
|
-
aws_lambda_powertools/utilities/data_classes/transfer_family_event.py,sha256=
|
141
|
+
aws_lambda_powertools/utilities/data_classes/transfer_family_event.py,sha256=gfPvQeur8bBXl5gq46sc_z3Oz3JTnRlM7iXUK5cbjic,6856
|
142
142
|
aws_lambda_powertools/utilities/data_classes/vpc_lattice.py,sha256=SEZUvRTMsI-iQi7hcpqaKqYtJLYqIxX5ijqmeTSrf9E,6363
|
143
143
|
aws_lambda_powertools/utilities/data_masking/__init__.py,sha256=Ez0MABo8ARkgWKSu8Dog4uFSkkZuHkW7DoWcexJGeyU,108
|
144
144
|
aws_lambda_powertools/utilities/data_masking/base.py,sha256=66zN6M9B0gEEdoGqp9MKnORv_RMQdEeW8W_IrwfHa1I,16707
|
@@ -206,11 +206,12 @@ aws_lambda_powertools/utilities/parser/envelopes/vpc_lattice.py,sha256=RIwj1CQJ_
|
|
206
206
|
aws_lambda_powertools/utilities/parser/envelopes/vpc_latticev2.py,sha256=DGLibAGblJPPe1wC-9gvNWR8LusAzTeTLxwc3cizHzY,1264
|
207
207
|
aws_lambda_powertools/utilities/parser/exceptions.py,sha256=y6DXKUg48xgvswqMAxOYaUGRAqJgg8sm_F8JORgCa1U,207
|
208
208
|
aws_lambda_powertools/utilities/parser/functions.py,sha256=OOcp9xFPrS4e1U8-zHP8bcJ4iTUNmEVYf1EN2yqaCiY,2497
|
209
|
-
aws_lambda_powertools/utilities/parser/models/__init__.py,sha256=
|
209
|
+
aws_lambda_powertools/utilities/parser/models/__init__.py,sha256=WgO-VvHed50FDQzU4HZjYAjiiuW9yLjeLrf-PYx-7Lo,6357
|
210
210
|
aws_lambda_powertools/utilities/parser/models/alb.py,sha256=lJPWPjz0_4Hz9Pkpap3NRvScSI3RWC7o4dFYt4F7LLM,439
|
211
211
|
aws_lambda_powertools/utilities/parser/models/apigw.py,sha256=_UbZXcfdcz7U-MrixXor4sc-VkNIuJAj9uwqjJTlhKg,3494
|
212
212
|
aws_lambda_powertools/utilities/parser/models/apigw_websocket.py,sha256=Pi3R9qFudSrujGz_s3m7BfpX_r7FebcYtbomDAetIrA,3004
|
213
213
|
aws_lambda_powertools/utilities/parser/models/apigwv2.py,sha256=x-v1vwVFwf2pGrkZfRri6ZmhHazeVPr1mHyD3R_vH30,2134
|
214
|
+
aws_lambda_powertools/utilities/parser/models/appsync.py,sha256=mFzfTZgQ98zxwPKQoNRTTx9tQknumJ0J4PaiGaNzHu8,1554
|
214
215
|
aws_lambda_powertools/utilities/parser/models/bedrock_agent.py,sha256=YFu2cFxBZtb2ndweS3Q2iz4E94jyb8lB4xq14xPwq00,1241
|
215
216
|
aws_lambda_powertools/utilities/parser/models/cloudformation_custom_resource.py,sha256=DySFMeZ50qOZ1FkwSzM70IlcCmjKkoynmmKqLYfTL6E,1465
|
216
217
|
aws_lambda_powertools/utilities/parser/models/cloudwatch.py,sha256=1y2WmgBbIo6GkEtw75YzNaz9qREHl_-ThT0Iz7Ntd_k,1291
|
@@ -257,7 +258,7 @@ aws_lambda_powertools/utilities/validation/envelopes.py,sha256=YD5HOFx6IClQgii0n
|
|
257
258
|
aws_lambda_powertools/utilities/validation/exceptions.py,sha256=PKy_19zQMBJGCMMFl-sMkcm-cc0v3zZBn_bhGE4wKNo,2084
|
258
259
|
aws_lambda_powertools/utilities/validation/validator.py,sha256=x_1qpuKJBuWpgNU-zCD3Di-vXrZfyUu7oA5RmjZjr84,10034
|
259
260
|
aws_lambda_powertools/warnings/__init__.py,sha256=vqDVeZz8wGtD8WGYNSkQE7AHwqtIrPGRxuoJR_BBnSs,1193
|
260
|
-
aws_lambda_powertools-3.9.
|
261
|
-
aws_lambda_powertools-3.9.
|
262
|
-
aws_lambda_powertools-3.9.
|
263
|
-
aws_lambda_powertools-3.9.
|
261
|
+
aws_lambda_powertools-3.9.1a9.dist-info/LICENSE,sha256=vMHS2eBgmwPUIMPb7LQ4p7ib_FPVQXarVjAasflrTwo,951
|
262
|
+
aws_lambda_powertools-3.9.1a9.dist-info/METADATA,sha256=GDxtPE_niHzpDeIGa21J0EEMf55zXoaHPIWdDyejWuw,11186
|
263
|
+
aws_lambda_powertools-3.9.1a9.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
264
|
+
aws_lambda_powertools-3.9.1a9.dist-info/RECORD,,
|
File without changes
|
File without changes
|