@@ -123,8 +123,38 @@ def json_deserialize(json, unboxing_function=None, as_dict=False):
123123 return {k : unboxing_function (v ) for k , v in decoded .items ()}
124124 elif isinstance (decoded , list ):
125125 return [unboxing_function (element ) for element in decoded ]
126- else :
127- return unboxing_function (decoded )
126+
127+ return unboxing_function (decoded )
128+
129+ @staticmethod
130+ def apply_unboxing_function (value , unboxing_function , is_array = False , is_dict = False , is_array_of_map = False ,
131+ is_map_of_array = False , dimension_count = 1 ):
132+ if is_dict :
133+ if is_map_of_array :
134+ return {k : ApiHelper .apply_unboxing_function (v ,
135+ unboxing_function ,
136+ is_array = True ,
137+ dimension_count = dimension_count )
138+ for k , v in value .items ()}
139+ else :
140+ return {k : unboxing_function (v ) for k , v in value .items ()}
141+ elif is_array :
142+ if is_array_of_map :
143+ return [
144+ ApiHelper .apply_unboxing_function (element ,
145+ unboxing_function ,
146+ is_dict = True ,
147+ dimension_count = dimension_count )
148+ for element in value ]
149+ elif dimension_count > 1 :
150+ return [ApiHelper .apply_unboxing_function (element , unboxing_function ,
151+ is_array = True ,
152+ dimension_count = dimension_count - 1 )
153+ for element in value ]
154+ else :
155+ return [unboxing_function (element ) for element in value ]
156+
157+ return unboxing_function (value )
128158
129159 @staticmethod
130160 def dynamic_deserialize (dynamic_response ):
@@ -527,23 +557,27 @@ def to_dictionary(obj, should_ignore_null_values=False):
527557 # Loop through all additional properties in this model
528558 if hasattr (obj , "additional_properties" ):
529559 for name in obj .additional_properties :
560+
561+ if name in dictionary .keys ():
562+ raise ValueError (f'An additional property key, \' { name } \' conflicts with one of the model\' s properties' )
563+
530564 value = obj .additional_properties .get (name )
531565 if isinstance (value , list ):
532566 # Loop through each item
533567 dictionary [name ] = list ()
534568 for item in value :
535569 dictionary [name ].append (
536- ApiHelper .to_dictionary (item , should_ignore_null_values ) if hasattr (item , "additional_properties " ) else item )
570+ ApiHelper .to_dictionary (item , should_ignore_null_values ) if hasattr (item , "_names " ) else item )
537571 elif isinstance (value , dict ):
538572 # Loop through each item
539573 dictionary [name ] = dict ()
540574 for key in value :
541575 dictionary [name ][key ] = ApiHelper .to_dictionary (value [key ], should_ignore_null_values ) if hasattr (value [key ],
542- "additional_properties " ) else \
576+ "_names " ) else \
543577 value [key ]
544578 else :
545579 dictionary [name ] = ApiHelper .to_dictionary (value , should_ignore_null_values ) if hasattr (value ,
546- "additional_properties " ) else value
580+ "_names " ) else value
547581
548582 # Return the result
549583 return dictionary
@@ -668,6 +702,27 @@ def to_lower_case(list_of_string):
668702
669703 return list (map (lambda x : x .lower (), list_of_string ))
670704
705+ @staticmethod
706+ def get_additional_properties (dictionary , unboxing_function ):
707+ """Extracts additional properties from the dictionary.
708+
709+ Args:
710+ dictionary (dict): The dictionary to extract additional properties from.
711+ unboxing_function (callable): The deserializer to apply to each item in the dictionary.
712+
713+ Returns:
714+ dict: A dictionary containing the additional properties and their values.
715+ """
716+ additional_properties = {}
717+ for key , value in dictionary .items ():
718+ try :
719+ additional_properties [key ] = unboxing_function (value )
720+ except Exception :
721+ pass
722+
723+ return additional_properties
724+
725+
671726 class CustomDate (object ):
672727
673728 """ A base class for wrapper classes of datetime.
0 commit comments