Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Note

Note: The high-level Python interface is currently experimental and may change in a future release. It is provided here to solicit feedback.

...

New Python Classes

In addition to the low-level C-like interface, there are now Python classes that can be used to work with GRIB and BUFR messages in a more object-oriented manner.

...

GribFiles and BufrFiles can be treated mostly as regular files and used as context managers, as can GribMessages/BufrMessages. Each of these classes destructs itself and any child instances appropriately.

Details

...

Exception Class Hierarchy

We have also added a set of exception classes which allow the user to see what kind of exception was raised.  Client code that currently handles exceptions does not need to be changed because the new exceptions are subclassed from the current CodesInternalError.

Details

Tabs Container
directionhorizontal
Tabs Page
titleGribFile
Code Block
languagepy
linenumberstrue
# A GRIB file handle meant for use in a context manager.

# Individual messages can be accessed using the ``next`` method.
# (This is the Iterator Protocol: https://wiki.python.org/moin/Iterator)
# it is also possible to iterate over each message in the file::

# Usage::
>>> with GribFile(filename) as grib:
...     # Print number of messages in file
...     len(grib)
...     # Open all messages in file
...     for msg in grib:
...         print(msg[key_name])
...     len(grib.open_messages)
>>> # When the file is closed, any open messages are closed
>>> len(grib.open_messages)
0
Tabs Page
titleGribMessage
Code Block
languagepy
linenumberstrue
# A GRIB message.

# Each ``GribMessage`` is stored as a key/value pair in a dictionary-like
# structure. It can be used in a context manager or by itself. When the
# ``GribFile`` it belongs to is closed, the ``GribFile`` closes any open
# ``GribMessage``s that belong to it. If a ``GribMessage`` is closed before
# its ``GribFile`` is closed, it informs the ``GribFile`` of its closure.

# Scalar and vector values are set appropriately through the same method.

# ``GribMessage``s can be instantiated from a ``GribFile``, cloned from
# other ``GribMessage``s or taken from samples. Iterating over the members
# of a ``GribFile`` extracts the ``GribMessage``s it contains until the
# ``GribFile`` is exhausted.

# Usage::
>>> with GribFile(filename) as grib:
...     # Iterate through each message in the file
...     for msg in grib:
...         # Access a key from each message
...         print(msg[key_name])
...         # Report number of keys in message
...         len(msg)
...         # Report message size in bytes
...         msg.size()
...         # Report keys in message
...         msg.keys()
...         # Set scalar value
...         msg[scalar_key] = 5
...         # Array values are set transparently
...         msg[array_key] = [1, 2, 3]
...         # Messages can be written to file
...         with open(testfile, "w") as test:
...             msg.write(test)
...         # Messages can be cloned from other messages
...         msg2 = GribMessage(clone=msg)
Tabs Page
titleBufrFile
Code Block
languagepy
linenumberstrue
# A BUFR file handle meant for use in a context manager.

# Individual messages can be accessed using the ``next`` method.
# (This is the Iterator Protocol: https://wiki.python.org/moin/Iterator)
# It is also possible to iterate over each message in the file::

# Usage::
>>> with BufrFile(filename) as bufr:
...     # Print number of messages in file
...     len(bufr)
...     # Open all messages in file
...     for msg in bufr:
...         print(msg[key_name])
...     len(bufr.open_messages)
>>> # When the file is closed, any open messages are closed
>>> len(bufr.open_messages)
0
Tabs Page
titleBufrMessage
Code Block
languagepy
linenumberstrue
# A BUFR message.

# Each ``BufrMessage`` is stored as a key/value pair in a dictionary-like
# structure. It can be used in a context manager or by itself. When the
# ``BufrFile`` it belongs to is closed, the ``BufrFile`` closes any open
# ``BufrMessage``s that belong to it. If a ``BufrMessage`` is closed before
# its ``BufrFile`` is closed, it informs the ``BufrFile`` of its closure.

# Scalar and vector values are set appropriately through the same method.

# ``BufrMessage``s can be instantiated from a ``BufrFile``, cloned from
# other ``BufrMessage``s or taken from samples. Iterating over the members
# of a ``BufrFile`` extracts the ``BufrMessage``s it contains until the
# ``BufrFile`` is exhausted.

# Usage::
>>> with BufrFile(filename) as bufr:
...     # Iterate through each message in the file
...     for msg in bufr:
...         # Access a key from each message
...         print(msg[key_name])
...         # Report number of keys in message
...         len(msg)
...         # Report message size in bytes
...         msg.size()
...         # Report keys in message
...         msg.keys()
...         # Set scalar value
...         msg[scalar_key] = 5
...         # Array values are set transparently
...         msg[array_key] = [1, 2, 3]
...         # Messages can be written to file
...         with open(testfile, "w") as test:
...             msg.write(test)
...         # Messages can be cloned from other messages
...         msg2 = BufrMessage(clone=msg)

...