@@ -281,27 +281,26 @@ def service_request_async(self, service, params, page_size=None, page=None, use_
281
281
if page_size is not None :
282
282
catalogs_request .append (('pagesize' , page_size ))
283
283
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
-
297
284
if not use_json :
298
285
# Decompose filters, sort
299
286
for prop , value in kwargs .items ():
300
287
params [prop ] = value
301
288
catalogs_request .extend (self ._build_catalogs_params (params ))
302
289
else :
303
290
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 ]
305
304
306
305
response = self ._request ('POST' , request_url , data = catalogs_request , headers = headers , use_json = use_json )
307
306
return response
@@ -328,9 +327,21 @@ def _build_catalogs_params(self, params):
328
327
elif prop == 'page_size' :
329
328
catalog_params .extend (('pagesize' , value ))
330
329
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 ))
334
345
elif prop == 'columns' :
335
346
catalog_params .extend (tuple (('columns' , col ) for col in value ))
336
347
else :
0 commit comments