Skip to content

Commit 411fbd1

Browse files
committed
add sns to batch processing
1 parent 06965bb commit 411fbd1

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

aws_lambda_powertools/utilities/batch/base.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
from aws_lambda_powertools.utilities.data_classes.dynamo_db_stream_event import DynamoDBRecord
1616
from aws_lambda_powertools.utilities.data_classes.kinesis_stream_event import KinesisStreamRecord
1717
from aws_lambda_powertools.utilities.data_classes.sqs_event import SQSRecord
18+
from aws_lambda_powertools.utilities.data_classes.sns_event import SNSEventRecord
1819

1920
logger = logging.getLogger(__name__)
2021

2122

2223
class EventType(Enum):
2324
SQS = "SQS"
25+
SNS = "SNS"
2426
KinesisDataStreams = "KinesisDataStreams"
2527
DynamoDBStreams = "DynamoDBStreams"
2628

@@ -330,11 +332,13 @@ def __init__(self, event_type: EventType, model: Optional["BatchTypeModels"] = N
330332
self.batch_response = copy.deepcopy(self.DEFAULT_RESPONSE)
331333
self._COLLECTOR_MAPPING = {
332334
EventType.SQS: self._collect_sqs_failures,
335+
EventType.SNS: self._collect_sns_failures,
333336
EventType.KinesisDataStreams: self._collect_kinesis_failures,
334337
EventType.DynamoDBStreams: self._collect_dynamodb_failures,
335338
}
336339
self._DATA_CLASS_MAPPING = {
337340
EventType.SQS: SQSRecord,
341+
EventType.SNS: SNSEventRecord,
338342
EventType.KinesisDataStreams: KinesisStreamRecord,
339343
EventType.DynamoDBStreams: DynamoDBRecord,
340344
}
@@ -413,6 +417,13 @@ def _collect_sqs_failures(self):
413417
failures.append({"itemIdentifier": msg_id})
414418
return failures
415419

420+
def _collect_sns_failures(self):
421+
failures = []
422+
for msg in self.fail_messages:
423+
msg_id = msg.sns.MessageId if self.model else msg.sns.message_id
424+
failures.append({"itemIdentifier": msg_id})
425+
return failures
426+
416427
def _collect_kinesis_failures(self):
417428
failures = []
418429
for msg in self.fail_messages:

tests/functional/test_utilities_batch.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,34 @@ def factory(body: str):
5050
return factory
5151

5252

53+
@pytest.fixture(scope="module")
54+
def sns_event_factory() -> Callable:
55+
def factory(body: str):
56+
return {
57+
"EventVersion": "1.0",
58+
"EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:sns-la ...",
59+
"EventSource": "aws:sns",
60+
"Sns": {
61+
"SignatureVersion": "1",
62+
"Timestamp": "2019-01-02T12:45:07.000Z",
63+
"Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==",
64+
"SigningCertUrl": "https://sns.us-east-2.amazonaws.com/SimpleNotification",
65+
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
66+
"Message": "Hello from SNS!",
67+
"MessageAttributes": {
68+
"Test": {"Type": "String", "Value": "TestString"},
69+
"TestBinary": {"Type": "Binary", "Value": "TestBinary"},
70+
},
71+
"Type": "Notification",
72+
"UnsubscribeUrl": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe",
73+
"TopicArn": "arn:aws:sns:us-east-2:123456789012:sns-lambda",
74+
"Subject": "TestInvoke",
75+
},
76+
}
77+
78+
return factory
79+
80+
5381
@pytest.fixture(scope="module")
5482
def kinesis_event_factory() -> Callable:
5583
def factory(body: str):

0 commit comments

Comments
 (0)