@@ -204,22 +204,48 @@ def deserialize(cls, json_data: MutableMapping[str, Any]) -> "HookRequestContext
204204 return HookRequestContext ()
205205 return HookRequestContext (** json_data )
206206
207+ def serialize (self ) -> Mapping [str , Any ]:
208+ return {key : value for key , value in self .__dict__ .items () if value is not None }
209+
207210
208211@dataclass
209212class HookRequestData :
210213 targetName : str
211214 targetType : str
212215 targetLogicalId : str
213216 targetModel : Mapping [str , Any ]
214- callerCredentials : Optional [str ] = None
215- providerCredentials : Optional [str ] = None
217+ callerCredentials : Optional [Credentials ] = None
218+ providerCredentials : Optional [Credentials ] = None
216219 providerLogGroupName : Optional [str ] = None
217- hookEncryptionKeyArn : Optional [str ] = None
218- hookEncryptionKeyRole : Optional [str ] = None
220+
221+ def __init__ (self , ** kwargs : Any ) -> None :
222+ dataclass_fields = {f .name for f in fields (self )}
223+ for k , v in kwargs .items ():
224+ if k in dataclass_fields :
225+ setattr (self , k , v )
219226
220227 @classmethod
221228 def deserialize (cls , json_data : MutableMapping [str , Any ]) -> "HookRequestData" :
222- return HookRequestData (** json_data )
229+ req_data = HookRequestData (** json_data )
230+ for key in json_data :
231+ if not key .endswith ("Credentials" ):
232+ continue
233+ creds = json_data .get (key )
234+ if creds :
235+ cred_data = json .loads (creds )
236+ setattr (req_data , key , Credentials (** cred_data ))
237+ return req_data
238+
239+ def serialize (self ) -> Mapping [str , Any ]:
240+ return {
241+ key : {k : v for k , v in value .items () if v is not None }
242+ if key == "targetModel"
243+ else value .__dict__ .copy ()
244+ if key .endswith ("Credentials" )
245+ else value
246+ for key , value in self .__dict__ .items ()
247+ if value is not None
248+ }
223249
224250
225251@dataclass
@@ -252,6 +278,15 @@ def deserialize(cls, json_data: MutableMapping[str, Any]) -> Any:
252278 )
253279 return event
254280
281+ def serialize (self ) -> Mapping [str , Any ]:
282+ return {
283+ key : value .serialize ()
284+ if key in ("requestData" , "requestContext" )
285+ else value
286+ for key , value in self .__dict__ .items ()
287+ if value is not None
288+ }
289+
255290
256291@dataclass
257292class UnmodelledHookRequest :
0 commit comments