Skip to content

Commit 7480985

Browse files
committed
improv: rename schema to model as per Tom's review
1 parent 404530f commit 7480985

File tree

18 files changed

+154
-154
lines changed

18 files changed

+154
-154
lines changed

aws_lambda_powertools/utilities/parser/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""
33
from . import envelopes
44
from .envelopes import BaseEnvelope
5-
from .exceptions import SchemaValidationError
5+
from .exceptions import ModelValidationError
66
from .parser import event_parser
77
from .pydantic import BaseModel, root_validator, validator
88

@@ -13,5 +13,5 @@
1313
"BaseModel",
1414
"validator",
1515
"root_validator",
16-
"SchemaValidationError",
16+
"ModelValidationError",
1717
]

aws_lambda_powertools/utilities/parser/envelopes/base.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ class BaseEnvelope(ABC):
1111
"""ABC implementation for creating a supported Envelope"""
1212

1313
@staticmethod
14-
def _parse(data: Union[Dict[str, Any], str], schema: BaseModel) -> Any:
15-
"""Parses envelope data against schema provided
14+
def _parse(data: Union[Dict[str, Any], str], model: BaseModel) -> Any:
15+
"""Parses envelope data against model provided
1616
1717
Parameters
1818
----------
1919
data : Dict
2020
Data to be parsed and validated
21-
schema
22-
Schema to parse and validate data against
21+
model
22+
Data model to parse and validate data against
2323
2424
Returns
2525
-------
@@ -30,29 +30,29 @@ def _parse(data: Union[Dict[str, Any], str], schema: BaseModel) -> Any:
3030
logger.debug("Skipping parsing as event is None")
3131
return data
3232

33-
logger.debug("parsing event against schema")
33+
logger.debug("parsing event against model")
3434
if isinstance(data, str):
3535
logger.debug("parsing event as string")
36-
return schema.parse_raw(data)
36+
return model.parse_raw(data)
3737

38-
return schema.parse_obj(data)
38+
return model.parse_obj(data)
3939

4040
@abstractmethod
41-
def parse(self, data: Dict[str, Any], schema: BaseModel):
42-
"""Implementation to parse data against envelope schema, then against the schema
41+
def parse(self, data: Dict[str, Any], model: BaseModel):
42+
"""Implementation to parse data against envelope model, then against the data model
4343
44-
NOTE: Call `_parse` method to fully parse data with schema provided.
44+
NOTE: Call `_parse` method to fully parse data with model provided.
4545
4646
Example
4747
-------
4848
4949
**EventBridge envelope implementation example**
5050
5151
def parse(...):
52-
# 1. parses data against envelope schema
53-
parsed_envelope = EventBridgeSchema(**data)
52+
# 1. parses data against envelope model
53+
parsed_envelope = EventBridgeModel(**data)
5454
55-
# 2. parses portion of data within the envelope against schema
56-
return self._parse(data=parsed_envelope.detail, schema=schema)
55+
# 2. parses portion of data within the envelope against model
56+
return self._parse(data=parsed_envelope.detail, model=data_model)
5757
"""
5858
return NotImplemented # pragma: no cover

aws_lambda_powertools/utilities/parser/envelopes/dynamodb.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from pydantic import BaseModel
55
from typing_extensions import Literal
66

7-
from ..schemas import DynamoDBStreamSchema
7+
from ..models import DynamoDBStreamModel
88
from .base import BaseEnvelope
99

1010
logger = logging.getLogger(__name__)
@@ -13,32 +13,32 @@
1313
class DynamoDBEnvelope(BaseEnvelope):
1414
""" DynamoDB Stream Envelope to extract data within NewImage/OldImage
1515
16-
Note: Values are the parsed schema models. Images' values can also be None, and
16+
Note: Values are the parsed models. Images' values can also be None, and
1717
length of the list is the record's amount in the original event.
1818
"""
1919

20-
def parse(self, data: Dict[str, Any], schema: BaseModel) -> List[Dict[Literal["NewImage", "OldImage"], BaseModel]]:
21-
"""Parses DynamoDB Stream records found in either NewImage and OldImage with schema provided
20+
def parse(self, data: Dict[str, Any], model: BaseModel) -> List[Dict[Literal["NewImage", "OldImage"], BaseModel]]:
21+
"""Parses DynamoDB Stream records found in either NewImage and OldImage with model provided
2222
2323
Parameters
2424
----------
2525
data : Dict
2626
Lambda event to be parsed
27-
schema : BaseModel
28-
User schema provided to parse after extracting data using envelope
27+
model : BaseModel
28+
Data model provided to parse after extracting data using envelope
2929
3030
Returns
3131
-------
3232
List
33-
List of records parsed with schema provided
33+
List of records parsed with model provided
3434
"""
35-
parsed_envelope = DynamoDBStreamSchema(**data)
35+
parsed_envelope = DynamoDBStreamModel(**data)
3636
output = []
3737
for record in parsed_envelope.Records:
3838
output.append(
3939
{
40-
"NewImage": self._parse(record.dynamodb.NewImage, schema),
41-
"OldImage": self._parse(record.dynamodb.OldImage, schema),
40+
"NewImage": self._parse(record.dynamodb.NewImage, model),
41+
"OldImage": self._parse(record.dynamodb.OldImage, model),
4242
}
4343
)
4444
# noinspection PyTypeChecker

