@@ -209,12 +209,23 @@ def serialize(self, value):
209209 return callback (value )
210210 raise IsNotSerializable (f"Unserializable type:{ type (value )} value:{ value } " )
211211
212+ def serialize_with_fork (self , value , key ):
213+ # TODO: merge this function with the serialize function
214+ # TODO: this should be performed after is_valid_callable check
215+ serializer = self
216+ if self .is_forkable (value ):
217+ serializer = self .fork (key = key )
218+
219+ return serializer .serialize (value )
220+
212221 def serialize_iter (self , value : Iterable ) -> list :
213222 res = []
214223 for v in value :
215224 try :
216225 r = self .serialize (v )
217- except IsNotSerializable : # FIXME: Why we swallow exception only in iterable?
226+ except (
227+ IsNotSerializable
228+ ): # FIXME: Why we swallow exception only in iterable?
218229 logger .warning ("Can not serialize type:%s" , get_type (v ))
219230 continue
220231
@@ -227,11 +238,7 @@ def serialize_dict(self, value: dict) -> dict:
227238 if self .schema .is_included (k ): # TODO: Skip check if is NOT greedy
228239 logger .debug ("Serialize key:%s type:%s of dict" , k , get_type (v ))
229240
230- serializer = self
231- if self .is_forkable (v ):
232- serializer = self .fork (key = k )
233-
234- res [k ] = serializer .serialize (v )
241+ res [k ] = self .serialize_with_fork (value = v , key = k )
235242 else :
236243 logger .debug ("Skip key:%s of dict" , k )
237244 return res
@@ -250,12 +257,7 @@ def serialize_model(self, value) -> dict:
250257 logger .debug (
251258 "Serialize key:%s type:%s model:%s" , k , get_type (v ), get_type (value )
252259 )
253-
254- serializer = self
255- if self .is_forkable (v ):
256- serializer = self .fork (key = k )
257-
258- res [k ] = serializer .serialize (v )
260+ res [k ] = self .serialize_with_fork (value = v , key = k )
259261
260262 else :
261263 logger .debug ("Skip key:%s of model:%s" , k , get_type (value ))
0 commit comments