Skip to content

FunctionNotImplementedError when getting gridSpec from grib metadata #679

@HCookie

Description

@HCookie

What happened?

After updating to the new eccodes 2.41.0 running

data.metadata("gridSpec", default=None)

results in a FunctionNotImplementedError being raised from gribapi. In prior versions, the default was properly used, and returned.

What are the steps to reproduce the bug?

With eccodes==2.41.0

import earthkit.data as ekd
data = ekd.from_source('sample', 'aifs-single-mse-example.grib')

data.sel(param = '2t', step = 24).metadata("gridSpec", default=None)

Version

0.13.3

Platform (OS and architecture)

ATOS

Relevant log output

---------------------------------------------------------------------------
FunctionNotImplementedError               Traceback (most recent call last)
Cell In[4], line 1
----> 1 aifs.sel(param = '2t', step = 24).metadata("gridSpec", default=None)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/core/fieldlist.py:1297, in FieldList.metadata(self, *args, **kwargs)
   1295 result = []
   1296 for s in self:
-> 1297     result.append(s.metadata(*args, **kwargs))
   1298 return result

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/core/fieldlist.py:623, in Field.metadata(self, astype, remapping, patches, *keys, **kwargs)
    619 raise_on_missing = "default" not in kwargs
    620 default = kwargs.pop("default", None)
    622 r = [
--> 623     self._metadata.get(
    624         k,
    625         default=default,
    626         astype=kt,
    627         raise_on_missing=raise_on_missing,
    628         **kwargs,
    629     )
    630     for k, kt in zip(key, astype)
    631 ]
    633 if key_arg_type is str:
    634     return r[0]

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/core/metadata.py:119, in MetadataCacheHandler.cache_get.<locals>.wrapped(self, key, default, astype, raise_on_missing)
    116 if cache_id in self._cache:
    117     return self._cache[cache_id]
--> 119 v = func(self, key, default=default, astype=astype, raise_on_missing=raise_on_missing)
    120 self._cache[cache_id] = v
    121 return v

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/core/metadata.py:81, in MetadataAccessor.__call__.<locals>.wrapped(cls, key, *args, **kwargs)
     79 if key in self:
     80     return self.get(cls, key, *args, **kwargs)
---> 81 return func(cls, key, *args, **kwargs)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/readers/grib/metadata.py:384, in GribMetadata.get(self, key, default, astype, raise_on_missing)
    380     key = key[5:]
    382 key = _key_name(key)
--> 384 v = self._handle.get(key, ktype=astype, **_kwargs)
    386 # special case when  "shortName" is "~".
    387 if key == "shortName" and v == "~":

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/readers/grib/codes.py:155, in GribCodesHandle.get(self, name, ktype, **kwargs)
    152 elif name == "md5GridSection":
    153     return self.get_md5GridSection()
--> 155 return super().get(name, ktype, **kwargs)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/earthkit/data/utils/message.py:215, in CodesHandle.get(self, name, ktype, **kwargs)
    212         ktype = CodesHandle.KEY_TYPES[key_type_str]
    214 if "default" in kwargs:
--> 215     return super().get(name, ktype=ktype, **kwargs)
    216 else:
    217     # this will throw if name is not available
    218     return super()._get(name, ktype=ktype)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/eccodes/highlevel/message.py:68, in Message.get(self, name, default, ktype)
     56 """Get the value of a key
     57 
     58 Parameters
   (...)     65 ktype: type
     66     Request a specific type for the value. Overrides the suffix in ``name``"""
     67 try:
---> 68     return self._get(name, ktype=ktype)
     69 except KeyError:
     70     return default

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/eccodes/highlevel/message.py:53, in Message._get(self, name, ktype)
     51 if eccodes.codes_get_size(self._handle, name) > 1:
     52     return eccodes.codes_get_array(self._handle, name, ktype=ktype)
---> 53 return eccodes.codes_get(self._handle, name, ktype=ktype)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/gribapi/gribapi.py:2021, in grib_get(msgid, key, ktype)
   2019     result = grib_get_double(msgid, key)
   2020 elif ktype is str:
-> 2021     result = grib_get_string(msgid, key)
   2022 elif ktype is bytes:
   2023     result = grib_get_string(msgid, key)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/gribapi/gribapi.py:497, in grib_get_string(msgid, key)
    495 length_p = ffi.new("size_t *", length)
    496 err = lib.grib_get_string(h, key.encode(ENC), values, length_p)
--> 497 GRIB_CHECK(err)
    498 return _decode_bytes(values, length_p[0])

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/gribapi/gribapi.py:232, in GRIB_CHECK(errid)
    224 """
    225 Utility function checking the ecCodes error code and raising
    226 an error if that was set.
   (...)    229 @exception CodesInternalError
    230 """
    231 if errid:
--> 232     errors.raise_grib_error(errid)

File /etc/ecmwf/nfs/dh1_2_perm_a/ecm1947/venvs/earthkit/latest/lib/python3.12/site-packages/gribapi/errors.py:381, in raise_grib_error(errid)
    377 def raise_grib_error(errid):
    378     """
    379     Raise the GribInternalError corresponding to ``errid``.
    380     """
--> 381     raise ERROR_MAP[errid](errid)

FunctionNotImplementedError: Function not yet implemented

Accompanying data

No response

Organisation

ECMWF

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions