Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def from_sample_name(cls, sample_name, product_kind=eccodes.CODES_PRODUCT_GRIB, **kwargs):
codes_id = eccodes.codes_new_from_samples(sample_name, product_kind)
return cls(codes_id=codes_id, **kwargs)
def __setitem__(self, item, value):
# type: (str, T.Any) -> None
try:
return self.message_set(item, value)
except eccodes.GribInternalError as ex:
if self.errors == 'ignore':
pass
elif self.errors == 'raise':
raise KeyError("failed to set key %r to %r" % (item, value))
else:
if isinstance(ex, eccodes.ReadOnlyError):
# Very noisy error when trying to set computed keys
pass
else:
LOG.warning("failed to set key %r to %r", item, value)
def message_grib_keys(self, namespace=None):
# type: (str) -> T.Generator[str, None, None]
iterator = eccodes.codes_keys_iterator_new(self.codes_id, namespace=namespace)
while eccodes.codes_keys_iterator_next(iterator):
yield eccodes.codes_keys_iterator_get_name(iterator)
eccodes.codes_keys_iterator_delete(iterator)
def message_grib_keys(self, namespace=None):
# type: (str) -> T.Generator[str, None, None]
iterator = eccodes.codes_keys_iterator_new(self.codes_id, namespace=namespace)
while eccodes.codes_keys_iterator_next(iterator):
yield eccodes.codes_keys_iterator_get_name(iterator)
eccodes.codes_keys_iterator_delete(iterator)
def message_grib_keys(self, namespace=None):
# type: (str) -> T.Generator[str, None, None]
iterator = eccodes.codes_keys_iterator_new(self.codes_id, namespace=namespace)
while eccodes.codes_keys_iterator_next(iterator):
yield eccodes.codes_keys_iterator_get_name(iterator)
eccodes.codes_keys_iterator_delete(iterator)
def __setitem__(self, item, value):
# type: (str, T.Any) -> None
try:
return self.message_set(item, value)
except eccodes.GribInternalError as ex:
if self.errors == 'ignore':
pass
elif self.errors == 'raise':
raise KeyError("failed to set key %r to %r" % (item, value))
else:
if isinstance(ex, eccodes.ReadOnlyError):
# Very noisy error when trying to set computed keys
pass
else:
LOG.warning("failed to set key %r to %r", item, value)
import io
import logging
import os
import pickle
import typing as T
import attr
import numpy as np
# select between using the external ecCodes bindings or the internal implementation
if os.environ.get('CFGRIB_USE_EXTERNAL_ECCODES_BINDINGS'):
import eccodes
else:
from . import bindings as eccodes
eccodes_version = eccodes.codes_get_api_version()
LOG = logging.getLogger(__name__)
_MARKER = object()
#
# No explicit support for MULTI-FIELD at Message level.
#
# eccodes.codes_grib_multi_support_on()
@attr.attrs()
class Message(collections.abc.MutableMapping):
"""Dictionary-line interface to access Message headers."""
codes_id = attr.attrib()
encoding = attr.attrib(default='ascii', type=str)