Skip to content

Commit 0196883

Browse files
author
Michal Ploski
committed
Use BaseModel directly instead of TypeVar to avoid python3.6 limitations
1 parent 8bcb3fd commit 0196883

File tree

12 files changed

+44
-49
lines changed

12 files changed

+44
-49
lines changed

aws_lambda_powertools/utilities/parser/envelopes/kinesis.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Any, Dict, List, Optional, Type, Union
2+
from typing import Any, Dict, List, Optional, Type, Union, cast
33

44
from ..models import KinesisDataStreamModel
55
from ..types import Model
@@ -38,5 +38,6 @@ def parse(self, data: Optional[Union[Dict[str, Any], Any]], model: Type[Model])
3838
parsed_envelope: KinesisDataStreamModel = KinesisDataStreamModel.parse_obj(data)
3939
logger.debug(f"Parsing Kinesis records in `body` with {model}")
4040
return [
41-
self._parse(data=record.kinesis.data.decode("utf-8"), model=model) for record in parsed_envelope.Records
41+
self._parse(data=cast(bytes, record.kinesis.data).decode("utf-8"), model=model)
42+
for record in parsed_envelope.Records
4243
]

aws_lambda_powertools/utilities/parser/envelopes/sns.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Any, Dict, List, Optional, Type, Union
2+
from typing import Any, Dict, List, Optional, Type, Union, cast
33

44
from ..models import SnsModel, SnsNotificationModel, SqsModel
55
from ..types import Model
@@ -69,6 +69,6 @@ def parse(self, data: Optional[Union[Dict[str, Any], Any]], model: Type[Model])
6969
parsed_envelope = SqsModel.parse_obj(data)
7070
output = []
7171
for record in parsed_envelope.Records:
72-
sns_notification: SnsNotificationModel = SnsNotificationModel.parse_raw(record.body)
72+
sns_notification: SnsNotificationModel = SnsNotificationModel.parse_raw(cast(str, record.body))
7373
output.append(self._parse(data=sns_notification.Message, model=model))
7474
return output

aws_lambda_powertools/utilities/parser/models/alb.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
from typing import Dict, Generic, Union
1+
from typing import Dict, Type, Union
22

33
from pydantic import BaseModel
44

5-
from aws_lambda_powertools.utilities.parser.types import Model
6-
75

86
class AlbRequestContextData(BaseModel):
97
targetGroupArn: str
@@ -13,10 +11,10 @@ class AlbRequestContext(BaseModel):
1311
elb: AlbRequestContextData
1412

1513

16-
class AlbModel(BaseModel, Generic[Model]):
14+
class AlbModel(BaseModel):
1715
httpMethod: str
1816
path: str
19-
body: Union[str, Model]
17+
body: Union[str, Type[BaseModel]]
2018
isBase64Encoded: bool
2119
headers: Dict[str, str]
2220
queryStringParameters: Dict[str, str]

aws_lambda_powertools/utilities/parser/models/apigw.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from datetime import datetime
2-
from typing import Any, Dict, Generic, List, Optional, Union
2+
from typing import Any, Dict, List, Optional, Type, Union
33

44
from pydantic import BaseModel, root_validator
55
from pydantic.networks import IPvAnyNetwork
66

7-
from aws_lambda_powertools.utilities.parser.types import Literal, Model
7+
from aws_lambda_powertools.utilities.parser.types import Literal
88

99

1010
class ApiGatewayUserCertValidity(BaseModel):
@@ -76,7 +76,7 @@ def check_message_id(cls, values):
7676
return values
7777

7878

79-
class APIGatewayProxyEventModel(BaseModel, Generic[Model]):
79+
class APIGatewayProxyEventModel(BaseModel):
8080
version: Optional[str]
8181
resource: str
8282
path: str
@@ -89,4 +89,4 @@ class APIGatewayProxyEventModel(BaseModel, Generic[Model]):
8989
pathParameters: Optional[Dict[str, str]]
9090
stageVariables: Optional[Dict[str, str]]
9191
isBase64Encoded: bool
92-
body: Optional[Union[str, Model]]
92+
body: Optional[Union[str, Type[BaseModel]]]

