@@ -114,6 +114,9 @@ def _flatten_base_subclass(obj: "Base") -> Optional[Dict[str, Any]]:
114114
115115 @property
116116 def dict (self ):
117+ return self ._serialize ()
118+
119+ def _serialize (self , is_put : bool = False ) -> Dict [str , Any ]:
117120 result = vars (self ).copy ()
118121 cls = type (self )
119122
@@ -123,7 +126,7 @@ def dict(self):
123126 elif isinstance (v , list ):
124127 result [k ] = [
125128 (
126- item .dict
129+ item ._serialize ( is_put = is_put )
127130 if isinstance (item , (cls , JSONObject ))
128131 else (
129132 self ._flatten_base_subclass (item )
@@ -136,7 +139,7 @@ def dict(self):
136139 elif isinstance (v , Base ):
137140 result [k ] = self ._flatten_base_subclass (v )
138141 elif isinstance (v , JSONObject ):
139- result [k ] = v .dict
142+ result [k ] = v ._serialize ( is_put = is_put )
140143
141144 return result
142145
@@ -278,9 +281,9 @@ def save(self, force=True) -> bool:
278281 data [key ] = None
279282
280283 # Ensure we serialize any values that may not be already serialized
281- data = _flatten_request_body_recursive (data )
284+ data = _flatten_request_body_recursive (data , is_put = True )
282285 else :
283- data = self ._serialize ()
286+ data = self ._serialize (is_put = True )
284287
285288 resp = self ._client .put (type (self ).api_endpoint , model = self , data = data )
286289
@@ -316,7 +319,7 @@ def invalidate(self):
316319
317320 self ._set ("_populated" , False )
318321
319- def _serialize (self ):
322+ def _serialize (self , is_put : bool = False ):
320323 """
321324 A helper method to build a dict of all mutable Properties of
322325 this object
@@ -345,7 +348,7 @@ def _serialize(self):
345348
346349 # Resolve the underlying IDs of results
347350 for k , v in result .items ():
348- result [k ] = _flatten_request_body_recursive (v )
351+ result [k ] = _flatten_request_body_recursive (v , is_put = is_put )
349352
350353 return result
351354
@@ -503,7 +506,7 @@ def make_instance(cls, id, client, parent_id=None, json=None):
503506 return Base .make (id , client , cls , parent_id = parent_id , json = json )
504507
505508
506- def _flatten_request_body_recursive (data : Any ) -> Any :
509+ def _flatten_request_body_recursive (data : Any , is_put : bool = False ) -> Any :
507510 """
508511 This is a helper recursively flatten the given data for use in an API request body.
509512
@@ -515,15 +518,18 @@ def _flatten_request_body_recursive(data: Any) -> Any:
515518 """
516519
517520 if isinstance (data , dict ):
518- return {k : _flatten_request_body_recursive (v ) for k , v in data .items ()}
521+ return {
522+ k : _flatten_request_body_recursive (v , is_put = is_put )
523+ for k , v in data .items ()
524+ }
519525
520526 if isinstance (data , list ):
521- return [_flatten_request_body_recursive (v ) for v in data ]
527+ return [_flatten_request_body_recursive (v , is_put = is_put ) for v in data ]
522528
523529 if isinstance (data , Base ):
524530 return data .id
525531
526532 if isinstance (data , MappedObject ) or issubclass (type (data ), JSONObject ):
527- return data .dict
533+ return data ._serialize ( is_put = is_put )
528534
529535 return data
0 commit comments