@@ -141,7 +141,8 @@ def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass):
141141 client .client .headers ['Authorization' ] = f'Basic { base64 .b64encode (data ).decode ()} '
142142
143143
144- def generate_url (clazz : type , server_url : str , path : str , path_params : dataclass , gbls : dict [str , dict [str , dict [str , Any ]]] = None ) -> str :
144+ def generate_url (clazz : type , server_url : str , path : str , path_params : dataclass ,
145+ gbls : dict [str , dict [str , dict [str , Any ]]] = None ) -> str :
145146 path_param_fields : Tuple [Field , ...] = fields (clazz )
146147 for field in path_param_fields :
147148 request_metadata = field .metadata .get ('request' )
@@ -233,7 +234,8 @@ def template_url(url_with_params: str, params: dict[str, str]) -> str:
233234 return url_with_params
234235
235236
236- def get_query_params (clazz : type , query_params : dataclass , gbls : dict [str , dict [str , dict [str , Any ]]] = None ) -> dict [str , list [str ]]:
237+ def get_query_params (clazz : type , query_params : dataclass , gbls : dict [str , dict [str , dict [str , Any ]]] = None ) -> dict [
238+ str , list [str ]]:
237239 params : dict [str , list [str ]] = {}
238240
239241 param_fields : Tuple [Field , ...] = fields (clazz )
@@ -267,8 +269,11 @@ def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[
267269 params = params | _get_deep_object_query_params (
268270 metadata , f_name , value )
269271 elif style == 'form' :
270- params = params | _get_form_query_params (
271- metadata , f_name , value )
272+ params = params | _get_delimited_query_params (
273+ metadata , f_name , value , "," )
274+ elif style == 'pipeDelimited' :
275+ params = params | _get_delimited_query_params (
276+ metadata , f_name , value , "|" )
272277 else :
273278 raise Exception ('not yet implemented' )
274279 return params
@@ -327,12 +332,15 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) ->
327332 if val is None :
328333 continue
329334
330- if params .get (f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ) is None :
331- params [f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ] = [
335+ if params .get (
336+ f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ) is None :
337+ params [
338+ f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ] = [
332339 ]
333340
334341 params [
335- f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ].append (_val_to_string (val ))
342+ f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ].append (
343+ _val_to_string (val ))
336344 else :
337345 params [
338346 f'{ metadata .get ("field_name" , field_name )} [{ obj_param_metadata .get ("field_name" , obj_field .name )} ]' ] = [
@@ -368,25 +376,28 @@ def _get_query_param_field_name(obj_field: Field) -> str:
368376 return obj_param_metadata .get ("field_name" , obj_field .name )
369377
370378
371- def _get_form_query_params (metadata : dict , field_name : str , obj : any ) -> dict [str , list [str ]]:
372- return _populate_form (field_name , metadata .get ("explode" , True ), obj , _get_query_param_field_name )
379+ def _get_delimited_query_params (metadata : dict , field_name : str , obj : any , array_delimiter : str ) -> dict [
380+ str , list [str ]]:
381+ return _populate_form (field_name , metadata .get ("explode" , True ), obj , _get_query_param_field_name , array_delimiter )
373382
374383
375384SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
376- 'json' : 'application/json' ,
377- 'form' : 'application/x-www-form-urlencoded' ,
385+ 'json' : 'application/json' ,
386+ 'form' : 'application/x-www-form-urlencoded' ,
378387 'multipart' : 'multipart/form-data' ,
379- 'raw' : 'application/octet-stream' ,
380- 'string' : 'text/plain' ,
388+ 'raw' : 'application/octet-stream' ,
389+ 'string' : 'text/plain' ,
381390}
382391
383392
384- def serialize_request_body (request : dataclass , request_field_name : str , serialization_method : str ) -> Tuple [str , any , any ]:
393+ def serialize_request_body (request : dataclass , request_field_name : str , serialization_method : str ) -> Tuple [
394+ str , any , any ]:
385395 if request is None :
386396 return None , None , None , None
387397
388398 if not is_dataclass (request ) or not hasattr (request , request_field_name ):
389- return serialize_content_type (request_field_name , SERIALIZATION_METHOD_TO_CONTENT_TYPE [serialization_method ], request )
399+ return serialize_content_type (request_field_name , SERIALIZATION_METHOD_TO_CONTENT_TYPE [serialization_method ],
400+ request )
390401
391402 request_val = getattr (request , request_field_name )
392403
@@ -401,7 +412,8 @@ def serialize_request_body(request: dataclass, request_field_name: str, serializ
401412 if request_metadata is None :
402413 raise Exception ('invalid request type' )
403414
404- return serialize_content_type (request_field_name , request_metadata .get ('media_type' , 'application/octet-stream' ), request_val )
415+ return serialize_content_type (request_field_name , request_metadata .get ('media_type' , 'application/octet-stream' ),
416+ request_val )
405417
406418
407419def serialize_content_type (field_name : str , media_type : str , request : dataclass ) -> Tuple [str , any , list [list [any ]]]:
@@ -474,7 +486,7 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
474486
475487
476488def serialize_dict (original : dict , explode : bool , field_name , existing : Optional [dict [str , list [str ]]]) -> dict [
477- str , list [str ]]:
489+ str , list [str ]]:
478490 if existing is None :
479491 existing = []
480492
@@ -514,7 +526,7 @@ def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
514526 else :
515527 if metadata .get ('style' , 'form' ) == 'form' :
516528 form = form | _populate_form (
517- field_name , metadata .get ('explode' , True ), val , _get_form_field_name )
529+ field_name , metadata .get ('explode' , True ), val , _get_form_field_name , "," )
518530 else :
519531 raise Exception (
520532 f'Invalid form style for field { field .name } ' )
@@ -536,7 +548,8 @@ def _get_form_field_name(obj_field: Field) -> str:
536548 return obj_param_metadata .get ("field_name" , obj_field .name )
537549
538550
539- def _populate_form (field_name : str , explode : boolean , obj : any , get_field_name_func : Callable ) -> dict [str , list [str ]]:
551+ def _populate_form (field_name : str , explode : boolean , obj : any , get_field_name_func : Callable , array_delimiter : str ) -> \
552+ dict [str , list [str ]]:
540553 params : dict [str , list [str ]] = {}
541554
542555 if obj is None :
@@ -591,7 +604,7 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
591604 items .append (_val_to_string (value ))
592605
593606 if len (items ) > 0 :
594- params [field_name ] = [',' .join ([str (item ) for item in items ])]
607+ params [field_name ] = [array_delimiter .join ([str (item ) for item in items ])]
595608 else :
596609 params [field_name ] = [_val_to_string (obj )]
597610
0 commit comments