@@ -281,23 +281,33 @@ 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- for item in params ['sort_by' ]:
289- if item [0 ].lower () in ['asc' , 'desc' ]:
290- new_sort_by .append (item [1 ] + '.' + item [0 ])
291- params ['sort_by' ] = new_sort_by
292-
293284 if not use_json :
294285 # Decompose filters, sort
295286 for prop , value in kwargs .items ():
296287 params [prop ] = value
297288 catalogs_request .extend (self ._build_catalogs_params (params ))
298289 else :
299290 headers ['Content-Type' ] = 'application/json'
300- catalogs_request = params
291+
292+ # Parameter syntax needs to be updated only for PANSTARRS catalog queries
293+ if service .lower () == 'panstarrs' :
294+ catalogs_request .extend (self ._build_catalogs_params (params ))
295+
296+ # After parameter syntax is updated, revert back to dictionary
297+ # so params can be passed as a JSON dictionary
298+ params_dict = {}
299+ for key , val in catalogs_request :
300+ params_dict .setdefault (key , []).append (val )
301+ catalogs_request = params_dict
302+
303+ # Removing single-element lists. Single values will live on their own (except for `sort_by`)
304+ for key in catalogs_request .keys ():
305+ if (key != 'sort_by' ) & (len (catalogs_request [key ]) == 1 ):
306+ catalogs_request [key ] = catalogs_request [key ][0 ]
307+
308+ # Otherwise, catalogs_request can remain as the original params dict
309+ else :
310+ catalogs_request = params
301311
302312 response = self ._request ('POST' , request_url , data = catalogs_request , headers = headers , use_json = use_json )
303313 return response
@@ -327,7 +337,11 @@ def _build_catalogs_params(self, params):
327337 # Loop through each value if list
328338 if isinstance (value , list ):
329339 for sort_item in value :
330- catalog_params .append (('sort_by' , sort_item ))
340+ # Determine if tuple with sort direction
341+ if isinstance (sort_item , tuple ):
342+ catalog_params .append (('sort_by' , sort_item [1 ] + '.' + sort_item [0 ]))
343+ else :
344+ catalog_params .append (('sort_by' , sort_item ))
331345 else :
332346 # A single sort
333347 # Determine if tuple with sort direction
0 commit comments