@@ -152,62 +152,71 @@ def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass
152
152
if param_metadata is None :
153
153
continue
154
154
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 )
160
159
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
196
162
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 ():
209
169
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 )
211
220
212
221
return server_url .removesuffix ("/" ) + path
213
222
@@ -246,8 +255,12 @@ def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[
246
255
f_name = metadata .get ("field_name" )
247
256
serialization = metadata .get ('serialization' , '' )
248
257
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 ]
251
264
else :
252
265
style = metadata .get ('style' , 'form' )
253
266
if style == 'deepObject' :
@@ -282,8 +295,8 @@ def get_headers(headers_params: dataclass) -> dict[str, str]:
282
295
return headers
283
296
284
297
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 ] = {}
287
300
288
301
serialization = metadata .get ('serialization' , '' )
289
302
if serialization == 'json' :
0 commit comments