Skip to content

Commit afeb993

Browse files
author
Ran Isenberg
committed
feat: Add Ses lambda event support to Parser utility #213
1 parent 66edf65 commit afeb993

File tree

5 files changed

+289
-111
lines changed

5 files changed

+289
-111
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .dynamodb import DynamoDBStreamChangedRecordModel, DynamoDBStreamModel, DynamoDBStreamRecordModel
22
from .event_bridge import EventBridgeModel
3+
from .ses import SesModel, SesRecordModel
34
from .sns import SnsModel, SnsNotificationModel, SnsRecordModel
45
from .sqs import SqsModel, SqsRecordModel
56

@@ -8,6 +9,8 @@
89
"EventBridgeModel",
910
"DynamoDBStreamChangedRecordModel",
1011
"DynamoDBStreamRecordModel",
12+
"SesModel",
13+
"SesRecordModel",
1114
"SnsModel",
1215
"SnsNotificationModel",
1316
"SnsRecordModel",

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

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from datetime import datetime
2+
from typing import List, Optional
3+
4+
from pydantic import BaseModel, Field
5+
from pydantic.networks import EmailStr
6+
from pydantic.types import PositiveInt
7+
from typing_extensions import Literal
8+
9+
10+
class SesReceiptVerdict(BaseModel):
11+
status: Literal["PASS", "FAIL", "GRAY", "PROCESSING_FAILED"]
12+
13+
14+
class SesReceiptAction(BaseModel):
15+
type: Literal["Lambda"] # noqa A003,VNE003
16+
invocationType: Literal["Event"]
17+
functionArn: str
18+
19+
20+
class SesReceipt(BaseModel):
21+
timestamp: datetime
22+
processingTimeMillis: PositiveInt
23+
recipients: List[EmailStr]
24+
spamVerdict: SesReceiptVerdict
25+
virusVerdict: SesReceiptVerdict
26+
spfVerdict: SesReceiptVerdict
27+
dmarcVerdict: SesReceiptVerdict
28+
action: SesReceiptAction
29+
30+
31+
class SesMailHeaders(BaseModel):
32+
name: str
33+
value: str
34+
35+
36+
class SesMailCommonHeaders(BaseModel):
37+
header_from: List[str] = Field(None, alias="from")
38+
to: List[str]
39+
cc: Optional[List[str]]
40+
bcc: Optional[List[str]]
41+
sender: Optional[List[str]]
42+
reply_to: Optional[List[str]] = Field(None, alias="reply-to")
43+
returnPath: EmailStr
44+
messageId: str
45+
date: str
46+
subject: str
47+
48+
49+
class SesMail(BaseModel):
50+
timestamp: datetime
51+
source: EmailStr
52+
messageId: str
53+
destination: List[EmailStr]
54+
headersTruncated: bool
55+
headers: List[SesMailHeaders]
56+
commonHeaders: SesMailCommonHeaders
57+
58+
59+
class SesMessage(BaseModel):
60+
mail: SesMail
61+
receipt: SesReceipt
62+
63+
64+
class SesRecordModel(BaseModel):
65+
eventSource: Literal["aws:ses"]
66+
eventVersion: str
67+
ses: SesMessage
68+
69+
70+
class SesModel(BaseModel):
71+
Records: List[SesRecordModel]

0 commit comments

Comments
 (0)