aws_lambda_powertools/utilities/parser/models/apigwv2.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from datetime import datetime
2-
from typing import Any, Dict, Generic, List, Optional, Union
2+
from typing import Any, Dict, List, Optional, Type, Union
33

44
from pydantic import BaseModel, Field
55
from pydantic.networks import IPvAnyNetwork
66

7-
from aws_lambda_powertools.utilities.parser.types import Literal, Model
7+
from aws_lambda_powertools.utilities.parser.types import Literal
88

99

1010
class RequestContextV2AuthorizerIamCognito(BaseModel):
@@ -56,7 +56,7 @@ class RequestContextV2(BaseModel):
5656
http: RequestContextV2Http
5757

5858

59-
class APIGatewayProxyEventV2Model(BaseModel, Generic[Model]):
59+
class APIGatewayProxyEventV2Model(BaseModel):
6060
version: str
6161
routeKey: str
6262
rawPath: str
@@ -67,5 +67,5 @@ class APIGatewayProxyEventV2Model(BaseModel, Generic[Model]):
6767
pathParameters: Optional[Dict[str, str]]
6868
stageVariables: Optional[Dict[str, str]]
6969
requestContext: RequestContextV2
70-
body: Optional[Union[str, Model]]
70+
body: Optional[Union[str, Type[BaseModel]]]
7171
isBase64Encoded: bool

aws_lambda_powertools/utilities/parser/models/cloudwatch.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@
33
import logging
44
import zlib
55
from datetime import datetime
6-
from typing import Generic, List, Union
6+
from typing import List, Type, Union
77

88
from pydantic import BaseModel, Field, validator
99

10-
from aws_lambda_powertools.utilities.parser.types import Model
11-
1210
logger = logging.getLogger(__name__)
1311

1412

15-
class CloudWatchLogsLogEvent(BaseModel, Generic[Model]):
13+
class CloudWatchLogsLogEvent(BaseModel):
1614
id: str # noqa AA03 VNE003
1715
timestamp: datetime
18-
message: Union[str, Model]
16+
message: Union[str, Type[BaseModel]]
1917

2018

2119
class CloudWatchLogsDecode(BaseModel):

aws_lambda_powertools/utilities/parser/models/dynamodb.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
from datetime import date
2-
from typing import Any, Dict, Generic, List, Optional, Union
2+
from typing import Any, Dict, List, Optional, Type, Union
33

44
from pydantic import BaseModel
55

6-
from aws_lambda_powertools.utilities.parser.types import Literal, Model
6+
from aws_lambda_powertools.utilities.parser.types import Literal
77

88

9-
class DynamoDBStreamChangedRecordModel(BaseModel, Generic[Model]):
9+
class DynamoDBStreamChangedRecordModel(BaseModel):
1010
ApproximateCreationDateTime: Optional[date]
1111
Keys: Dict[str, Dict[str, Any]]
12-
NewImage: Optional[Union[Dict[str, Any], Model]]
13-
OldImage: Optional[Union[Dict[str, Any], Model]]
12+
NewImage: Optional[Union[Dict[str, Any], Type[BaseModel]]]
13+
OldImage: Optional[Union[Dict[str, Any], Type[BaseModel]]]
1414
SequenceNumber: str
1515
SizeBytes: int
1616
StreamViewType: Literal["NEW_AND_OLD_IMAGES", "KEYS_ONLY", "NEW_IMAGE", "OLD_IMAGE"]
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
from datetime import datetime
2-
from typing import Any, Dict, Generic, List, Optional, Union
2+
from typing import Any, Dict, List, Optional, Type, Union
33

44
from pydantic import BaseModel, Field
55

6-
from aws_lambda_powertools.utilities.parser.types import Model
76

8-
9-
class EventBridgeModel(BaseModel, Generic[Model]):
7+
class EventBridgeModel(BaseModel):
108
version: str
119
id: str # noqa: A003,VNE003
1210
source: str
@@ -15,5 +13,5 @@ class EventBridgeModel(BaseModel, Generic[Model]):
1513
region: str
1614
resources: List[str]
1715
detail_type: str = Field(None, alias="detail-type")
18-
detail: Union[Dict[str, Any], Model]
16+
detail: Union[Dict[str, Any], Type[BaseModel]]
1917
replay_name: Optional[str] = Field(None, alias="replay-name")

