From b047a25071ed8d412e4bdd164a744ffd14171eb9 Mon Sep 17 00:00:00 2001 From: Sandor Kertesz Date: Tue, 8 Oct 2024 13:09:26 +0100 Subject: [PATCH] Fix unknown param in grib namespaces (#477) * Fix unknown param in grib namespaces --- docs/release_notes/version_0.10_updates.rst | 10 ++++++++++ src/earthkit/data/readers/grib/metadata.py | 9 ++++++++- tests/grib/test_grib_metadata.py | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/release_notes/version_0.10_updates.rst b/docs/release_notes/version_0.10_updates.rst index 778d12c8..d085b94f 100644 --- a/docs/release_notes/version_0.10_updates.rst +++ b/docs/release_notes/version_0.10_updates.rst @@ -1,6 +1,16 @@ Version 0.10 Updates ///////////////////////// +Version 0.10.7 +=============== + +Fixes +++++++ + +- When "param" or "shortName" in a namespace is "~" in the GRIB header :func:`metadata` now returns the value of "paramId" as a str for both these keys in the relevant namespaces. Previously "~" was returned. + + +Version 0.9.0 Version 0.10.4 =============== diff --git a/src/earthkit/data/readers/grib/metadata.py b/src/earthkit/data/readers/grib/metadata.py index 297d7199..b921c79c 100644 --- a/src/earthkit/data/readers/grib/metadata.py +++ b/src/earthkit/data/readers/grib/metadata.py @@ -415,7 +415,14 @@ def as_namespace(self, namespace=None): if namespace == "default" or namespace == "": namespace = None - return self._handle.as_namespace(namespace) + r = self._handle.as_namespace(namespace) + + # special case when "param" is "~". + if r is not None: + for k in ("shortName", "param"): + if k in r and r[k] == "~": + r[k] = self.get(k) + return r @property def geography(self): diff --git a/tests/grib/test_grib_metadata.py b/tests/grib/test_grib_metadata.py index 8a18cea5..ed01662e 100644 --- a/tests/grib/test_grib_metadata.py +++ b/tests/grib/test_grib_metadata.py @@ -558,6 +558,9 @@ def test_grib_tilde_shortname(fl_type, array_backend): assert f[0].metadata("paramId", astype=int) == 106 assert f[0].metadata("param") == "106" + assert f[0].metadata(namespace="mars")["param"] == "106" + assert f[0].metadata(namespace="parameter")["shortName"] == "106" + if __name__ == "__main__": from earthkit.data.testing import main