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 00000000..8bec2ef0 Binary files /dev/null and b/tests/data/tilde_shortname.grib differ 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