Skip to content

Commit 9e8ef2f

Browse files
committed
parameters will be passed as JSON objects only when accessing PANSTARRS API. parameter syntax updated.
1 parent 2ad220b commit 9e8ef2f

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

astroquery/mast/collections.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,11 @@ def query_region_async(self, coordinates, *, radius=0.2*u.deg, catalog="Hsc",
162162
for prop, value in kwargs.items():
163163
params[prop] = value
164164

165-
return self._current_connection.service_request_async(service, params, pagesize=pagesize, page=page)
165+
# Parameters will be passed as JSON objects only when accessing the PANSTARRS API
166+
use_json = True if catalog.lower() == 'panstarrs' else False
167+
168+
return self._current_connection.service_request_async(service, params, pagesize=pagesize, page=page,
169+
use_json=use_json)
166170

167171
@class_or_instance
168172
def query_object_async(self, objectname, *, radius=0.2*u.deg, catalog="Hsc",
@@ -313,7 +317,11 @@ def query_criteria_async(self, catalog, *, pagesize=None, page=None, **criteria)
313317
raise InvalidQueryError("At least one non-positional criterion must be supplied.")
314318
params["filters"] = filters
315319

316-
return self._current_connection.service_request_async(service, params, pagesize=pagesize, page=page)
320+
# Parameters will be passed as JSON objects only when accessing the PANSTARRS API
321+
use_json = True if catalog.lower() == 'panstarrs' else False
322+
323+
return self._current_connection.service_request_async(service, params, pagesize=pagesize, page=page,
324+
use_json=use_json)
317325

318326
@class_or_instance
319327
def query_hsc_matchid_async(self, match, *, version=3, pagesize=None, page=None):

astroquery/mast/services.py

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

Comments
 (0)