@@ -48,6 +48,7 @@ def _serialize(
4848 by_alias : bool = False ,
4949 flat : bool = False ,
5050 exclude : Set [str ] = None ,
51+ ** kwargs
5152 ):
5253 if not entity :
5354 return None
@@ -59,13 +60,15 @@ def _serialize(
5960 if len (fields ) == 1 :
6061 if flat :
6162 return entity .dict (
62- include = fields , by_alias = by_alias , exclude = exclude
63+ include = fields , by_alias = by_alias , exclude = exclude , ** kwargs
6364 )[next (iter (fields ))]
6465 return entity .dict (
65- include = fields , by_alias = by_alias , exclude = exclude
66+ include = fields , by_alias = by_alias , exclude = exclude , ** kwargs
6667 )
67- return entity .dict (include = fields , by_alias = by_alias , exclude = exclude )
68- return entity .dict (by_alias = by_alias , exclude = exclude )
68+ return entity .dict (
69+ include = fields , by_alias = by_alias , exclude = exclude , ** kwargs
70+ )
71+ return entity .dict (by_alias = by_alias , exclude = exclude , ** kwargs )
6972 return entity .to_dict ()
7073
7174 @classmethod
@@ -76,12 +79,13 @@ def serialize_iterable(
7679 by_alias : bool = False ,
7780 flat : bool = False ,
7881 exclude : Set = None ,
82+ ** kwargs
7983 ) -> List [Any ]:
8084 serialized_data = []
8185 for i in data :
8286 serialized_data .append (
8387 cls ._fill_enum_values (
84- cls ._serialize (i , fields , by_alias , flat , exclude = exclude )
88+ cls ._serialize (i , fields , by_alias , flat , exclude = exclude , ** kwargs )
8589 )
8690 )
8791 return serialized_data
@@ -152,3 +156,19 @@ def serialize(
152156 if data ["attribute" ] == "ImageQuality" :
153157 data ["value" ] = constance .ImageQuality .get_name (data ["value" ])
154158 return data
159+
160+
161+ class EntitySerializer :
162+ @classmethod
163+ def serialize (
164+ cls , data : Union [BaseModel , List [BaseModel ]], ** kwargs
165+ ) -> Union [List [dict ], dict ]:
166+ if isinstance (data , (list , set )):
167+ for idx , item in enumerate (data ):
168+ data [idx ] = cls .serialize (item , ** kwargs )
169+ for key , nested_model in data :
170+ if isinstance (nested_model , BaseModel ) and getattr (
171+ nested_model , "fill_enum_values" , False
172+ ):
173+ setattr (data , key , cls .serialize (nested_model , ** kwargs ))
174+ return data .dict (** kwargs )
0 commit comments