From 3e615a5e8a373754d1db3eb923de0a4b1afad1d4 Mon Sep 17 00:00:00 2001 From: Martin Raspaud Date: Mon, 8 Oct 2018 20:28:56 +0200 Subject: [PATCH 1/3] Fix saving a dataset with a prerequisites attrs to netcdf --- satpy/writers/cf_writer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/satpy/writers/cf_writer.py b/satpy/writers/cf_writer.py index 520fb4317c..ed7d786998 100644 --- a/satpy/writers/cf_writer.py +++ b/satpy/writers/cf_writer.py @@ -191,6 +191,8 @@ def da2cf(dataarray, epoch=EPOCH): new_data['y'].attrs['units'] = 'm' new_data.attrs.setdefault('long_name', new_data.attrs.pop('name')) + if 'prerequisites' in new_data.attrs: + new_data.attrs['prerequisites'] = [str(prereq) for prereq in new_data.attrs['prerequisites']] return new_data def save_dataset(self, dataset, filename=None, fill_value=None, **kwargs): From 3cd362c04b480a59df1a962ff3a0bf5d752ae7fa Mon Sep 17 00:00:00 2001 From: Martin Raspaud Date: Tue, 9 Oct 2018 19:01:15 +0200 Subject: [PATCH 2/3] Add test for prerequisite recording in cf writer --- satpy/tests/writer_tests/test_cf.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/satpy/tests/writer_tests/test_cf.py b/satpy/tests/writer_tests/test_cf.py index b890caeda1..7d2ea6af7b 100644 --- a/satpy/tests/writer_tests/test_cf.py +++ b/satpy/tests/writer_tests/test_cf.py @@ -24,6 +24,7 @@ import os import sys from datetime import datetime +from satpy import DatasetID import numpy as np @@ -49,7 +50,8 @@ def test_save_array(self): end_time = datetime(2018, 5, 30, 10, 15) scn['test-array'] = xr.DataArray([1, 2, 3], attrs=dict(start_time=start_time, - end_time=end_time)) + end_time=end_time, + prerequisites=[DatasetID('hej')])) try: handle, filename = tempfile.mkstemp() os.close(handle) @@ -57,6 +59,11 @@ def test_save_array(self): import h5netcdf as nc4 with nc4.File(filename) as f: self.assertTrue(all(f['test-array'][:] == [1, 2, 3])) + expected_prereq = ("DatasetID(name='hej', wavelength=None, " + "resolution=None, polarization=None, " + "calibration=None, level=None, modifiers=())") + self.assertEqual(f['test-array'].attrs['prerequisites'][0], + expected_prereq) finally: os.remove(filename) From 0750e5c33317fd6e5db76feb63c57485e972da73 Mon Sep 17 00:00:00 2001 From: Martin Raspaud Date: Tue, 9 Oct 2018 19:41:06 +0200 Subject: [PATCH 3/3] Convert prerequisite string before saving to netcdf --- satpy/tests/writer_tests/test_cf.py | 2 +- satpy/writers/cf_writer.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/satpy/tests/writer_tests/test_cf.py b/satpy/tests/writer_tests/test_cf.py index 7d2ea6af7b..e99a2ec965 100644 --- a/satpy/tests/writer_tests/test_cf.py +++ b/satpy/tests/writer_tests/test_cf.py @@ -63,7 +63,7 @@ def test_save_array(self): "resolution=None, polarization=None, " "calibration=None, level=None, modifiers=())") self.assertEqual(f['test-array'].attrs['prerequisites'][0], - expected_prereq) + np.string_(expected_prereq)) finally: os.remove(filename) diff --git a/satpy/writers/cf_writer.py b/satpy/writers/cf_writer.py index ed7d786998..3e3edfc467 100644 --- a/satpy/writers/cf_writer.py +++ b/satpy/writers/cf_writer.py @@ -26,6 +26,7 @@ from datetime import datetime import xarray as xr +import numpy as np from pyresample.geometry import AreaDefinition, SwathDefinition from satpy.writers import Writer @@ -192,7 +193,7 @@ def da2cf(dataarray, epoch=EPOCH): new_data.attrs.setdefault('long_name', new_data.attrs.pop('name')) if 'prerequisites' in new_data.attrs: - new_data.attrs['prerequisites'] = [str(prereq) for prereq in new_data.attrs['prerequisites']] + new_data.attrs['prerequisites'] = [np.string_(str(prereq)) for prereq in new_data.attrs['prerequisites']] return new_data def save_dataset(self, dataset, filename=None, fill_value=None, **kwargs):