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