diff --git a/astroquery/alfalfa/tests/test_alfalfa.py b/astroquery/alfalfa/tests/test_alfalfa.py index df767d1823..12de35411f 100644 --- a/astroquery/alfalfa/tests/test_alfalfa.py +++ b/astroquery/alfalfa/tests/test_alfalfa.py @@ -38,7 +38,9 @@ def patch_get_readable_fileobj(request): @contextmanager def get_readable_fileobj_mockreturn(filename, **kwargs): file_obj = data_path(DATA_FILES['spectrum']) # TODO: add images option - yield open(file_obj, 'rb') # read as bytes, assuming FITS + # read as bytes, assuming FITS + with open(file_obj, 'rb') as inputfile: + yield inputfile mp = request.getfixturevalue("monkeypatch") diff --git a/astroquery/besancon/tests/test_besancon.py b/astroquery/besancon/tests/test_besancon.py index bf031f5977..06ef8379af 100644 --- a/astroquery/besancon/tests/test_besancon.py +++ b/astroquery/besancon/tests/test_besancon.py @@ -65,11 +65,11 @@ def get_readable_fileobj_mockreturn(filename, **kwargs): if isinstance(filename, str): if '1376235131.430670' in filename: is_binary = kwargs.get('encoding', None) == 'binary' - file_obj = open(data_path('1376235131.430670.resu'), - "r" + ('b' if is_binary else '')) + with open(data_path('1376235131.430670.resu'), "r" + ('b' if is_binary else '')) as file_obj: + yield file_obj else: file_obj = filename - yield file_obj + yield file_obj mp = request.getfixturevalue("monkeypatch") diff --git a/astroquery/cadc/tests/test_cadctap.py b/astroquery/cadc/tests/test_cadctap.py index 8497b3792c..c31ae6c5bf 100644 --- a/astroquery/cadc/tests/test_cadctap.py +++ b/astroquery/cadc/tests/test_cadctap.py @@ -177,7 +177,9 @@ def raise_for_status(self): class CapabilitiesResponse: def __init__(self): caps_file = data_path('tap_caps.xml') - self.text = open(caps_file, 'r').read() + with open(caps_file, 'r') as infile: + text = infile.read() + self.text = text def raise_for_status(self): pass diff --git a/astroquery/cadc/tests/test_cadctap_remote.py b/astroquery/cadc/tests/test_cadctap_remote.py index 57b773a568..39aae525e8 100644 --- a/astroquery/cadc/tests/test_cadctap_remote.py +++ b/astroquery/cadc/tests/test_cadctap_remote.py @@ -66,7 +66,8 @@ def test_query_region(self): assert len(result) == len(result2[result2['collection'] == 'CFHT']) # search for a target - results = cadc.query_region(SkyCoord.from_name('M31'), radius=0.016) + with pytest.warns(UserWarning, match='Radius should be of '): + results = cadc.query_region(SkyCoord.from_name('M31'), radius=0.016) assert len(results) > 20 def test_query_name(self): diff --git a/astroquery/casda/tests/test_casda.py b/astroquery/casda/tests/test_casda.py index 6d0cdd629c..2beb3dc737 100644 --- a/astroquery/casda/tests/test_casda.py +++ b/astroquery/casda/tests/test_casda.py @@ -11,6 +11,7 @@ import astropy.units as u from astropy.table import Table, Column from astropy.io.votable import parse +from astropy.io.votable.exceptions import W03, W50 from astroquery import log import numpy as np @@ -269,7 +270,8 @@ def test_query_region_async_box(patch_get): def test_filter_out_unreleased(): - all_records = parse(data_path('partial_unreleased.xml'), verify='warn').get_first_table().to_table() + with pytest.warns(W03): + all_records = parse(data_path('partial_unreleased.xml'), verify='warn').get_first_table().to_table() assert all_records[0]['obs_release_date'] == '2017-08-02T03:51:19.728Z' assert all_records[1]['obs_release_date'] == '2218-01-02T16:51:00.728Z' assert all_records[2]['obs_release_date'] == '' @@ -331,7 +333,8 @@ def test_stage_data(patch_get): casda = Casda() fake_login(casda, USERNAME, PASSWORD) casda.POLL_INTERVAL = 1 - urls = casda.stage_data(table, verbose=True) + with pytest.warns(W50, match="Invalid unit string 'pixels'"): + urls = casda.stage_data(table, verbose=True) assert urls == ['http://casda.csiro.au/download/web/111-000-111-000/askap_img.fits.checksum', 'http://casda.csiro.au/download/web/111-000-111-000/askap_img.fits'] @@ -348,7 +351,8 @@ def test_cutout(patch_get): casda = Casda() fake_login(casda, USERNAME, PASSWORD) casda.POLL_INTERVAL = 1 - urls = casda.cutout(table, coordinates=centre, radius=radius, verbose=True) + with pytest.warns(W50, match="Invalid unit string 'pixels'"): + urls = casda.cutout(table, coordinates=centre, radius=radius, verbose=True) assert urls == ['http://casda.csiro.au/download/web/111-000-111-000/cutout.fits.checksum', 'http://casda.csiro.au/download/web/111-000-111-000/cutout.fits'] @@ -367,7 +371,8 @@ def test_cutout_no_args(patch_get): casda.POLL_INTERVAL = 1 with pytest.raises(ValueError, match=r"Please provide cutout parameters such as coordinates, band or channel\.") as excinfo: - casda.cutout(table) + with pytest.warns(W50, match="Invalid unit string 'pixels'"): + casda.cutout(table) def test_cutout_unauthorised(patch_get): diff --git a/astroquery/exoplanet_orbit_database/exoplanet_orbit_database.py b/astroquery/exoplanet_orbit_database/exoplanet_orbit_database.py index 2ea35bcb42..0ec703cbb5 100644 --- a/astroquery/exoplanet_orbit_database/exoplanet_orbit_database.py +++ b/astroquery/exoplanet_orbit_database/exoplanet_orbit_database.py @@ -1,6 +1,7 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst import json import os +import warnings from astropy.utils.data import download_file from astropy.io import ascii @@ -30,9 +31,9 @@ def __init__(self): def param_units(self): if self._param_units is None: module_dir = os.path.dirname(os.path.abspath(__file__)) - units_file = open(os.path.join(module_dir, 'data', - 'exoplanet_orbit_database_units.json')) - self._param_units = json.load(units_file) + filename = os.path.join(module_dir, 'data', 'exoplanet_orbit_database_units.json') + with open(filename) as units_file: + self._param_units = json.load(units_file) return self._param_units @@ -82,7 +83,11 @@ def get_table(self, cache=True, show_progress=True, table_path=None): except ValueError: print(f"WARNING: Unit {self.param_units[col]} not recognised") - self._table = QTable(exoplanets_table) + # Masked quantities are not supported in older astropy, warnings are raised for = 4 # shown as '..'; ignore @@ -362,7 +361,7 @@ def list_tables(self, mission=None, dataset=None, cache=True): response = self._request('GET', url, timeout=self.TIMEOUT, cache=cache) - root = BeautifulSoup(response.text) + root = BeautifulSoup(response.text, 'html5lib') return [tr.find('td').string for tr in root.findAll('tr')[1:]] # Unfortunately, the URL construction for each data set is different, and diff --git a/astroquery/ipac/irsa/sha/tests/test_sha.py b/astroquery/ipac/irsa/sha/tests/test_sha.py index 367891eb82..d162c4e002 100644 --- a/astroquery/ipac/irsa/sha/tests/test_sha.py +++ b/astroquery/ipac/irsa/sha/tests/test_sha.py @@ -22,8 +22,8 @@ def data_path(filename): def get_mockreturn(url, params=None, stream=False, timeout=10, **kwargs): if stream: filename = data_path(DATA_FILES['img']) - return MockResponse(open(filename, 'rb').read(), - content_type='image/fits', **kwargs) + with open(filename, 'rb') as infile: + return MockResponse(infile.read(), content_type='image/fits', **kwargs) elif params['RA'] == 163.6136: filename = data_path(DATA_FILES['pos_t']) elif params['NAIFID'] == 2003226: diff --git a/astroquery/ipac/ned/tests/test_ned.py b/astroquery/ipac/ned/tests/test_ned.py index 71fefaa8c0..d16fbe33a7 100644 --- a/astroquery/ipac/ned/tests/test_ned.py +++ b/astroquery/ipac/ned/tests/test_ned.py @@ -1,6 +1,7 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst import os +from contextlib import contextmanager from numpy import testing as npt import pytest @@ -47,12 +48,14 @@ def patch_get(request): @pytest.fixture def patch_get_readable_fileobj(request): + @contextmanager def get_readable_fileobj_mockreturn(filename, cache=True, encoding=None, show_progress=True): # Need to read FITS files with binary encoding: should raise error # otherwise assert encoding == 'binary' - return open(data_path(DATA_FILES['image']), 'rb') + with open(data_path(DATA_FILES['image']), 'rb') as infile: + yield infile mp = request.getfixturevalue("monkeypatch") @@ -138,7 +141,8 @@ def test_photometry(patch_get): def test_extract_image_urls(): - html_in = open(data_path(DATA_FILES['extract_urls']), 'r').read() + with open(data_path(DATA_FILES['extract_urls']), 'r') as infile: + html_in = infile.read() url_list = ned.core.Ned._extract_image_urls(html_in) assert len(url_list) == 5 for url in url_list: diff --git a/astroquery/ipac/nexsci/nasa_exoplanet_archive/core.py b/astroquery/ipac/nexsci/nasa_exoplanet_archive/core.py index 064789a89b..d59ca84e41 100644 --- a/astroquery/ipac/nexsci/nasa_exoplanet_archive/core.py +++ b/astroquery/ipac/nexsci/nasa_exoplanet_archive/core.py @@ -572,7 +572,16 @@ def _fix_units(self, data): column_data.append(data[col]) # Build the new `QTable` and copy over the data masks if there are any - result = QTable(column_data, names=column_names, masked=len(column_masks) > 0) + # Some units cannot be used for MaskedQuantities, we catch the specific UserWarning + # about them here as the end user can do nothing about this + with warnings.catch_warnings(): + colnames_to_ignore = ['surface_gravity', 'st_lum', 'st_lumerr1', 'st_lumerr2', + 'st_logg', 'st_loggerr1', 'st_loggerr2'] + for column in colnames_to_ignore: + warnings.filterwarnings('ignore', message=f'column {column} has a unit but', + category=UserWarning) + result = QTable(column_data, names=column_names, masked=len(column_masks) > 0) + for key, mask in column_masks.items(): result[key].mask = mask diff --git a/astroquery/mast/tests/test_mast.py b/astroquery/mast/tests/test_mast.py index 842e20d96f..2ebe5985a9 100644 --- a/astroquery/mast/tests/test_mast.py +++ b/astroquery/mast/tests/test_mast.py @@ -614,7 +614,7 @@ def test_catalogs_query_criteria(patch_post): assert isinstance(result, Table) with pytest.raises(InvalidQueryError) as invalid_query: - mast.Catalogs.query_criteria(catalog="Tic", objectName="M10") + mast.Catalogs.query_criteria(catalog="Tic", objectname="M10") assert "non-positional" in str(invalid_query.value) diff --git a/astroquery/mpc/core.py b/astroquery/mpc/core.py index 4f48d1d486..7811a8091a 100644 --- a/astroquery/mpc/core.py +++ b/astroquery/mpc/core.py @@ -1302,7 +1302,12 @@ def _parse_result(self, result, **kwargs): data['epoch'].unit = u.d data['RA'].unit = u.deg data['DEC'].unit = u.deg - data['mag'].unit = u.mag + + # Masked quantities are not supported in older astropy, warnings are raised for =4.1