Skip to content

Commit d231318

Browse files
committed
fix some of the upload parameters now that multiple surveys can be
queried
1 parent 92bc314 commit d231318

File tree

3 files changed

+64
-11
lines changed

3 files changed

+64
-11
lines changed

astroquery/eso/core.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,11 @@ def _activate_form(self, response, form_index=0, inputs={}, cache=True,
126126
value = form_elem.select('option')[0].string
127127

128128
if key in inputs:
129-
value = str(inputs[key])
129+
if isinstance(inputs[key], list):
130+
# list input is accepted (for array uploads)
131+
value = inputs[key]
132+
else:
133+
value = str(inputs[key])
130134
if (key is not None):# and (value is not None):
131135
if fmt == 'multipart/form-data':
132136
if is_file:
@@ -248,16 +252,41 @@ def list_instruments(self, cache=True):
248252
self._instrument_list.append(u'harps')
249253
return self._instrument_list
250254

255+
def list_surveys(self, cache=True):
256+
""" List all the available surveys (phase 3) in the ESO archive.
257+
Returns
258+
-------
259+
survey_list : list of strings
260+
cache : bool
261+
Cache the response for faster subsequent retrieval
262+
"""
263+
if self._survey_list is None:
264+
survey_list_response = self._request(
265+
"GET", "http://archive.eso.org/wdb/wdb/adp/phase3_main/form",
266+
cache=cache)
267+
root = BeautifulSoup(survey_list_response.content, 'html5lib')
268+
self._survey_list = []
269+
collections_table = root.find('table', id='collections_table')
270+
other_collections = root.find('select', id='collection_name_option')
271+
for element in (collections_table.findAll('input', type='checkbox') +
272+
other_collections.findAll('option')):
273+
if 'value' in element.attrs:
274+
survey = element.attrs['value']
275+
if survey and survey not in self._survey_list and 'Any' not in survey:
276+
self._survey_list.append(survey)
277+
return self._survey_list
278+
251279
def query_surveys(self, surveys='', cache=True,
252280
help=False, open_form=False, **kwargs):
253281
"""
254282
Query survey Phase 3 data contained in the ESO archive.
255283
256284
Parameters
257285
----------
258-
survey : string
259-
Name of the survey to query, one of the names returned by
260-
`list_surveys()`.
286+
survey : string or list
287+
Name of the survey(s) to query. Should beone or more of the names
288+
returned by `list_surveys()`. If specified as a string, should be
289+
a comma-separated list of survey names.
261290
cache : bool
262291
Cache the response for faster subsequent retrieval
263292
@@ -281,6 +310,8 @@ def query_surveys(self, surveys='', cache=True,
281310
survey_form = self._request("GET", url, cache=cache)
282311
query_dict = kwargs
283312
query_dict["wdbo"] = "csv/download"
313+
if isinstance(surveys, six.string_types):
314+
surveys = surveys.split(",")
284315
query_dict['collection_name'] = surveys
285316
if self.ROW_LIMIT >= 0:
286317
query_dict["max_rows_returned"] = self.ROW_LIMIT
@@ -301,6 +332,7 @@ def query_surveys(self, surveys='', cache=True,
301332
else:
302333
warnings.warn("Query returned no results", NoResultsWarning)
303334

335+
304336
def query_instrument(self, instrument, column_filters={}, columns=[],
305337
open_form=False, help=False, cache=True, **kwargs):
306338
"""

astroquery/eso/tests/test_eso.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ def test_vvv(monkeypatch):
6161
monkeypatch.setattr(eso, '_request', eso_request)
6262
eso.cache_location = DATA_DIR
6363

64-
result_s = eso.query_survey('VVV',
65-
coord1=266.41681662, coord2=-29.00782497)
64+
result_s = eso.query_surveys('VVV',
65+
coord1=266.41681662, coord2=-29.00782497,
66+
box='01 00 00',
67+
)
6668
assert result_s is not None
6769
assert 'Object' in result_s.colnames
6870
assert 'b333' in result_s['Object']

astroquery/eso/tests/test_eso_remote.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,12 @@ def test_SgrAstar(self, temp_dir):
3939

4040
surveys = eso.list_surveys(cache=False)
4141
assert len(surveys) > 0
42-
# result_s = eso.query_survey('VVV', target='Sgr A*')
42+
# result_s = eso.query_surveys('VVV', target='Sgr A*')
4343
# Equivalent, does not depend on SESAME:
44-
result_s = eso.query_survey('VVV', coord1=266.41681662,
45-
coord2=-29.00782497, cache=False)
44+
result_s = eso.query_surveys('VVV', coord1=266.41681662,
45+
coord2=-29.00782497,
46+
box='01 00 00',
47+
cache=False)
4648

4749
assert 'midi' in instruments
4850
assert result_i is not None
@@ -51,6 +53,23 @@ def test_SgrAstar(self, temp_dir):
5153
assert 'Object' in result_s.colnames
5254
assert 'b333' in result_s['Object']
5355

56+
def test_multisurvey(self, temp_dir):
57+
58+
eso = Eso()
59+
eso.cache_location = temp_dir
60+
eso.ROW_LIMIT = 200 #first b333 is at 157
61+
62+
result_s = eso.query_surveys(['VVV','XSHOOTER'],
63+
coord1=266.41681662,
64+
coord2=-29.00782497,
65+
box='01 00 00',
66+
cache=False)
67+
68+
assert result_s is not None
69+
assert 'Object' in result_s.colnames
70+
assert 'b333' in result_s['Object']
71+
assert 'Pistol-Star' in result_s['Object']
72+
5473
def test_nologin(self):
5574
# WARNING: this test will fail if you haven't cleared your cache and
5675
# you have downloaded this file!
@@ -70,8 +89,8 @@ def test_empty_return(self):
7089
assert len(surveys) > 0
7190
# result_s = eso.query_survey(surveys[0], target='M51')
7291
# Avoid SESAME
73-
result_s = eso.query_survey(surveys[0], coord1=202.469575,
74-
coord2=47.195258, cache=False)
92+
result_s = eso.query_surveys(surveys[0], coord1=202.469575,
93+
coord2=47.195258, cache=False)
7594

7695
assert result_s is None
7796

0 commit comments

Comments
 (0)