Skip to content

Commit 7277870

Browse files
authored
Merge pull request #2727 from jaymedina/panstarrs-queries
Fixed failing PANSTARRS `Catalog` queries
2 parents f988189 + c42dd7a commit 7277870

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ mast
144144

145145
- Expanding ``Cutouts`` functionality to support TICA HLSPs now available through
146146
``TesscutClass``. [##2668]
147+
148+
- Resolved issue making PANSTARRS catalog queries when columns and sorting is specified. [#2727]
147149

148150
nist
149151
^^^^

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 = catalog.lower() == 'panstarrs'
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 = catalog.lower() == 'panstarrs'
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: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,27 @@ def service_request_async(self, service, params, page_size=None, page=None, use_
288288
catalogs_request.extend(self._build_catalogs_params(params))
289289
else:
290290
headers['Content-Type'] = 'application/json'
291-
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
311+
292312
response = self._request('POST', request_url, data=catalogs_request, headers=headers, use_json=use_json)
293313
return response
294314

astroquery/mast/tests/test_mast_remote.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,17 @@ def test_catalogs_query_criteria(self):
691691
assert isinstance(result, Table)
692692
assert 'PSO J254.2861-04.1091' in result['objName']
693693

694+
result = mast.Catalogs.query_criteria(coordinates="158.47924 -7.30962",
695+
radius=0.01,
696+
catalog="PANSTARRS",
697+
table="mean",
698+
data_release="dr2",
699+
nStackDetections=[("gte", "1")],
700+
columns=["objName", "distance"],
701+
sort_by=[("asc", "distance")])
702+
assert isinstance(result, Table)
703+
assert result['distance'][0] <= result['distance'][1]
704+
694705
def test_catalogs_query_hsc_matchid_async(self):
695706
catalogData = mast.Catalogs.query_object("M10",
696707
radius=.001,

0 commit comments

Comments
 (0)