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