From 168321bdef2a9ac2b10157dbc27b97eed27c76a7 Mon Sep 17 00:00:00 2001 From: Stephan Finkensieper Date: Fri, 25 Oct 2019 13:54:56 +0000 Subject: [PATCH] Fix handling of header attributes in CF writer Header attributes equal to zero were not included in the global nc attributes. --- satpy/tests/writer_tests/test_cf.py | 13 +++++++++---- satpy/writers/cf_writer.py | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/satpy/tests/writer_tests/test_cf.py b/satpy/tests/writer_tests/test_cf.py index 6e47b0f231..d3af850ace 100644 --- a/satpy/tests/writer_tests/test_cf.py +++ b/satpy/tests/writer_tests/test_cf.py @@ -324,14 +324,19 @@ def test_header_attrs(self): end_time=end_time)) with TempFile() as filename: header_attrs = {'sensor': 'SEVIRI', - 'orbit': None} + 'orbit': None, + 'empty': [], + 'num': 1.1, + 'zero': 0} scn.save_datasets(filename=filename, header_attrs=header_attrs, writer='cf') with xr.open_dataset(filename) as f: - self.assertTrue(f.attrs['sensor'] == 'SEVIRI') - self.assertTrue('sensor' in f.attrs.keys()) - self.assertTrue('orbit' not in f.attrs.keys()) + self.assertEqual(f.attrs['sensor'], 'SEVIRI') + self.assertEqual(f.attrs['num'], 1.1) + self.assertEqual(f.attrs['zero'], 0) + self.assertNotIn('orbit', f.attrs) + self.assertNotIn('empty', f.attrs) def get_test_attrs(self): """Create some dataset attributes for testing purpose. diff --git a/satpy/writers/cf_writer.py b/satpy/writers/cf_writer.py index eaa7e7da86..e94ab8c043 100644 --- a/satpy/writers/cf_writer.py +++ b/satpy/writers/cf_writer.py @@ -638,7 +638,8 @@ def save_datasets(self, datasets, filename=None, groups=None, header_attrs=None, root = xr.Dataset({}, attrs={'history': 'Created by pytroll/satpy on {}'.format(datetime.utcnow())}) if header_attrs is not None: - root.attrs.update({k: v for k, v in header_attrs.items() if v}) + root.attrs.update({k: v for k, v in header_attrs.items() + if (np.isscalar(v) and v is not None) or v}) if groups is None: # Groups are not CF-1.7 compliant root.attrs['Conventions'] = CF_VERSION