aws_lambda_powertools/utilities/parser/models/kinesis.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import base64
22
import logging
33
from binascii import Error as BinAsciiError
4-
from typing import Generic, List, Union
4+
from typing import List, Type, Union
55

66
from pydantic import BaseModel, validator
77

8-
from aws_lambda_powertools.utilities.parser.types import Literal, Model
8+
from aws_lambda_powertools.utilities.parser.types import Literal
99

1010
logger = logging.getLogger(__name__)
1111

1212

13-
class KinesisDataStreamRecordPayload(BaseModel, Generic[Model]):
13+
class KinesisDataStreamRecordPayload(BaseModel):
1414
kinesisSchemaVersion: str
1515
partitionKey: str
1616
sequenceNumber: str
17-
data: Union[bytes, Model] # base64 encoded str is parsed into bytes
17+
data: Union[bytes, Type[BaseModel]] # base64 encoded str is parsed into bytes
1818
approximateArrivalTimestamp: float
1919

2020
@validator("data", pre=True, allow_reuse=True)

aws_lambda_powertools/utilities/parser/models/s3_object_event.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
1-
from typing import Dict, Generic, Optional, Union
1+
from typing import Dict, Optional, Type, Union
22

33
from pydantic import BaseModel, HttpUrl
44

5-
from aws_lambda_powertools.utilities.parser.types import Model
6-
75

86
class S3ObjectContext(BaseModel):
97
inputS3Url: HttpUrl
108
outputRoute: str
119
outputToken: str
1210

1311

14-
class S3ObjectConfiguration(BaseModel, Generic[Model]):
12+
class S3ObjectConfiguration(BaseModel):
1513
accessPointArn: str
1614
supportingAccessPointArn: str
17-
payload: Union[str, Model]
15+
payload: Union[str, Type[BaseModel]]
1816

1917

2018
class S3ObjectUserRequest(BaseModel):

aws_lambda_powertools/utilities/parser/models/sns.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
from datetime import datetime
2-
from typing import Dict, Generic, List, Optional, Union
2+
from typing import Dict, List, Optional
3+
from typing import Type as TypingType
4+
from typing import Union
35

46
from pydantic import BaseModel, root_validator
57
from pydantic.networks import HttpUrl
68

7-
from aws_lambda_powertools.utilities.parser.types import Literal, Model
9+
from aws_lambda_powertools.utilities.parser.types import Literal
810

911

1012
class SnsMsgAttributeModel(BaseModel):
1113
Type: str
1214
Value: str
1315

1416

15-
class SnsNotificationModel(BaseModel, Generic[Model]):
17+
class SnsNotificationModel(BaseModel):
1618
Subject: Optional[str]
1719
TopicArn: str
1820
UnsubscribeUrl: HttpUrl
1921
Type: Literal["Notification"]
2022
MessageAttributes: Optional[Dict[str, SnsMsgAttributeModel]]
21-
Message: Union[str, Model]
23+
Message: Union[str, TypingType[BaseModel]]
2224
MessageId: str
2325
SigningCertUrl: HttpUrl
2426
Signature: str

aws_lambda_powertools/utilities/parser/models/sqs.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from datetime import datetime
2-
from typing import Dict, Generic, List, Optional, Union
2+
from typing import Dict, List, Optional, Type, Union
33

44
from pydantic import BaseModel
55

6-
from aws_lambda_powertools.utilities.parser.types import Literal, Model
6+
from aws_lambda_powertools.utilities.parser.types import Literal
77

88

99
class SqsAttributesModel(BaseModel):
@@ -49,10 +49,10 @@ class SqsMsgAttributeModel(BaseModel):
4949
# return values # noqa: E800
5050

5151

52-
class SqsRecordModel(BaseModel, Generic[Model]):
52+
class SqsRecordModel(BaseModel):
5353
messageId: str
5454
receiptHandle: str
55-
body: Union[str, Model]
55+
body: Union[str, Type[BaseModel]]
5656
attributes: SqsAttributesModel
5757
messageAttributes: Dict[str, SqsMsgAttributeModel]
5858
md5OfBody: str

0 commit comments

Comments
 (0)