aws_lambda_powertools/utilities/parser/envelopes/event_bridge.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from pydantic import BaseModel
55

6-
from ..schemas import EventBridgeSchema
6+
from ..models import EventBridgeModel
77
from .base import BaseEnvelope
88

99
logger = logging.getLogger(__name__)
@@ -12,20 +12,20 @@
1212
class EventBridgeEnvelope(BaseEnvelope):
1313
"""EventBridge envelope to extract data within detail key"""
1414

15-
def parse(self, data: Dict[str, Any], schema: BaseModel) -> BaseModel:
16-
"""Parses data found with schema provided
15+
def parse(self, data: Dict[str, Any], model: BaseModel) -> BaseModel:
16+
"""Parses data found with model provided
1717
1818
Parameters
1919
----------
2020
data : Dict
2121
Lambda event to be parsed
22-
schema : BaseModel
23-
User schema provided to parse after extracting data using envelope
22+
model : BaseModel
23+
Data model provided to parse after extracting data using envelope
2424
2525
Returns
2626
-------
2727
Any
28-
Parsed detail payload with schema provided
28+
Parsed detail payload with model provided
2929
"""
30-
parsed_envelope = EventBridgeSchema(**data)
31-
return self._parse(data=parsed_envelope.detail, schema=schema)
30+
parsed_envelope = EventBridgeModel(**data)
31+
return self._parse(data=parsed_envelope.detail, model=model)

aws_lambda_powertools/utilities/parser/envelopes/sqs.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from pydantic import BaseModel
55

6-
from ..schemas import SqsSchema
6+
from ..models import SqsModel
77
from .base import BaseEnvelope
88

99
logger = logging.getLogger(__name__)
@@ -13,29 +13,29 @@ class SqsEnvelope(BaseEnvelope):
1313
"""SQS Envelope to extract array of Records
1414
1515
The record's body parameter is a string, though it can also be a JSON encoded string.
16-
Regardless of it's type it'll be parsed into a BaseModel object.
16+
Regardless of its type it'll be parsed into a BaseModel object.
1717
18-
Note: Records will be parsed the same way so if schema is str,
18+
Note: Records will be parsed the same way so if model is str,
1919
all items in the list will be parsed as str and npt as JSON (and vice versa)
2020
"""
2121

22-
def parse(self, data: Dict[str, Any], schema: Union[BaseModel, str]) -> List[Union[BaseModel, str]]:
23-
"""Parses records found with schema provided
22+
def parse(self, data: Dict[str, Any], model: Union[BaseModel, str]) -> List[Union[BaseModel, str]]:
23+
"""Parses records found with model provided
2424
2525
Parameters
2626
----------
2727
data : Dict
2828
Lambda event to be parsed
29-
schema : BaseModel
30-
User schema provided to parse after extracting data using envelope
29+
model : BaseModel
30+
Data model provided to parse after extracting data using envelope
3131
3232
Returns
3333
-------
3434
List
35-
List of records parsed with schema provided
35+
List of records parsed with model provided
3636
"""
37-
parsed_envelope = SqsSchema(**data)
37+
parsed_envelope = SqsModel(**data)
3838
output = []
3939
for record in parsed_envelope.Records:
40-
output.append(self._parse(record.body, schema))
40+
output.append(self._parse(record.body, model))
4141
return output

aws_lambda_powertools/utilities/parser/exceptions.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ class InvalidEnvelopeError(Exception):
22
"""Input envelope is not callable and instance of BaseEnvelope"""
33

44

5-
class SchemaValidationError(Exception):
6-
"""Input data does not conform with schema"""
5+
class ModelValidationError(Exception):
6+
"""Input data does not conform with model"""
77

88

9-
class InvalidSchemaTypeError(Exception):
10-
"""Input schema does not implement BaseModel"""
9+
class InvalidModelTypeError(Exception):
10+
"""Input data model does not implement BaseModel"""
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from .dynamodb import DynamoDBStreamChangedRecordModel, DynamoDBStreamModel, DynamoDBStreamRecordModel
2+
from .event_bridge import EventBridgeModel
3+
from .sqs import SqsModel, SqsRecordModel
4+
5+
__all__ = [
6+
"DynamoDBStreamModel",
7+
"EventBridgeModel",
8+
"DynamoDBStreamChangedRecordModel",
9+
"DynamoDBStreamRecordModel",
10+
"SqsModel",
11+
"SqsRecordModel",
12+
]

