CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-eccodes

Python interface to the ecCodes GRIB and BUFR decoder/encoder library for meteorological data processing

Pending
Overview
Eval results
Files

message-operations.mddocs/

Message Operations

Core functionality for creating, reading, writing, and managing GRIB/BUFR messages. This module provides the fundamental operations for message lifecycle management, file I/O, format detection, and memory handling.

Capabilities

Creating Messages from Files

Read messages from GRIB, BUFR, METAR, and GTS files with format-specific functions or automatic detection.

def codes_new_from_file(fileobj, product_kind, headers_only=False):
    """
    Create a new message from file with explicit product type.
    
    Parameters:
    - fileobj: File object opened in binary mode
    - product_kind (int): Message type (CODES_PRODUCT_GRIB, CODES_PRODUCT_BUFR, etc.)
    - headers_only (bool): Read only headers if True
    
    Returns:
    int: Message handle ID or None if no more messages
    """

def codes_grib_new_from_file(fileobj, headers_only=False):
    """
    Create a new GRIB message from file.
    
    Parameters:
    - fileobj: File object opened in binary mode
    - headers_only (bool): Read only headers if True
    
    Returns:
    int: Message handle ID or None if no more messages
    """

def codes_bufr_new_from_file(fileobj, headers_only=False):
    """
    Create a new BUFR message from file.
    
    Parameters:
    - fileobj: File object opened in binary mode  
    - headers_only (bool): Read only headers if True
    
    Returns:
    int: Message handle ID or None if no more messages
    """

def codes_any_new_from_file(fileobj, headers_only=False):
    """
    Create a new message from file (auto-detect format).
    
    Parameters:
    - fileobj: File object opened in binary mode
    - headers_only (bool): Read only headers if True
    
    Returns:
    int: Message handle ID or None if no more messages
    """

def codes_metar_new_from_file(fileobj, headers_only=False):
    """Create a new METAR message from file."""

def codes_gts_new_from_file(fileobj, headers_only=False):
    """Create a new GTS message from file."""

Creating Messages from Templates

Create new messages from predefined samples or templates.

def codes_new_from_samples(samplename, product_kind):
    """
    Create a new message from sample with explicit product type.
    
    Parameters:
    - samplename (str): Name of sample template
    - product_kind (int): Message type (CODES_PRODUCT_GRIB, CODES_PRODUCT_BUFR, etc.)
    
    Returns:
    int: Message handle ID
    """

def codes_grib_new_from_samples(samplename):
    """
    Create a new GRIB message from sample.
    
    Parameters:
    - samplename (str): Name of sample template
    
    Returns:
    int: Message handle ID
    """

def codes_bufr_new_from_samples(samplename):
    """
    Create a new BUFR message from sample.
    
    Parameters:
    - samplename (str): Name of sample template
    
    Returns:
    int: Message handle ID
    """

def codes_any_new_from_samples(samplename):
    """
    Create a new message from sample (auto-detect format).
    
    Parameters:
    - samplename (str): Name of sample template
    
    Returns:
    int: Message handle ID
    """

Creating Messages from Data

Create messages from existing message data or index entries.

def codes_new_from_message(message):
    """
    Create a new message from binary message data.
    
    Parameters:
    - message (bytes): Binary message data
    
    Returns:
    int: Message handle ID
    """

def codes_new_from_index(indexid):
    """
    Create a new message from index entry.
    
    Parameters:
    - indexid (int): Index handle ID
    
    Returns:
    int: Message handle ID
    """

Message Management

Handle message lifecycle, cloning, and memory management.

def codes_release(msgid):
    """
    Release message from memory.
    
    Parameters:
    - msgid (int): Message handle ID
    """

def codes_clone(msgid_src, headers_only=False):
    """
    Clone/copy a message.
    
    Parameters:
    - msgid_src (int): Source message handle ID
    - headers_only (bool): Clone only headers if True
    
    Returns:
    int: New message handle ID
    """

File Operations

Count messages and handle file-level operations.

def codes_count_in_file(fileobj):
    """
    Count total messages in file.
    
    Parameters:
    - fileobj: File object opened in binary mode
    
    Returns:
    int: Number of messages in file
    """

def codes_write(msgid, fileobj):
    """
    Write message to file.
    
    Parameters:
    - msgid (int): Message handle ID
    - fileobj: File object opened in binary write mode
    """

Message Information

Get message metadata and binary representation.

def codes_get_message_size(msgid):
    """
    Get message size in bytes.
    
    Parameters:
    - msgid (int): Message handle ID
    
    Returns:
    int: Message size in bytes
    """

def codes_get_message_offset(msgid):
    """
    Get message offset in file.
    
    Parameters:
    - msgid (int): Message handle ID
    
    Returns:
    int: Message offset in bytes
    """

def codes_get_message(msgid):
    """
    Get message as binary data.
    
    Parameters:
    - msgid (int): Message handle ID
    
    Returns:
    bytes: Binary message data
    """

Usage Examples

Reading All Messages from a File

import eccodes

with open('forecast.grib', 'rb') as f:
    while True:
        msg = eccodes.codes_grib_new_from_file(f)
        if msg is None:
            break
        
        # Process message
        param = eccodes.codes_get(msg, 'paramId')
        level = eccodes.codes_get(msg, 'level')
        print(f"Parameter {param} at level {level}")
        
        # Clean up
        eccodes.codes_release(msg)

Creating and Writing a New Message

import eccodes

# Create from sample template
msg = eccodes.codes_grib_new_from_samples('regular_ll_sfc_grib2')

# Modify message parameters
eccodes.codes_set(msg, 'paramId', 130)  # Temperature
eccodes.codes_set(msg, 'level', 850)    # 850 hPa level

# Write to file
with open('output.grib', 'wb') as f:
    eccodes.codes_write(msg, f)

# Clean up
eccodes.codes_release(msg)

Format Detection and Multi-Format Processing

import eccodes

with open('mixed_data.dat', 'rb') as f:
    while True:
        msg = eccodes.codes_any_new_from_file(f)
        if msg is None:
            break
            
        # Determine format
        product_kind = eccodes.codes_get(msg, 'productKind')
        if product_kind == eccodes.CODES_PRODUCT_GRIB:
            print("Processing GRIB message")
        elif product_kind == eccodes.CODES_PRODUCT_BUFR:
            print("Processing BUFR message")
            
        eccodes.codes_release(msg)

Install with Tessl CLI

npx tessl i tessl/pypi-eccodes

docs

data-manipulation.md

error-handling.md

high-level-interface.md

index.md

indexing-search.md

key-value-access.md

message-operations.md

tile.json