@@ -278,7 +278,6 @@ async def param_serialize(
278278
279279 return method , url , header_params , body , post_params
280280
281-
282281 async def call_api (
283282 self ,
284283 method ,
@@ -476,6 +475,12 @@ def __deserialize(self, data, klass):
476475 return None
477476
478477 if isinstance (klass , str ):
478+ if klass .startswith ('Optional[' ):
479+ m = re .match (r'Optional\[(.*)]' , klass )
480+ assert m is not None , "Malformed Optional type definition"
481+ # data is not None here, so the optionality is already resolved
482+ return self .__deserialize (data , m .group (1 ))
483+
479484 if klass .startswith ('List[' ):
480485 m = re .match (r'List\[(.*)]' , klass )
481486 assert m is not None , "Malformed List type definition"
@@ -524,10 +529,15 @@ def parameters_to_tuples(self, params, collection_formats):
524529 if collection_formats is None :
525530 collection_formats = {}
526531 for k , v in params .items () if isinstance (params , dict ) else params :
532+ if isinstance (v , bool ):
533+ v = str (v ).lower ()
527534 if k in collection_formats :
528535 collection_format = collection_formats [k ]
529536 if collection_format == 'multi' :
530- new_params .extend ((k , value ) for value in v )
537+ new_params .extend (
538+ (k , str (value ).lower () if isinstance (value , bool ) else value )
539+ for value in v
540+ )
531541 else :
532542 if collection_format == 'ssv' :
533543 delimiter = ' '
@@ -538,7 +548,9 @@ def parameters_to_tuples(self, params, collection_formats):
538548 else : # csv is the default
539549 delimiter = ','
540550 new_params .append (
541- (k , delimiter .join (str (value ) for value in v )))
551+ (k , delimiter .join (
552+ str (value ).lower () if isinstance (value , bool ) else str (value )
553+ for value in v )))
542554 else :
543555 new_params .append ((k , v ))
544556 return new_params
@@ -564,7 +576,10 @@ def parameters_to_url_query(self, params, collection_formats):
564576 if k in collection_formats :
565577 collection_format = collection_formats [k ]
566578 if collection_format == 'multi' :
567- new_params .extend ((k , quote (str (value ))) for value in v )
579+ new_params .extend (
580+ (k , quote (str (value ).lower () if isinstance (value , bool ) else str (value )))
581+ for value in v
582+ )
568583 else :
569584 if collection_format == 'ssv' :
570585 delimiter = ' '
@@ -575,7 +590,9 @@ def parameters_to_url_query(self, params, collection_formats):
575590 else : # csv is the default
576591 delimiter = ','
577592 new_params .append (
578- (k , delimiter .join (quote (str (value )) for value in v ))
593+ (k , delimiter .join (
594+ quote (str (value ).lower () if isinstance (value , bool ) else str (value ))
595+ for value in v ))
579596 )
580597 else :
581598 new_params .append ((k , quote (str (v ))))
0 commit comments