aws_lambda_powertools/utilities/parser/schemas/dynamodb.py renamed to aws_lambda_powertools/utilities/parser/models/dynamodb.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing_extensions import Literal
66

77

8-
class DynamoDBStreamChangedRecordSchema(BaseModel):
8+
class DynamoDBStreamChangedRecordModel(BaseModel):
99
ApproximateCreationDateTime: Optional[date]
1010
Keys: Dict[str, Dict[str, Any]]
1111
NewImage: Optional[Dict[str, Any]]
@@ -16,13 +16,13 @@ class DynamoDBStreamChangedRecordSchema(BaseModel):
1616

1717
# context on why it's commented: https://github.com/awslabs/aws-lambda-powertools-python/pull/118
1818
# since both images are optional, they can both be None. However, at least one must
19-
# exist in a legal schema of NEW_AND_OLD_IMAGES type
19+
# exist in a legal model of NEW_AND_OLD_IMAGES type
2020
# @root_validator
2121
# def check_one_image_exists(cls, values): # noqa: E800
2222
# new_img, old_img = values.get("NewImage"), values.get("OldImage") # noqa: E800
2323
# stream_type = values.get("StreamViewType") # noqa: E800
2424
# if stream_type == "NEW_AND_OLD_IMAGES" and not new_img and not old_img: # noqa: E800
25-
# raise TypeError("DynamoDB streams schema failed validation, missing both new & old stream images") # noqa: E800,E501
25+
# raise TypeError("DynamoDB streams model failed validation, missing both new & old stream images") # noqa: E800,E501
2626
# return values # noqa: E800
2727

2828

@@ -31,16 +31,16 @@ class UserIdentity(BaseModel):
3131
principalId: Literal["dynamodb.amazonaws.com"]
3232

3333

34-
class DynamoDBStreamRecordSchema(BaseModel):
34+
class DynamoDBStreamRecordModel(BaseModel):
3535
eventID: str
3636
eventName: Literal["INSERT", "MODIFY", "REMOVE"]
3737
eventVersion: float
3838
eventSource: Literal["aws:dynamodb"]
3939
awsRegion: str
4040
eventSourceARN: str
41-
dynamodb: DynamoDBStreamChangedRecordSchema
41+
dynamodb: DynamoDBStreamChangedRecordModel
4242
userIdentity: Optional[UserIdentity]
4343

4444

45-
class DynamoDBStreamSchema(BaseModel):
46-
Records: List[DynamoDBStreamRecordSchema]
45+
class DynamoDBStreamModel(BaseModel):
46+
Records: List[DynamoDBStreamRecordModel]

aws_lambda_powertools/utilities/parser/schemas/event_bridge.py renamed to aws_lambda_powertools/utilities/parser/models/event_bridge.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from pydantic import BaseModel, Field
55

66

7-
class EventBridgeSchema(BaseModel):
7+
class EventBridgeModel(BaseModel):
88
version: str
99
id: str # noqa: A003,VNE003
1010
source: str

aws_lambda_powertools/utilities/parser/schemas/sqs.py renamed to aws_lambda_powertools/utilities/parser/models/sqs.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing_extensions import Literal
66

77

8-
class SqsAttributesSchema(BaseModel):
8+
class SqsAttributesModel(BaseModel):
99
ApproximateReceiveCount: str
1010
ApproximateFirstReceiveTimestamp: datetime
1111
MessageDeduplicationId: Optional[str]
@@ -16,7 +16,7 @@ class SqsAttributesSchema(BaseModel):
1616
AWSTraceHeader: Optional[str]
1717

1818

19-
class SqsMsgAttributeSchema(BaseModel):
19+
class SqsMsgAttributeModel(BaseModel):
2020
stringValue: Optional[str]
2121
binaryValue: Optional[str]
2222
stringListValues: List[str] = []
@@ -48,18 +48,18 @@ class SqsMsgAttributeSchema(BaseModel):
4848
# return values # noqa: E800
4949

5050

51-
class SqsRecordSchema(BaseModel):
51+
class SqsRecordModel(BaseModel):
5252
messageId: str
5353
receiptHandle: str
5454
body: str
55-
attributes: SqsAttributesSchema
56-
messageAttributes: Dict[str, SqsMsgAttributeSchema]
55+
attributes: SqsAttributesModel
56+
messageAttributes: Dict[str, SqsMsgAttributeModel]
5757
md5OfBody: str
5858
md5OfMessageAttributes: Optional[str]
5959
eventSource: Literal["aws:sqs"]
6060
eventSourceARN: str
6161
awsRegion: str
6262

6363

64-
class SqsSchema(BaseModel):
65-
Records: List[SqsRecordSchema]
64+
class SqsModel(BaseModel):
65+
Records: List[SqsRecordModel]

0 commit comments

Comments
 (0)