@@ -281,27 +281,26 @@ def service_request_async(self, service, params, page_size=None, page=None, use_
281281 if page_size is not None :
282282 catalogs_request .append (('pagesize' , page_size ))
283283
284- # Updating syntax of sort_by inputs if sort direction
285- # was specified
286- if 'sort_by' in params .keys ():
287- new_sort_by = []
288-
289- # If just a tuple is fed, turn it into a list with a single tuple element
290- if not isinstance (params ['sort_by' ], list ):
291- params ['sort_by' ] = [(params ['sort_by' ][0 ], params ['sort_by' ][1 ])]
292- for item in params ['sort_by' ]:
293- if item [0 ].lower () in ['asc' , 'desc' ]:
294- new_sort_by .append (item [1 ] + '.' + item [0 ])
295- params ['sort_by' ] = new_sort_by
296-
297284 if not use_json :
298285 # Decompose filters, sort
299286 for prop , value in kwargs .items ():
300287 params [prop ] = value
301288 catalogs_request .extend (self ._build_catalogs_params (params ))
302289 else :
303290 headers ['Content-Type' ] = 'application/json'
304- catalogs_request = params
291+
292+ # After parameter syntax is updated, revert back to dictionary
293+ # so params can be passed as a JSON dictionary
294+ params_dict = {}
295+ catalogs_request .extend (self ._build_catalogs_params (params ))
296+ for key , val in catalogs_request :
297+ params_dict .setdefault (key , []).append (val )
298+ catalogs_request = params_dict
299+
300+ # Removing single-element lists. Single values will live on their own.
301+ for key in catalogs_request .keys ():
302+ if len (catalogs_request [key ]) == 1 :
303+ catalogs_request [key ] = catalogs_request [key ][0 ]
305304
306305 response = self ._request ('POST' , request_url , data = catalogs_request , headers = headers , use_json = use_json )
307306 return response
@@ -328,9 +327,21 @@ def _build_catalogs_params(self, params):
328327 elif prop == 'page_size' :
329328 catalog_params .extend (('pagesize' , value ))
330329 elif prop == 'sort_by' :
331- # Loop through each value
332- for sort_item in value :
333- catalog_params .append (('sort_by' , sort_item ))
330+ # Loop through each value if list
331+ if isinstance (value , list ):
332+ for sort_item in value :
333+ # Determine if tuple with sort direction
334+ if isinstance (sort_item , tuple ):
335+ catalog_params .append (('sort_by' , sort_item [1 ] + '.' + sort_item [0 ]))
336+ else :
337+ catalog_params .append (('sort_by' , sort_item ))
338+ else :
339+ # A single sort
340+ # Determine if tuple with sort direction
341+ if isinstance (value , tuple ):
342+ catalog_params .append (('sort_by' , value [0 ] + '.' + value [1 ]))
343+ else :
344+ catalog_params .append (('sort_by' , value ))
334345 elif prop == 'columns' :
335346 catalog_params .extend (tuple (('columns' , col ) for col in value ))
336347 else :
0 commit comments