@@ -152,62 +152,71 @@ def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass
152152 if param_metadata is None :
153153 continue
154154
155- if param_metadata .get ('style' , 'simple' ) == 'simple' :
156- param = getattr (
157- path_params , field .name ) if path_params is not None else None
158- param = _populate_from_globals (
159- field .name , param , 'pathParam' , gbls )
155+ param = getattr (
156+ path_params , field .name ) if path_params is not None else None
157+ param = _populate_from_globals (
158+ field .name , param , 'pathParam' , gbls )
160159
161- if param is None :
162- continue
163-
164- if isinstance (param , list ):
165- pp_vals : list [str ] = []
166- for pp_val in param :
167- if pp_val is None :
168- continue
169- pp_vals .append (_val_to_string (pp_val ))
170- path = path .replace (
171- '{' + param_metadata .get ('field_name' , field .name ) + '}' , "," .join (pp_vals ), 1 )
172- elif isinstance (param , dict ):
173- pp_vals : list [str ] = []
174- for pp_key in param :
175- if param [pp_key ] is None :
176- continue
177- if param_metadata .get ('explode' ):
178- pp_vals .append (
179- f"{ pp_key } ={ _val_to_string (param [pp_key ])} " )
180- else :
181- pp_vals .append (
182- f"{ pp_key } ,{ _val_to_string (param [pp_key ])} " )
183- path = path .replace (
184- '{' + param_metadata .get ('field_name' , field .name ) + '}' , "," .join (pp_vals ), 1 )
185- elif not isinstance (param , (str , int , float , complex , bool )):
186- pp_vals : list [str ] = []
187- param_fields : Tuple [Field , ...] = fields (param )
188- for param_field in param_fields :
189- param_value_metadata = param_field .metadata .get (
190- 'path_param' )
191- if not param_value_metadata :
192- continue
193-
194- parm_name = param_value_metadata .get (
195- 'field_name' , field .name )
160+ if param is None :
161+ continue
196162
197- param_field_val = getattr (param , param_field .name )
198- if param_field_val is None :
199- continue
200- if param_metadata .get ('explode' ):
201- pp_vals .append (
202- f"{ parm_name } ={ _val_to_string (param_field_val )} " )
203- else :
204- pp_vals .append (
205- f"{ parm_name } ,{ _val_to_string (param_field_val )} " )
206- path = path .replace (
207- '{' + param_metadata .get ('field_name' , field .name ) + '}' , "," .join (pp_vals ), 1 )
208- else :
163+ f_name = param_metadata .get ("field_name" , field .name )
164+ serialization = param_metadata .get ('serialization' , '' )
165+ if serialization != '' :
166+ serialized_params = _get_serialized_params (
167+ param_metadata , f_name , param )
168+ for key , value in serialized_params .items ():
209169 path = path .replace (
210- '{' + param_metadata .get ('field_name' , field .name ) + '}' , _val_to_string (param ), 1 )
170+ '{' + key + '}' , value , 1 )
171+ else :
172+ if param_metadata .get ('style' , 'simple' ) == 'simple' :
173+ if isinstance (param , list ):
174+ pp_vals : list [str ] = []
175+ for pp_val in param :
176+ if pp_val is None :
177+ continue
178+ pp_vals .append (_val_to_string (pp_val ))
179+ path = path .replace (
180+ '{' + param_metadata .get ('field_name' , field .name ) + '}' , "," .join (pp_vals ), 1 )
181+ elif isinstance (param , dict ):
182+ pp_vals : list [str ] = []
183+ for pp_key in param :
184+ if param [pp_key ] is None :
185+ continue
186+ if param_metadata .get ('explode' ):
187+ pp_vals .append (
188+ f"{ pp_key } ={ _val_to_string (param [pp_key ])} " )
189+ else :
190+ pp_vals .append (
191+ f"{ pp_key } ,{ _val_to_string (param [pp_key ])} " )
192+ path = path .replace (
193+ '{' + param_metadata .get ('field_name' , field .name ) + '}' , "," .join (pp_vals ), 1 )
194+ elif not isinstance (param , (str , int , float , complex , bool )):
195+ pp_vals : list [str ] = []
196+ param_fields : Tuple [Field , ...] = fields (param )
197+ for param_field in param_fields :
198+ param_value_metadata = param_field .metadata .get (
199+ 'path_param' )
200+ if not param_value_metadata :
201+ continue
202+
203+ parm_name = param_value_metadata .get (
204+ 'field_name' , field .name )
205+
206+ param_field_val = getattr (param , param_field .name )
207+ if param_field_val is None :
208+ continue
209+ if param_metadata .get ('explode' ):
210+ pp_vals .append (
211+ f"{ parm_name } ={ _val_to_string (param_field_val )} " )
212+ else :
213+ pp_vals .append (
214+ f"{ parm_name } ,{ _val_to_string (param_field_val )} " )
215+ path = path .replace (
216+ '{' + param_metadata .get ('field_name' , field .name ) + '}' , "," .join (pp_vals ), 1 )
217+ else :
218+ path = path .replace (
219+ '{' + param_metadata .get ('field_name' , field .name ) + '}' , _val_to_string (param ), 1 )
211220
212221 return server_url .removesuffix ("/" ) + path
213222
@@ -246,8 +255,12 @@ def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[
246255 f_name = metadata .get ("field_name" )
247256 serialization = metadata .get ('serialization' , '' )
248257 if serialization != '' :
249- params = params | _get_serialized_query_params (
250- metadata , f_name , value )
258+ serialized_parms = _get_serialized_params (metadata , f_name , value )
259+ for key , value in serialized_parms .items ():
260+ if key in params :
261+ params [key ].extend (value )
262+ else :
263+ params [key ] = [value ]
251264 else :
252265 style = metadata .get ('style' , 'form' )
253266 if style == 'deepObject' :
@@ -282,8 +295,8 @@ def get_headers(headers_params: dataclass) -> dict[str, str]:
282295 return headers
283296
284297
285- def _get_serialized_query_params (metadata : dict , field_name : str , obj : any ) -> dict [str , list [ str ] ]:
286- params : dict [str , list [ str ] ] = {}
298+ def _get_serialized_params (metadata : dict , field_name : str , obj : any ) -> dict [str , str ]:
299+ params : dict [str , str ] = {}
287300
288301 serialization = metadata .get ('serialization' , '' )
289302 if serialization == 'json' :
0 commit comments