in src/sagemaker_core/tools/shapes_extractor.py [0:0]
def generate_shape_members(self, shape, required_override=(), add_shapes_prefix=True):
shape_dict = self.combined_shapes[shape]
members = shape_dict["members"]
required_args = list(required_override) or shape_dict.get("required", [])
init_data_body = {}
# bring the required members in front
ordered_members = {key: members[key] for key in required_args if key in members}
ordered_members.update(members)
field_aliases = {}
for member_name, member_attrs in ordered_members.items():
member_shape_name = member_attrs["shape"]
if self.combined_shapes[member_shape_name]:
member_shape = self.combined_shapes[member_shape_name]
member_shape_type = member_shape["type"]
if member_shape_type == "structure":
if add_shapes_prefix:
member_shape_name = f"shapes.{member_shape_name}"
member_type = f"{member_shape_name}"
elif member_shape_type == "list":
member_type = self._evaluate_list_type(member_shape, add_shapes_prefix)
elif member_shape_type == "map":
member_type = self._evaluate_map_type(member_shape, add_shapes_prefix)
else:
# Shape is a simple type like string
member_type = BASIC_JSON_TYPES_TO_PYTHON_TYPES[member_shape_type]
else:
raise Exception("The Shape definition mush exist. The Json Data might be corrupt")
is_required = member_name in required_args
# Add alias if field name is json, to address the Bug: https://github.com/aws/sagemaker-python-sdk/issues/4944
if shape in SHAPES_WITH_JSON_FIELD_ALIAS and member_name == "Json":
updated_member_name_snake_case = "json_format"
field_aliases[updated_member_name_snake_case] = "json"
init_data_body[f"{updated_member_name_snake_case}"] = (
(
f"{member_type} = Field(alias='{field_aliases[updated_member_name_snake_case]}')"
)
if is_required
else f"Optional[{member_type}] = Field(default=Unassigned(), alias='json')"
)
else:
member_name_snake_case = convert_to_snake_case(member_name)
if is_required:
init_data_body[f"{member_name_snake_case}"] = f"{member_type}"
else:
init_data_body[f"{member_name_snake_case}"] = (
f"Optional[{member_type}] = Unassigned()"
)
return init_data_body