def _evaluate_map_type()

in src/sagemaker_core/main/code_injection/codec.py [0:0]


def _evaluate_map_type(raw_map, shape) -> dict:
    """
    Evaluates a map type based on the given shape.

    Args:
        raw_map (dict): The raw map to be evaluated.
        shape (dict): The shape of the map.

    Returns:
        dict: The evaluated map.

    Raises:
        ValueError: If an unhandled map key type or list member type is encountered.
    """
    _shape_key_type = shape["key_type"]
    _shape_value_type = shape["value_type"]
    _shape_value_shape = shape["value_shape"]
    if _shape_key_type != "string":
        raise ValueError(
            f"Unhandled Map key type "
            f"[{_shape_key_type}] encountered. "
            "Needs additional logic for support"
        )

    _evaluated_map = {}
    if _shape_value_type in BASIC_TYPES:
        # if basic types directly assign value.
        # Ex. response["map_member"] = {"key":"value"}
        _evaluated_map = raw_map
    elif _shape_value_type == STRUCTURE_TYPE:
        # if structure type loop through and evaluate values
        for k, v in raw_map.items():
            _evaluated_value = transform(v, _shape_value_shape)
            _evaluated_map[k] = _evaluated_value
    elif _shape_value_type == LIST_TYPE:
        for k, v in raw_map.items():
            _list_type_shape = SHAPE_DAG[_shape_value_shape]
            evaluated_values = _evaluate_list_type(v, _list_type_shape)
            _evaluated_map[k] = evaluated_values
    elif _shape_value_type == MAP_TYPE:
        for k, v in raw_map.items():
            _map_type_shape = SHAPE_DAG[_shape_value_shape]
            evaluated_values = _evaluate_map_type(v, _map_type_shape)
            _evaluated_map[k] = evaluated_values
    else:
        raise ValueError(
            f"Unhandled List member type "
            f"[{_shape_value_type}] encountered. "
            "Needs additional logic for support"
        )

    return _evaluated_map