74
74
]
75
75
76
76
77
+ class Event :
78
+ def __init__ (self , event ):
79
+ """
80
+ Cache propeties of the event in order improve performance.
81
+ """
82
+ self .raw_event = event
83
+ self .record_event_source = safe_get (event , ["Records" , 0 , "eventSource" ])
84
+
85
+
77
86
class EventParseHandler (ABC ):
78
87
@staticmethod
79
88
@abstractmethod
80
- def is_supported (event ) -> bool :
89
+ def is_supported (event : Event ) -> bool :
81
90
raise NotImplementedError ()
82
91
83
92
@staticmethod
@@ -92,8 +101,8 @@ def get_omit_skip_path() -> Optional[List[str]]:
92
101
93
102
class S3Handler (EventParseHandler ):
94
103
@staticmethod
95
- def is_supported (event ) -> bool :
96
- return safe_get ( event , [ "Records" , 0 , "eventSource" ]) == "aws:s3"
104
+ def is_supported (event : Event ) -> bool :
105
+ return event . record_event_source == "aws:s3"
97
106
98
107
@staticmethod
99
108
def parse (event ) -> OrderedDict :
@@ -125,8 +134,8 @@ def get_omit_skip_path() -> Optional[List[str]]:
125
134
126
135
class CloudfrontHandler (EventParseHandler ):
127
136
@staticmethod
128
- def is_supported (event ) -> bool :
129
- return bool (safe_get (event , ["Records" , 0 , "cf" , "config" , "distributionId" ], {}))
137
+ def is_supported (event : Event ) -> bool :
138
+ return bool (safe_get (event . raw_event , ["Records" , 0 , "cf" , "config" , "distributionId" ], {}))
130
139
131
140
@staticmethod
132
141
def parse (event ) -> OrderedDict :
@@ -153,8 +162,8 @@ def parse(event) -> OrderedDict:
153
162
154
163
class ApiGWHandler (EventParseHandler ):
155
164
@staticmethod
156
- def is_supported (event ) -> bool :
157
- return is_api_gw_event (event = event )
165
+ def is_supported (event : Event ) -> bool :
166
+ return is_api_gw_event (event = event . raw_event )
158
167
159
168
@staticmethod
160
169
def parse (event ) -> OrderedDict :
@@ -182,8 +191,8 @@ def parse(event) -> OrderedDict:
182
191
183
192
class SNSHandler (EventParseHandler ):
184
193
@staticmethod
185
- def is_supported (event ) -> bool :
186
- return safe_get (event , ["Records" , 0 , "EventSource" ]) == "aws:sns"
194
+ def is_supported (event : Event ) -> bool :
195
+ return safe_get (event . raw_event , ["Records" , 0 , "EventSource" ]) == "aws:sns"
187
196
188
197
@staticmethod
189
198
def parse (event ) -> OrderedDict :
@@ -201,8 +210,8 @@ def parse(event) -> OrderedDict:
201
210
202
211
class SQSHandler (EventParseHandler ):
203
212
@staticmethod
204
- def is_supported (event ) -> bool :
205
- return safe_get ( event , [ "Records" , 0 , "eventSource" ]) == "aws:sqs"
213
+ def is_supported (event : Event ) -> bool :
214
+ return event . record_event_source == "aws:sqs"
206
215
207
216
@staticmethod
208
217
def parse (event ) -> OrderedDict :
@@ -218,6 +227,20 @@ def parse(event) -> OrderedDict:
218
227
return new_sqs_event
219
228
220
229
230
+ class DDBHandler (EventParseHandler ):
231
+ @staticmethod
232
+ def is_supported (event : Event ) -> bool :
233
+ return event .record_event_source == "aws:dynamodb"
234
+
235
+ @staticmethod
236
+ def parse (event ) -> OrderedDict :
237
+ return event
238
+
239
+ @staticmethod
240
+ def get_omit_skip_path () -> Optional [List [str ]]:
241
+ return ["Records" , "dynamodb" , "Keys" ]
242
+
243
+
221
244
class EventDumper :
222
245
@staticmethod
223
246
def dump_event (
@@ -230,10 +253,12 @@ def dump_event(
230
253
SQSHandler (),
231
254
S3Handler (),
232
255
CloudfrontHandler (),
256
+ DDBHandler (),
233
257
]
258
+ event_obj = Event (event )
234
259
for handler in handlers :
235
260
try :
236
- if handler .is_supported (event ):
261
+ if handler .is_supported (event_obj ):
237
262
return lumigo_dumps (
238
263
handler .parse (event ),
239
264
max_size ,
0 commit comments