Skip to content

hyperion.typeutils

hyperion.typeutils

Stdlib type-utility helpers.

.. deprecated:: The pandera/polars dtype-mapping helpers (:data:PANDERA_TO_POLARS_MAPPING, :data:POLARS_SCHEMA_COPY_ATTRIBUTES, :data:PolarsUTCDateTime, :func:map_pandera_dtype_to_polars) moved to :mod:hyperion.data.typeutils (F5 / DDD refactor Step 2). Import them from there. This module keeps them importable (with a :class:DeprecationWarning, resolved lazily so the import does not pull the data stack) for the whole hyperion-sdk 1.x line.

dataclass_asdict

dataclass_asdict(dataclass, *, exclude=None, include=None)

Convert a dataclass instance to a dictionary.

Parameters:

Name Type Description Default
dataclass DataclassInstance

Dataclass instance to convert.

required
exclude Sequence[str]

Fields to exclude. Defaults to None.

None
include Sequence[str]

Fields to include. Defaults to None.

None

Returns:

Type Description
dict[str, Any]

dict[str, Any]: Converted dictionary.

Raises:

Type Description
ValueError

If include and exclude overlap.

ValueError

If include field is not found in dataclass.

Source code in hyperion/typeutils.py
def dataclass_asdict(
    dataclass: DataclassInstance,
    *,
    exclude: Sequence[str] | None = None,
    include: Sequence[str] | None = None,
) -> dict[str, Any]:
    """Convert a dataclass instance to a dictionary.

    Args:
        dataclass (DataclassInstance): Dataclass instance to convert.
        exclude (Sequence[str], optional): Fields to exclude. Defaults to None.
        include (Sequence[str], optional): Fields to include. Defaults to None.

    Returns:
        dict[str, Any]: Converted dictionary.

    Raises:
        ValueError: If include and exclude overlap.
        ValueError: If include field is not found in dataclass.
    """
    exclude = exclude or []
    include = include or []
    dct = asdict(dataclass)
    fields = list(dct.keys())
    if set(include) & set(exclude):
        raise ValueError("Include and exclude cannot overlap.")
    if set(include) - set(fields):
        raise ValueError("Include field not found in dataclass.")
    if exclude or include:
        for field in fields:
            if (include and field not in include) or field in exclude:
                del dct[field]
    return dct