Skip to content

Commit caf4db2

Browse files
committed
got rid of sort_by refactoring. converting params back to dict when use_json=True instead.
1 parent 2fb04f1 commit caf4db2

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

astroquery/mast/services.py

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)