From bc9c493d645c6db98df4fd744cb1dbffe0b11fb8 Mon Sep 17 00:00:00 2001 From: Pierre de Buyl Date: Thu, 31 Mar 2022 08:57:34 +0200 Subject: [PATCH 1/2] Fix missing 'rb' mode for opening files --- satpy/readers/hrit_base.py | 2 +- satpy/readers/seviri_l1b_hrit.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/satpy/readers/hrit_base.py b/satpy/readers/hrit_base.py index 9f7fd44056..4414b29a00 100644 --- a/satpy/readers/hrit_base.py +++ b/satpy/readers/hrit_base.py @@ -188,7 +188,7 @@ def _get_hd(self, hdr_info): """Open the file, read and get the basic file header info and set the mda dictionary.""" hdr_map, variable_length_headers, text_headers = hdr_info - with utils.generic_open(self.filename) as fp: + with utils.generic_open(self.filename, mode='rb') as fp: total_header_length = 16 while fp.tell() < total_header_length: hdr_id = get_header_id(fp) diff --git a/satpy/readers/seviri_l1b_hrit.py b/satpy/readers/seviri_l1b_hrit.py index 49600999ae..bc898a4c80 100644 --- a/satpy/readers/seviri_l1b_hrit.py +++ b/satpy/readers/seviri_l1b_hrit.py @@ -246,7 +246,7 @@ def __init__(self, filename, filename_info, filetype_info, calib_mode='nominal', def read_prologue(self): """Read the prologue metadata.""" - with utils.generic_open(self.filename) as fp_: + with utils.generic_open(self.filename, mode='rb') as fp_: fp_.seek(self.mda['total_header_length']) data = np.frombuffer(fp_.read(hrit_prologue.itemsize), dtype=hrit_prologue, count=1) self.prologue.update(recarray2dict(data)) @@ -319,7 +319,7 @@ def __init__(self, filename, filename_info, filetype_info, calib_mode='nominal', def read_epilogue(self): """Read the epilogue metadata.""" - with utils.generic_open(self.filename) as fp_: + with utils.generic_open(self.filename, mode='rb') as fp_: fp_.seek(self.mda['total_header_length']) data = np.frombuffer(fp_.read(hrit_epilogue.itemsize), dtype=hrit_epilogue, count=1) self.epilogue.update(recarray2dict(data)) From 9d0bd6adb63c253749849cfd5d29f8c5bfe762eb Mon Sep 17 00:00:00 2001 From: Pierre de Buyl Date: Thu, 31 Mar 2022 14:33:31 +0200 Subject: [PATCH 2/2] add generic_open test with actual files --- satpy/tests/reader_tests/test_utils.py | 42 ++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/satpy/tests/reader_tests/test_utils.py b/satpy/tests/reader_tests/test_utils.py index a10c32a28d..a1b4f59c39 100644 --- a/satpy/tests/reader_tests/test_utils.py +++ b/satpy/tests/reader_tests/test_utils.py @@ -313,6 +313,48 @@ def test_generic_open(self, bz2_mock): assert mock_bz2_open.read.called + def test_generic_open_text(self): + """Test the bz2 file unzipping context manager using dummy text data.""" + dummy_text_data = 'Hello' + dummy_text_filename = 'dummy.txt' + with open(dummy_text_filename, 'w') as f: + f.write(dummy_text_data) + + with hf.generic_open(dummy_text_filename, 'r') as f: + read_text_data = f.read() + + assert read_text_data == dummy_text_data + + dummy_text_filename = 'dummy.txt.bz2' + with hf.bz2.open(dummy_text_filename, 'wt') as f: + f.write(dummy_text_data) + + with hf.generic_open(dummy_text_filename, 'rt') as f: + read_text_data = f.read() + + assert read_text_data == dummy_text_data + + def test_generic_open_binary(self): + """Test the bz2 file unzipping context manager using dummy binary data.""" + dummy_binary_data = b'Hello' + dummy_binary_filename = 'dummy.dat' + with open(dummy_binary_filename, 'wb') as f: + f.write(dummy_binary_data) + + with hf.generic_open(dummy_binary_filename, 'rb') as f: + read_binary_data = f.read() + + assert read_binary_data == dummy_binary_data + + dummy_binary_filename = 'dummy.dat.bz2' + with hf.bz2.open(dummy_binary_filename, 'wb') as f: + f.write(dummy_binary_data) + + with hf.generic_open(dummy_binary_filename, 'rb') as f: + read_binary_data = f.read() + + assert read_binary_data == dummy_binary_data + @mock.patch("os.remove") @mock.patch("satpy.readers.utils.unzip_file", return_value='dummy.txt') def test_pro_reading_gets_unzipped_file(self, fake_unzip_file, fake_remove):