diff --git a/astroquery/nrao/core.py b/astroquery/nrao/core.py index 68e0bf37b6..d2574d4b73 100644 --- a/astroquery/nrao/core.py +++ b/astroquery/nrao/core.py @@ -40,7 +40,12 @@ def wrapper(*args, **kwargs): if telescope_config.upper() not in Nrao.telescope_config: raise ValueError("'telescope_config' must be one of {!s}" .format(Nrao.telescope_config)) - if obs_band.upper() not in Nrao.obs_bands: + if isinstance(obs_band, (list, tuple)): + for ob in obs_band: + if ob not in Nrao.obs_bands: + raise ValueError("'obs_band' must be one of {!s}" + .format(Nrao.obs_bands)) + elif obs_band not in Nrao.obs_bands: raise ValueError("'obs_band' must be one of {!s}" .format(Nrao.obs_bands)) if sub_array not in Nrao.subarrays and sub_array != 'all': @@ -69,7 +74,7 @@ class NraoClass(QueryWithLogin): telescope_config = ['ALL', 'A', 'AB', 'BnA', 'B', 'BC', 'CnB', 'C', 'CD', 'DnC', 'D', 'DA'] - obs_bands = ['ALL', '4', 'P', 'L', 'S', 'C', 'X', 'U', 'K', 'Ka', 'Q', 'W'] + obs_bands = ['ALL', 'all', '4', 'P', 'L', 'S', 'C', 'X', 'U', 'K', 'Ka', 'Q', 'W'] subarrays = ['ALL', 1, 2, 3, 4, 5] @@ -167,6 +172,12 @@ def _args_to_payload(self, **kwargs): else: freq_str = "" + obs_bands = kwargs.get('obs_band', 'all') + if isinstance(obs_bands, six.string_types): + obs_bands = obs_bands.upper() + elif isinstance(obs_bands, (list,tuple)): + obs_bands = [x.upper() for x in obs_bands] + request_payload = dict( QUERYTYPE=kwargs.get('querytype', "OBSSUMMARY"), PROTOCOL=kwargs.get('protocol',"VOTable-XML"), @@ -195,7 +206,7 @@ def _args_to_payload(self, **kwargs): SRAD=str( commons.parse_radius(kwargs.get('radius', "1.0m")).deg) + 'd', TELESCOPE_CONFIG=kwargs.get('telescope_config', 'all').upper(), - OBS_BANDS=kwargs.get('obs_band', 'all').upper(), + OBS_BANDS=obs_bands, SUBARRAY=kwargs.get('subarray', 'all').upper(), SOURCE_ID=kwargs.get('source_id', ''), SRC_SEARCH_TYPE='SIMBAD or NED', @@ -332,12 +343,15 @@ def query_async(self, response.raise_for_status() - if not response.content: + # fail if response is entirely whitespace or if it is empty + if not response.content.strip(): if cache: last_pickle = self._last_query.hash()+".pickle" cache_fn = os.path.join(self.cache_location, last_pickle) os.remove(cache_fn) if retry > 0: + log.warning("Query resulted in an empty result. Retrying {0}" + " more times.".format(retry)) self.query_async(cache=cache, retry=retry-1, **kwargs) else: raise ValueError("Query resulted in an empty result but " @@ -351,6 +365,7 @@ def query_region_async(self, coordinates, radius=1 * u.deg, end_date="", freq_low=None, freq_up=None, telescope_config='all', obs_band='all', querytype='OBSSUMMARY', sub_array='all', + project_code=None, protocol='VOTable-XML', retry=False, get_query_payload=False, cache=True):