Skip to content

input4mips_validation.serialisation#

input4mips_validation.serialisation #

Serialisation of Python objects to standard data exchange formats

format_date_for_time_range(date, ds_frequency) #

Format date for providing time-range information

Parameters:

Name Type Description Default
date datetime | datetime | datetime64

Date to format

required
ds_frequency str

Frequency of the underlying dataset

required

Returns:

Type Description
Formatted date
Source code in src/input4mips_validation/serialisation.py
def format_date_for_time_range(
    date: cftime.datetime | dt.datetime | np.datetime64,
    ds_frequency: str,
) -> str:
    """
    Format date for providing time-range information

    Parameters
    ----------
    date
        Date to format

    ds_frequency
        Frequency of the underlying dataset

    Returns
    -------
        Formatted date
    """
    if isinstance(date, np.datetime64):
        date_safe: cftime.datetime | dt.datetime = pd.to_datetime(str(date))

    else:
        date_safe = date

    if ds_frequency.startswith("mon"):
        return date_safe.strftime("%Y%m")

    if ds_frequency.startswith("yr"):
        return date_safe.strftime("%Y")

    if ds_frequency.startswith("day"):
        return date_safe.strftime("%Y%m%d")

    if ds_frequency.startswith("3hr"):
        return date_safe.strftime("%Y%m%d%H%M")

    raise NotImplementedError(ds_frequency)

json_dumps_cv_style(inp) #

JSON dump raw data

This ensures that consistent settings can be used for writing of all JSON data.

Parameters:

Name Type Description Default
inp Any

Raw data to dump to JSON

required

Returns:

Type Description
JSON form of the raw data, formatted using standard CV form
Source code in src/input4mips_validation/serialisation.py
def json_dumps_cv_style(inp: Any) -> str:
    """
    JSON dump raw data

    This ensures that consistent settings can be used for writing of all JSON data.

    Parameters
    ----------
    inp
        Raw data to dump to JSON

    Returns
    -------
        JSON form of the raw data, formatted using standard CV form
    """
    return json.dumps(
        inp,
        ensure_ascii=True,
        sort_keys=True,
        indent=4,
        separators=(",", ":"),
    )