def generate_shape_members()

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