def transform()

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


def transform(data, shape, object_instance=None) -> dict:
    """
    Transforms the given data based on the given shape.

    Args:
        data (dict): The data to be transformed.
        shape (str): The shape of the data.
        object_instance (object): The object to be transformed. (Optional)

    Returns:
        dict: The transformed data.

    Raises:
        ValueError: If an unhandled shape type is encountered.
    """
    result = {}
    _shape = SHAPE_DAG[shape]

    if _shape["type"] in BASIC_TYPES:
        raise ValueError("Unexpected low-level operation model shape")

    for member in _shape["members"]:
        _member_name = member["name"]
        _member_shape = member["shape"]
        _member_type = member["type"]
        if data.get(_member_name) is None:
            # skip members that are not in the response
            continue
        # 1. set snake case attribute name
        attribute_name = pascal_to_snake(_member_name)
        # 2. assign response value
        if _member_type in BASIC_TYPES:
            evaluated_value = data[_member_name]
        elif _member_type == STRUCTURE_TYPE:
            evaluated_value = transform(data[_member_name], _member_shape)
        elif _member_type == LIST_TYPE:
            _list_type_shape = SHAPE_DAG[_member_shape]
            # 2. assign response value
            evaluated_value = _evaluate_list_type(data[_member_name], _list_type_shape)
        elif _member_type == MAP_TYPE:
            _map_type_shape = SHAPE_DAG[_member_shape]
            evaluated_value = _evaluate_map_type(data[_member_name], _map_type_shape)
        else:
            raise ValueError(f"Unexpected member type encountered: {_member_type}")

        result[attribute_name] = evaluated_value
        if object_instance:
            # 3. set attribute value
            setattr(object_instance, attribute_name, evaluated_value)

    return result