@@ -59,7 +59,7 @@ def read_args() -> argparse.Namespace:
5959
6060def create_event (bucket : str , key : str , key_prefix : str , key_file : str ) -> dict :
6161 """
62- Create an S3 event notification for testing.
62+ Create an SQS event wrapping S3 event notification(s) for testing.
6363
6464 This function accepts either an S3 object key or an S3 key prefix that will
6565 be included in the test event. If an S3 object key is provided, then the test
@@ -76,7 +76,7 @@ def create_event(bucket: str, key: str, key_prefix: str, key_file: str) -> dict:
7676 include in the test event. Takes precedence over `key` and `key_prefix`.
7777
7878 Returns:
79- dict: An S3 event notification
79+ dict: An SQS event wrapping S3 event notifications
8080 """
8181 if key_file is not None :
8282 with open (key_file , "r" ) as key_file_obj :
@@ -94,10 +94,14 @@ def create_event(bucket: str, key: str, key_prefix: str, key_file: str) -> dict:
9494 ]
9595 else :
9696 test_data = [key ]
97- s3_event = {
98- "Records" : [create_s3_event_record (bucket = bucket , key = k ) for k in test_data ]
99- }
100- return s3_event
97+ s3_events = [
98+ create_s3_event_record (bucket = bucket , key = k ) for k in test_data
99+ ]
100+ sqs_messages = [
101+ create_sqs_message (s3_event ) for s3_event in s3_events
102+ ]
103+ sqs_event = {"Records" : sqs_messages }
104+ return sqs_event
101105
102106def create_s3_event_record (bucket : str , key : str ) -> dict :
103107 """
@@ -149,10 +153,43 @@ def create_s3_event_record(bucket: str, key: str) -> dict:
149153 s3_event_record ["s3" ]["object" ]["key" ] = key
150154 return s3_event_record
151155
156+ def create_sqs_message (s3_event_record : dict ) -> dict :
157+ """
158+ Create an SQS message wrapper for an individual S3 event notification.
159+
160+ See `create_s3_event_record` for creating S3 event notifications.
161+
162+ Args:
163+ s3_event_record (dict): A dictionary formatted as a "Record"
164+ object would be in an S3 event notification
165+
166+ Returns:
167+ dict: A dictionary formatted as an SQS message
168+ """
169+ sqs_event_record = {
170+ "messageId" : "bf7be842" ,
171+ "receiptHandle" : "AQEBLdQhbUa" ,
172+ "body" : None ,
173+ "attributes" : {
174+ "ApproximateReceiveCount" : "1" ,
175+ "SentTimestamp" : "1694541052297" ,
176+ "SenderId" : "AIDAJHIPRHEMV73VRJEBU" ,
177+ "ApproximateFirstReceiveTimestamp" : "1694541052299"
178+ },
179+ "messageAttributes" : {},
180+ "md5OfMessageAttributes" : None ,
181+ "md5OfBody" : "abdc58591d121b6a0334fb44fd45aceb" ,
182+ "eventSource" : "aws:sqs" ,
183+ "eventSourceARN" : "arn:aws:sqs:us-east-1:914833433684:mynamespace-sqs-S3ToLambda-Queue" ,
184+ "awsRegion" : "us-east-1"
185+ }
186+ sqs_event_record ["body" ] = json .dumps ({"Records" : [s3_event_record ]})
187+ return sqs_event_record
188+
152189def main () -> None :
153190 args = read_args ()
154191 print ("Generating mock S3 event..." )
155- s3_event = create_event (
192+ sqs_event = create_event (
156193 bucket = args .input_bucket ,
157194 key = args .input_key ,
158195 key_prefix = args .input_key_prefix ,
@@ -161,11 +198,11 @@ def main() -> None:
161198
162199 if args .input_key_file is not None or args .input_key_prefix is not None :
163200 with open (os .path .join (args .output_directory , MULTI_RECORD_OUTFILE ), "w" ) as outfile :
164- json .dump (s3_event , outfile )
201+ json .dump (sqs_event , outfile )
165202 print (f"Event with multiple records written to { outfile .name } ." )
166203 else :
167204 with open (os .path .join (args .output_directory , SINGLE_RECORD_OUTFILE ), "w" ) as outfile :
168- json .dump (s3_event , outfile )
205+ json .dump (sqs_event , outfile )
169206 print (f"Event with single record written to { outfile .name } ." )
170207 print ("Done." )
171208
0 commit comments