From 9d7cad0ea18722ce3cce4f2522deca924de853c6 Mon Sep 17 00:00:00 2001 From: David Hoese Date: Fri, 15 Nov 2019 09:38:15 -0600 Subject: [PATCH] Fix HDF4 handling of scalar attributes --- satpy/readers/hdf4_utils.py | 7 +++++-- satpy/tests/reader_tests/test_hdf4_utils.py | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/satpy/readers/hdf4_utils.py b/satpy/readers/hdf4_utils.py index cb4f979e74..0d828f3d6e 100644 --- a/satpy/readers/hdf4_utils.py +++ b/satpy/readers/hdf4_utils.py @@ -68,13 +68,16 @@ def __init__(self, filename, filename_info, filetype_info): def _collect_attrs(self, name, attrs): for key, value in six.iteritems(attrs): value = np.squeeze(value) - if issubclass(value.dtype.type, np.string_) and not value.shape: - value = np.asscalar(value) + if issubclass(value.dtype.type, (np.string_, np.unicode_)) and not value.shape: + value = value.item() # convert to scalar if not isinstance(value, str): # python 3 - was scalar numpy array of bytes # otherwise python 2 - scalar numpy array of 'str' value = value.decode() self.file_content["{}/attr/{}".format(name, key)] = value + elif not value.shape: + # convert to a scalar + self.file_content["{}/attr/{}".format(name, key)] = value.item() else: self.file_content["{}/attr/{}".format(name, key)] = value diff --git a/satpy/tests/reader_tests/test_hdf4_utils.py b/satpy/tests/reader_tests/test_hdf4_utils.py index 2f05aefda4..9c23692ae7 100644 --- a/satpy/tests/reader_tests/test_hdf4_utils.py +++ b/satpy/tests/reader_tests/test_hdf4_utils.py @@ -109,9 +109,12 @@ def test_all_basic(self): self.assertEqual(attrs.get('test_attr_int'), 0) self.assertEqual(attrs.get('test_attr_float'), 1.2) + self.assertIsInstance(file_handler['/attr/test_attr_str'], str) self.assertEqual(file_handler['/attr/test_attr_str'], 'test_string') # self.assertEqual(file_handler['/attr/test_attr_str_arr'], 'test_string2') + self.assertIsInstance(file_handler['/attr/test_attr_int'], int) self.assertEqual(file_handler['/attr/test_attr_int'], 0) + self.assertIsInstance(file_handler['/attr/test_attr_float'], float) self.assertEqual(file_handler['/attr/test_attr_float'], 1.2) self.assertIsInstance(file_handler.get('ds1_f'), xr.DataArray)