in src/sagemaker_core/tools/resources_codegen.py [0:0]
def generate_wait_method(self, resource_name: str) -> str:
"""Auto-Generate WAIT Method for a waitable resource.
Args:
resource_name (str): The resource name.
Returns:
str: The formatted Wait Method template.
"""
resource_status_chain, resource_states = (
self.resources_extractor.get_status_chain_and_states(resource_name)
)
# Get terminal states for resource
terminal_resource_states = []
for state in resource_states:
# Handles when a resource has terminal states like UpdateCompleted, CreateFailed, etc.
# Checking lower because case is not consistent accross resources (ie, COMPLETED vs Completed)
if any(terminal_state.lower() in state.lower() for terminal_state in TERMINAL_STATES):
terminal_resource_states.append(state)
# Get resource status key path
status_key_path = ""
for member in resource_status_chain:
status_key_path += f'.{convert_to_snake_case(member["name"])}'
failure_reason = self._get_failure_reason_ref(resource_name)
formatted_failed_block = FAILED_STATUS_ERROR_TEMPLATE.format(
resource_name=resource_name, reason=failure_reason
)
formatted_failed_block = add_indent(formatted_failed_block, 16)
logs_arg = ""
logs_arg_doc = ""
init_wait_logs = ""
print_wait_logs = ""
if resource_name in RESOURCE_WITH_LOGS:
logs_arg = "logs: Optional[bool] = False,"
logs_arg_doc = "logs: Whether to print logs while waiting.\n"
instance_count = self._get_instance_count_ref(resource_name)
init_wait_logs = add_indent(
INIT_WAIT_LOGS_TEMPLATE.format(
get_instance_count=instance_count,
job_type=resource_name,
)
)
print_wait_logs = add_indent(PRINT_WAIT_LOGS, 12)
formatted_method = WAIT_METHOD_TEMPLATE.format(
terminal_resource_states=terminal_resource_states,
status_key_path=status_key_path,
failed_error_block=formatted_failed_block,
resource_name=resource_name,
logs_arg=logs_arg,
logs_arg_doc=logs_arg_doc,
init_wait_logs=init_wait_logs,
print_wait_logs=print_wait_logs,
)
return formatted_method