Skip to content

Commit 1a48f1b

Browse files
authored
Merge 895bf8a into 797a10a
2 parents 797a10a + 895bf8a commit 1a48f1b

File tree

4 files changed

+8
-206
lines changed

4 files changed

+8
-206
lines changed

Diff for: aws_lambda_powertools/utilities/parser/models/__init__.py

-8
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@
3737
SesModel,
3838
SesReceipt,
3939
SesReceiptAction,
40-
SesReceiptActionBase,
41-
SesReceiptBounceAction,
42-
SesReceiptS3Action,
4340
SesReceiptVerdict,
44-
SesReceiptWorkmailAction,
4541
SesRecordModel,
4642
)
4743
from .sns import SnsModel, SnsNotificationModel, SnsRecordModel
@@ -88,10 +84,6 @@
8884
"SesMailHeaders",
8985
"SesReceipt",
9086
"SesReceiptAction",
91-
"SesReceiptActionBase",
92-
"SesReceiptBounceAction",
93-
"SesReceiptWorkmailAction",
94-
"SesReceiptS3Action",
9587
"SesReceiptVerdict",
9688
"SnsModel",
9789
"SnsNotificationModel",

Diff for: aws_lambda_powertools/utilities/parser/models/ses.py

+3-31
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import datetime
2-
from typing import List, Optional, Union
2+
from typing import List, Optional
33

44
from pydantic import BaseModel, Field
55
from pydantic.networks import EmailStr
@@ -12,49 +12,21 @@ class SesReceiptVerdict(BaseModel):
1212
status: Literal["PASS", "FAIL", "GRAY", "PROCESSING_FAILED"]
1313

1414

15-
class SesReceiptActionBase(BaseModel):
16-
topicArn: Optional[str]
17-
18-
19-
class SesReceiptAction(SesReceiptActionBase):
15+
class SesReceiptAction(BaseModel):
2016
type: Literal["Lambda"] # noqa A003,VNE003
2117
invocationType: Literal["Event"]
2218
functionArn: str
2319

2420

25-
class SesReceiptS3Action(SesReceiptActionBase):
26-
type: Literal["S3"] # noqa A003,VNE003
27-
topicArn: str
28-
bucketName: str
29-
objectKey: str
30-
31-
32-
class SesReceiptBounceAction(SesReceiptActionBase):
33-
type: Literal["Bounce"] # noqa A003,VNE003
34-
topicArn: str
35-
smtpReplyCode: str
36-
message: str
37-
sender: str
38-
statusCode: str
39-
40-
41-
class SesReceiptWorkmailAction(SesReceiptActionBase):
42-
type: Literal["WorkMail"] # noqa A003,VNE003
43-
topicArn: str
44-
organizationArn: str
45-
46-
4721
class SesReceipt(BaseModel):
4822
timestamp: datetime
4923
processingTimeMillis: PositiveInt
5024
recipients: List[EmailStr]
5125
spamVerdict: SesReceiptVerdict
5226
virusVerdict: SesReceiptVerdict
5327
spfVerdict: SesReceiptVerdict
54-
dkimVerdict: SesReceiptVerdict
5528
dmarcVerdict: SesReceiptVerdict
56-
dmarcPolicy: Optional[Literal["quarantine", "reject", "none"]]
57-
action: Union[SesReceiptAction, SesReceiptS3Action, SesReceiptBounceAction, SesReceiptWorkmailAction]
29+
action: SesReceiptAction
5830

5931

6032
class SesMailHeaders(BaseModel):

Diff for: tests/events/sesEventS3.json

-114
This file was deleted.

Diff for: tests/functional/parser/test_ses.py

+5-53
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
from aws_lambda_powertools.utilities.parser import event_parser
2-
from aws_lambda_powertools.utilities.parser.models import (
3-
SesModel,
4-
SesReceiptBounceAction,
5-
SesReceiptWorkmailAction,
6-
SesRecordModel,
7-
)
2+
from aws_lambda_powertools.utilities.parser.models import SesModel, SesRecordModel
83
from aws_lambda_powertools.utilities.typing import LambdaContext
94
from tests.functional.utils import load_event
105

116

127
@event_parser(model=SesModel)
13-
def handle_ses(event: SesModel, _: LambdaContext) -> SesModel:
14-
return event
15-
16-
17-
def test_ses_trigger_lambda_event():
18-
event_dict = load_event("sesEvent.json")
19-
event = handle_ses(event_dict, LambdaContext())
8+
def handle_ses(event: SesModel, _: LambdaContext):
209
expected_address = "[email protected]"
2110
records = event.Records
2211
record: SesRecordModel = records[0]
@@ -40,10 +29,6 @@ def test_ses_trigger_lambda_event():
4029
assert common_headers.to == [expected_address]
4130
assert common_headers.messageId == "<0123456789example.com>"
4231
assert common_headers.subject == "Test Subject"
43-
assert common_headers.cc is None
44-
assert common_headers.bcc is None
45-
assert common_headers.sender is None
46-
assert common_headers.reply_to is None
4732
receipt = record.ses.receipt
4833
convert_time = int(round(receipt.timestamp.timestamp() * 1000))
4934
assert convert_time == 0
@@ -53,45 +38,12 @@ def test_ses_trigger_lambda_event():
5338
assert receipt.virusVerdict.status == "PASS"
5439
assert receipt.spfVerdict.status == "PASS"
5540
assert receipt.dmarcVerdict.status == "PASS"
56-
assert receipt.dmarcVerdict.status == "PASS"
57-
assert receipt.dmarcPolicy is None
5841
action = receipt.action
5942
assert action.type == "Lambda"
6043
assert action.functionArn == "arn:aws:lambda:us-west-2:012345678912:function:Example"
6144
assert action.invocationType == "Event"
62-
assert action.topicArn is None
63-
6445

65-
def test_ses_trigger_event_s3():
66-
event_dict = load_event("sesEventS3.json")
67-
event = handle_ses(event_dict, LambdaContext())
68-
records = list(event.Records)
69-
record = records[0]
70-
receipt = record.ses.receipt
71-
assert receipt.dmarcPolicy == "reject"
72-
action = record.ses.receipt.action
73-
assert action.type == "S3"
74-
assert action.topicArn == "arn:aws:sns:us-east-1:012345678912:example-topic"
75-
assert action.bucketName == "my-S3-bucket"
76-
assert action.objectKey == "email"
77-
78-
79-
def test_ses_trigger_event_bounce():
80-
event_dict = {
81-
"type": "Bounce",
82-
"topicArn": "arn:aws:sns:us-east-1:123456789012:topic:my-topic",
83-
"smtpReplyCode": "5.1.1",
84-
"message": "message",
85-
"sender": "sender",
86-
"statusCode": "550",
87-
}
88-
SesReceiptBounceAction(**event_dict)
8946

90-
91-
def test_ses_trigger_event_work_mail():
92-
event_dict = {
93-
"type": "WorkMail",
94-
"topicArn": "arn:aws:sns:us-east-1:123456789012:topic:my-topic",
95-
"organizationArn": "arn",
96-
}
97-
SesReceiptWorkmailAction(**event_dict)
47+
def test_ses_trigger_event():
48+
event_dict = load_event("sesEvent.json")
49+
handle_ses(event_dict, LambdaContext())

0 commit comments

Comments
 (0)