From 18ac2ecd862c211872fc6c21d3be934e9b7cbb40 Mon Sep 17 00:00:00 2001 From: Sam Van Kooten Date: Tue, 27 Dec 2022 17:26:30 -0700 Subject: [PATCH 1/2] Ensure FITS files are closed after reading --- reproject/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reproject/utils.py b/reproject/utils.py index d16619207..72ac23eb6 100644 --- a/reproject/utils.py +++ b/reproject/utils.py @@ -22,8 +22,8 @@ def parse_input_data(input_data, hdu_in=None): """ if isinstance(input_data, str): - # NOTE: File handler is not closed here. - return parse_input_data(fits.open(input_data), hdu_in=hdu_in) + with fits.open(input_data) as hdul: + return parse_input_data(hdul, hdu_in=hdu_in) elif isinstance(input_data, HDUList): if hdu_in is None: if len(input_data) > 1: From 6fbceb0063c9463e6e07ad1537d79463e4d1ed35 Mon Sep 17 00:00:00 2001 From: Sam Van Kooten Date: Tue, 27 Dec 2022 17:27:10 -0700 Subject: [PATCH 2/2] Expand testing of parse_input_data to cover returned WCS --- reproject/tests/test_utils.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/reproject/tests/test_utils.py b/reproject/tests/test_utils.py index 51d9dfc53..730128958 100644 --- a/reproject/tests/test_utils.py +++ b/reproject/tests/test_utils.py @@ -15,11 +15,18 @@ def test_parse_input_data(tmpdir): data = np.arange(200).reshape((10, 20)) - hdu = fits.ImageHDU(data) + hdu = fits.ImageHDU(data, header) + + # We want to test that the WCS is being parsed and output correctly in each + # of these cases. WCS doesn't seem to implement __eq__, so we convert the + # output WCS to a Header and compare that. Here we convert the original + # Header to a WCS and back to ensure an apples-to-apples comparision. + ref_coord_system = WCS(header).to_header() # As HDU array, coordinate_system = parse_input_data(hdu) np.testing.assert_allclose(array, data) + assert coordinate_system.to_header() == ref_coord_system # As filename filename = tmpdir.join("test.fits").strpath @@ -33,15 +40,18 @@ def test_parse_input_data(tmpdir): array, coordinate_system = parse_input_data(filename, hdu_in=1) np.testing.assert_allclose(array, data) + assert coordinate_system.to_header() == ref_coord_system # As array, header array, coordinate_system = parse_input_data((data, header)) np.testing.assert_allclose(array, data) + assert coordinate_system.to_header() == ref_coord_system # As array, WCS wcs = WCS(hdu.header) array, coordinate_system = parse_input_data((data, wcs)) np.testing.assert_allclose(array, data) + assert coordinate_system is wcs ndd = NDData(data, wcs=wcs) array, coordinate_system = parse_input_data(ndd)