Skip to content

Commit 6cf1f87

Browse files
committed
change http->https, and do a lot of refactoring
1 parent 0de7f0e commit 6cf1f87

File tree

2 files changed

+41
-25
lines changed

2 files changed

+41
-25
lines changed

astroquery/atomic/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class Conf(_config.ConfigNamespace):
7777
Configuration parameters for `astroquery.atomic`.
7878
"""
7979
url = _config.ConfigItem(
80-
'http://www.pa.uky.edu/~peter/atomic/',
80+
'https://www.pa.uky.edu/~peter/atomic/',
8181
'Atomic Line List URL')
8282

8383
timeout = _config.ConfigItem(

astroquery/atomic/core.py

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from astropy import units as u
1313
from bs4 import BeautifulSoup
1414

15+
from .. import log
16+
1517
from ..query import BaseQuery
1618
from ..utils import prepend_docstr_nosections, async_to_sync
1719
from . import conf
@@ -27,7 +29,7 @@ class AtomicLineListClass(BaseQuery):
2729

2830
def __init__(self):
2931
super(AtomicLineListClass, self).__init__()
30-
self._default_form_values = None
32+
self._default_form_values_ = None
3133

3234
def query_object(self, wavelength_range=None, wavelength_type=None,
3335
wavelength_accuracy=None, element_spectrum=None,
@@ -39,7 +41,10 @@ def query_object(self, wavelength_range=None, wavelength_type=None,
3941
show_auto_ionizing_transitions=None,
4042
output_columns=('spec', 'type', 'conf',
4143
'term', 'angm', 'prob',
42-
'ener')):
44+
'ener'),
45+
cache=True,
46+
get_query_payload=False
47+
):
4348
"""
4449
Queries Atomic Line List for the given parameters adnd returns the
4550
result as a `~astropy.table.Table`. All parameters are optional.
@@ -163,7 +168,10 @@ def query_object(self, wavelength_range=None, wavelength_type=None,
163168
multiplet=multiplet, transitions=transitions,
164169
show_fine_structure=show_fine_structure,
165170
show_auto_ionizing_transitions=show_auto_ionizing_transitions,
166-
output_columns=output_columns)
171+
output_columns=output_columns, cache=cache,
172+
get_query_payload=get_query_payload)
173+
if get_query_payload:
174+
return input
167175
table = self._parse_result(response)
168176
return table
169177

@@ -178,19 +186,16 @@ def query_object_async(self, wavelength_range=None, wavelength_type='',
178186
show_auto_ionizing_transitions=None,
179187
output_columns=('spec', 'type', 'conf',
180188
'term', 'angm', 'prob',
181-
'ener')):
189+
'ener'),
190+
cache=True,
191+
get_query_payload=False
192+
):
182193
"""
183194
Returns
184195
-------
185196
response : `requests.Response`
186197
The HTTP response returned from the service.
187198
"""
188-
if self._default_form_values is None:
189-
response = self._request("GET", url=self.FORM_URL, data={},
190-
timeout=self.TIMEOUT)
191-
bs = BeautifulSoup(response.text)
192-
form = bs.find('form')
193-
self._default_form_values = self._get_default_form_values(form)
194199
default_values = self._default_form_values
195200
wltype = (wavelength_type or default_values.get('air', '')).lower()
196201
if wltype in ('air', 'vacuum'):
@@ -233,7 +238,7 @@ def query_object_async(self, wavelength_range=None, wavelength_type='',
233238
upper_level_erange = upper_level_erange.to(
234239
u.cm ** -1, equivalencies=u.spectral()).value
235240
input = {
236-
'wavl': '-'.join(map(str, wlrange_in_angstroms)),
241+
'wavl': ' '.join(map(str, wlrange_in_angstroms)),
237242
'wave': 'Angstrom',
238243
'air': air,
239244
'wacc': wavelength_accuracy,
@@ -246,12 +251,16 @@ def query_object_async(self, wavelength_range=None, wavelength_type='',
246251
'nmax': nmax,
247252
'term': multiplet,
248253
'type': _type,
249-
'type2': type2,
254+
#'type2': type2,
250255
'hydr': show_fine_structure,
251256
'auto': show_auto_ionizing_transitions,
252257
'form': output_columns,
253-
'tptype': 'as_a'}
254-
response = self._submit_form(input)
258+
'jval': 'usej',
259+
'tptype': 'as_a',
260+
}
261+
if get_query_payload:
262+
return input
263+
response = self._submit_form(input, cache=cache)
255264
return response
256265

257266
def _parse_result(self, response):
@@ -288,32 +297,39 @@ def _parse_result(self, response):
288297
# return an empty table if the query yielded no results
289298
return Table()
290299

291-
def _submit_form(self, input=None):
300+
def _submit_form(self, input=None, cache=True):
292301
"""Fill out the form of the SkyView site and submit it with the
293302
values given in `input` (a dictionary where the keys are the form
294303
element's names and the values are their respective values).
295304
296305
"""
297306
if input is None:
298307
input = {}
299-
response = self._request("GET", url=self.FORM_URL, data={},
300-
timeout=self.TIMEOUT)
301-
bs = BeautifulSoup(response.text)
302-
form = bs.find('form')
303-
# cache the default values to save HTTP traffic
304-
if self._default_form_values is None:
305-
self._default_form_values = self._get_default_form_values(form)
306308
# only overwrite payload's values if the `input` value is not None
307309
# to avoid overwriting of the form's default values
308310
payload = self._default_form_values.copy()
309311
for k, v in six.iteritems(input):
310312
if v is not None:
311313
payload[k] = v
312-
url = urlparse.urljoin(self.FORM_URL, form.get('action'))
314+
url = urlparse.urljoin(self.FORM_URL, self._default_form.get('action'))
315+
log.debug(f"final payload = {payload} from url={url}")
313316
response = self._request("POST", url=url, data=payload,
314-
timeout=self.TIMEOUT)
317+
timeout=self.TIMEOUT, cache=cache)
318+
log.debug("Retrieved data from POST request")
315319
return response
316320

321+
@property
322+
def _default_form_values(self):
323+
324+
if self._default_form_values_ is None:
325+
response = self._request("GET", url=self.FORM_URL, data={},
326+
timeout=self.TIMEOUT, cache=True)
327+
bs = BeautifulSoup(response.text)
328+
self._default_form = form = bs.find('form')
329+
self._default_form_values_ = self._get_default_form_values(form)
330+
331+
return self._default_form_values_
332+
317333
def _get_default_form_values(self, form):
318334
"""Return the already selected values of a given form (a BeautifulSoup
319335
form node) as a dict.

0 commit comments

Comments
 (0)