From c22cf8d11c2850a8945adfc2b969360205d4aa60 Mon Sep 17 00:00:00 2001 From: Sandor Kertesz Date: Wed, 17 Jul 2024 13:32:46 +0100 Subject: [PATCH] Use paramId for param when shortName is tilde in GRIB data (#417) * Use paramId for param when shortName is tilde in GRIB data --- docs/release_notes/version_0.9_updates.rst | 10 ++++++++++ src/earthkit/data/readers/grib/metadata.py | 8 +++++++- tests/data/tilde_shortname.grib | Bin 0 -> 240 bytes tests/grib/test_grib_metadata.py | 12 ++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/data/tilde_shortname.grib diff --git a/docs/release_notes/version_0.9_updates.rst b/docs/release_notes/version_0.9_updates.rst index 00c6d7d5..37f5da12 100644 --- a/docs/release_notes/version_0.9_updates.rst +++ b/docs/release_notes/version_0.9_updates.rst @@ -1,9 +1,19 @@ Version 0.9 Updates ///////////////////////// + Version 0.9.1 =============== +Fixes +++++++ + +- When "shortName" is "~" in the GRIB header, :func:`metadata` now returns the value of "paramId" as a str for both the "param" and "shortName" keys. Previously "~" was returned for both these keys. + + +Version 0.9.0 +=============== + New features ++++++++++++++++ diff --git a/src/earthkit/data/readers/grib/metadata.py b/src/earthkit/data/readers/grib/metadata.py index 2998790c..03028c53 100644 --- a/src/earthkit/data/readers/grib/metadata.py +++ b/src/earthkit/data/readers/grib/metadata.py @@ -349,7 +349,13 @@ def _key_name(key): if not raise_on_missing: _kwargs["default"] = default - return self._handle.get(_key_name(key), ktype=astype, **_kwargs) + key = _key_name(key) + + # special case when "shortName" is "~". + v = self._handle.get(key, ktype=astype, **_kwargs) + if key == "shortName" and v == "~": + v = self._handle.get("paramId", ktype=str, **_kwargs) + return v def _is_custom_key(self, key): return key in self.CUSTOM_KEYS diff --git a/tests/data/tilde_shortname.grib b/tests/data/tilde_shortname.grib new file mode 100644 index 0000000000000000000000000000000000000000..8bec2ef040d387e65ba8eabaf509b95cae50bfae GIT binary patch literal 240 zcmZ<{@^oTgc*V%TVA7B@>3>633iAsAPDus^pa>8#hypP(U}WNCVa&)#H317MF#Km= p;9+2Av}kA)ENEcxQ(&0mpe~>;0M*jP0b%eU8!-TEb0C0N3jjIg4^jXC literal 0 HcmV?d00001 diff --git a/tests/grib/test_grib_metadata.py b/tests/grib/test_grib_metadata.py index f5a92d4d..8a18cea5 100644 --- a/tests/grib/test_grib_metadata.py +++ b/tests/grib/test_grib_metadata.py @@ -547,6 +547,18 @@ def test_message(fl_type, array_backend): assert v[:4] == b"GRIB" +@pytest.mark.parametrize("fl_type", ["file"]) +@pytest.mark.parametrize("array_backend", [None]) +def test_grib_tilde_shortname(fl_type, array_backend): + f = load_grib_data("tilde_shortname.grib", fl_type, array_backend, folder="data") + + assert f[0].metadata("shortName") == "106" + assert f[0].metadata("shortName", astype=int) == 0 + assert f[0].metadata("paramId") == 106 + assert f[0].metadata("paramId", astype=int) == 106 + assert f[0].metadata("param") == "106" + + if __name__ == "__main__": from earthkit.data.testing import main