Source code for astroquery.gama.core

# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""Download GAMA data"""
import re
import os
from astropy.table import Table
from ..query import BaseQuery
from ..utils import commons, async_to_sync

__all__ = ['GAMA', 'GAMAClass']


[docs]@async_to_sync class GAMAClass(BaseQuery): """ TODO: document """ request_url = 'http://www.gama-survey.org/dr3/query/' timeout = 60
[docs] def query_sql_async(self, *args, **kwargs): """ Query the GAMA database Returns ------- url : The URL of the FITS file containing the results. """ payload = self._parse_args(*args, **kwargs) if kwargs.get('get_query_payload'): return payload result = self._request("POST", url=self.request_url, data=payload, timeout=self.timeout) result_url_relative = find_data_url(result.text) result_url = os.path.join(self.request_url, result_url_relative) return result_url
def _parse_args(self, sql_query): """ Parameters ---------- sql_query : str An SQL query Returns ------- payload_dict : Requests payload in a dictionary """ payload = {'query': sql_query, 'format': 'fits'} return payload def _parse_result(self, result, verbose=False, **kwargs): """ Use get_gama_datafile to download a result URL """ return get_gama_datafile(result)
GAMA = GAMAClass() def get_gama_datafile(result, **kwargs): """Turn a URL into an HDUList object.""" fitsfile = commons.FileContainer(result, encoding='binary', **kwargs) hdulist = fitsfile.get_fits() return Table(hdulist[1].data) def find_data_url(result_page): """Find and return the URL of the data, given a results page.""" result_relative_url_re = re.compile(r'Download the result file: ' r'<a href="(\.\./tmp/.*?)">') re_result = result_relative_url_re.findall(result_page) if len(re_result) == 0: raise ValueError("Results did not contain a result url") return re_result[0]