From 7498fba2bf65356f23987b8340e13593c2f4ea39 Mon Sep 17 00:00:00 2001 From: Joshua Towner Date: Wed, 22 Apr 2026 00:02:42 -0700 Subject: [PATCH 1/5] fix: improve error messages for waiter timeouts --- sagemaker-core/src/sagemaker/core/resources.py | 6 +++++- .../src/sagemaker/core/utils/exceptions.py | 8 ++++---- .../src/sagemaker/train/evaluate/execution.py | 15 +++++++++------ .../tests/unit/train/evaluate/test_execution.py | 4 +++- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/sagemaker-core/src/sagemaker/core/resources.py b/sagemaker-core/src/sagemaker/core/resources.py index 61e0f9c677..6454e00700 100644 --- a/sagemaker-core/src/sagemaker/core/resources.py +++ b/sagemaker-core/src/sagemaker/core/resources.py @@ -35883,7 +35883,11 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="TrainingJob", status=current_status) + raise TimeoutExceededError( + resource_type="TrainingJob", + status=current_status, + message="Your training job is still running. Call .refresh() to check its current status.", + ) time.sleep(poll) @Base.add_validate_call diff --git a/sagemaker-core/src/sagemaker/core/utils/exceptions.py b/sagemaker-core/src/sagemaker/core/utils/exceptions.py index 95a25dbb57..898a944107 100644 --- a/sagemaker-core/src/sagemaker/core/utils/exceptions.py +++ b/sagemaker-core/src/sagemaker/core/utils/exceptions.py @@ -79,16 +79,16 @@ def __init__(self, resource_type="(Unkown)", reason="(Unkown)"): class TimeoutExceededError(WaiterError): """Raised when a specified timeout is exceeded""" - fmt = "Timeout exceeded while waiting for {resource_type}. Final Resource State: {status}. Increase the timeout and try again." + fmt = "Timeout exceeded while waiting for {resource_type}. Final Resource State: {status}. {message}" - def __init__(self, resource_type="(Unkown)", status="(Unkown)", reason="(Unkown)"): + def __init__(self, resource_type="(Unkown)", status="(Unkown)", message="Increase the timeout and try again."): """Initialize a TimeoutExceededError exception. Args: resource_type (str): The type of resource being waited on. status (str): The final status of the resource. - reason (str): The reason the resource entered a failed state. + message (str): Additional context or guidance for the user. """ - super().__init__(resource_type=resource_type, status=status, reason=reason) + super().__init__(resource_type=resource_type, status=status, message=message) ### Intelligent Defaults Errors diff --git a/sagemaker-train/src/sagemaker/train/evaluate/execution.py b/sagemaker-train/src/sagemaker/train/evaluate/execution.py index d5e50f86b5..7449755ce3 100644 --- a/sagemaker-train/src/sagemaker/train/evaluate/execution.py +++ b/sagemaker-train/src/sagemaker/train/evaluate/execution.py @@ -1128,8 +1128,9 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: from sagemaker.core.utils.exceptions import TimeoutExceededError raise TimeoutExceededError( - resource_type="PipelineExecution", - status=current_status + resource_type="EvaluationJob", + status=current_status, + message="Your evaluation job is still running. Use execution.refresh() to check its current status.", ) time.sleep(poll) @@ -1179,8 +1180,9 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: from sagemaker.core.utils.exceptions import TimeoutExceededError raise TimeoutExceededError( - resource_type="PipelineExecution", - status=current_status + resource_type="EvaluationJob", + status=current_status, + message="Your evaluation job is still running. Use execution.refresh() to check its current status.", ) time.sleep(poll) @@ -1208,8 +1210,9 @@ def wait( if timeout is not None and elapsed >= timeout: from sagemaker.core.utils.exceptions import TimeoutExceededError raise TimeoutExceededError( - resource_type="PipelineExecution", - status=current_status + resource_type="EvaluationJob", + status=current_status, + message="Your evaluation job is still running. Use execution.refresh() to check its current status.", ) time.sleep(poll) diff --git a/sagemaker-train/tests/unit/train/evaluate/test_execution.py b/sagemaker-train/tests/unit/train/evaluate/test_execution.py index 89118b4b2e..3f82a50221 100644 --- a/sagemaker-train/tests/unit/train/evaluate/test_execution.py +++ b/sagemaker-train/tests/unit/train/evaluate/test_execution.py @@ -1132,8 +1132,10 @@ def test_wait_timeout_exceeded(self, mock_time): # Mock time to simulate timeout mock_time.side_effect = [0, 10, 20, 30, 40, 50, 60] # Exceeds timeout - with pytest.raises(TimeoutExceededError): + with pytest.raises(TimeoutExceededError, match="EvaluationJob") as exc_info: execution.wait(target_status="Succeeded", poll=1, timeout=5) + assert "still running" in str(exc_info.value) + assert "refresh()" in str(exc_info.value) def test_wait_without_pipeline_execution(self): """Test wait when no pipeline execution is set.""" From becef3cb12d4d3d5782da565b0f73c087021a056 Mon Sep 17 00:00:00 2001 From: Joshua Towner Date: Wed, 22 Apr 2026 00:23:26 -0700 Subject: [PATCH 2/5] fix: re-introduce accidentially removed field --- .../src/sagemaker/core/utils/exceptions.py | 5 +-- .../tests/unit/utils/test_exceptions.py | 31 +++++++++++++++++++ .../src/sagemaker/train/evaluate/execution.py | 6 ++-- .../unit/train/evaluate/test_execution.py | 2 +- 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 sagemaker-core/tests/unit/utils/test_exceptions.py diff --git a/sagemaker-core/src/sagemaker/core/utils/exceptions.py b/sagemaker-core/src/sagemaker/core/utils/exceptions.py index 898a944107..26443a2d9a 100644 --- a/sagemaker-core/src/sagemaker/core/utils/exceptions.py +++ b/sagemaker-core/src/sagemaker/core/utils/exceptions.py @@ -81,14 +81,15 @@ class TimeoutExceededError(WaiterError): fmt = "Timeout exceeded while waiting for {resource_type}. Final Resource State: {status}. {message}" - def __init__(self, resource_type="(Unkown)", status="(Unkown)", message="Increase the timeout and try again."): + def __init__(self, resource_type="(Unkown)", status="(Unkown)", reason="(Unkown)", message="Increase the timeout and try again."): """Initialize a TimeoutExceededError exception. Args: resource_type (str): The type of resource being waited on. status (str): The final status of the resource. + reason (str): The reason the resource entered a failed state. message (str): Additional context or guidance for the user. """ - super().__init__(resource_type=resource_type, status=status, message=message) + super().__init__(resource_type=resource_type, status=status, reason=reason, message=message) ### Intelligent Defaults Errors diff --git a/sagemaker-core/tests/unit/utils/test_exceptions.py b/sagemaker-core/tests/unit/utils/test_exceptions.py new file mode 100644 index 0000000000..b8762e22cb --- /dev/null +++ b/sagemaker-core/tests/unit/utils/test_exceptions.py @@ -0,0 +1,31 @@ +from sagemaker.core.utils.exceptions import TimeoutExceededError + + +class TestTimeoutExceededError: + def test_default_message(self): + """Default message should match original behavior.""" + err = TimeoutExceededError(resource_type="TrainingJob", status="InProgress") + assert str(err) == ( + "Timeout exceeded while waiting for TrainingJob. " + "Final Resource State: InProgress. " + "Increase the timeout and try again." + ) + + def test_custom_message(self): + """Custom message should replace the default.""" + err = TimeoutExceededError( + resource_type="EvaluationJob", + status="Executing", + message="Your evaluation job is still running. Call .refresh() to check its current status.", + ) + assert str(err) == ( + "Timeout exceeded while waiting for EvaluationJob. " + "Final Resource State: Executing. " + "Your evaluation job is still running. Call .refresh() to check its current status." + ) + + def test_default_params(self): + """No args should use defaults without crashing.""" + err = TimeoutExceededError() + assert "(Unkown)" in str(err) + assert "Increase the timeout and try again." in str(err) diff --git a/sagemaker-train/src/sagemaker/train/evaluate/execution.py b/sagemaker-train/src/sagemaker/train/evaluate/execution.py index 7449755ce3..d5fb2aa77e 100644 --- a/sagemaker-train/src/sagemaker/train/evaluate/execution.py +++ b/sagemaker-train/src/sagemaker/train/evaluate/execution.py @@ -1130,7 +1130,7 @@ def wait( raise TimeoutExceededError( resource_type="EvaluationJob", status=current_status, - message="Your evaluation job is still running. Use execution.refresh() to check its current status.", + message="Your evaluation job is still running. Call .refresh() to check its current status.", ) time.sleep(poll) @@ -1182,7 +1182,7 @@ def wait( raise TimeoutExceededError( resource_type="EvaluationJob", status=current_status, - message="Your evaluation job is still running. Use execution.refresh() to check its current status.", + message="Your evaluation job is still running. Call .refresh() to check its current status.", ) time.sleep(poll) @@ -1212,7 +1212,7 @@ def wait( raise TimeoutExceededError( resource_type="EvaluationJob", status=current_status, - message="Your evaluation job is still running. Use execution.refresh() to check its current status.", + message="Your evaluation job is still running. Call .refresh() to check its current status.", ) time.sleep(poll) diff --git a/sagemaker-train/tests/unit/train/evaluate/test_execution.py b/sagemaker-train/tests/unit/train/evaluate/test_execution.py index 3f82a50221..93eca19e98 100644 --- a/sagemaker-train/tests/unit/train/evaluate/test_execution.py +++ b/sagemaker-train/tests/unit/train/evaluate/test_execution.py @@ -1135,7 +1135,7 @@ def test_wait_timeout_exceeded(self, mock_time): with pytest.raises(TimeoutExceededError, match="EvaluationJob") as exc_info: execution.wait(target_status="Succeeded", poll=1, timeout=5) assert "still running" in str(exc_info.value) - assert "refresh()" in str(exc_info.value) + assert ".refresh()" in str(exc_info.value) def test_wait_without_pipeline_execution(self): """Test wait when no pipeline execution is set.""" From bacc447ba1b83ba3053e5c87ce37ce2660b6b22e Mon Sep 17 00:00:00 2001 From: Joshua Towner Date: Wed, 22 Apr 2026 12:37:35 -0700 Subject: [PATCH 3/5] fix: apply fix to generated code as well --- sagemaker-core/src/sagemaker/core/tools/templates.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sagemaker-core/src/sagemaker/core/tools/templates.py b/sagemaker-core/src/sagemaker/core/tools/templates.py index 1c84c91668..d02ff95e23 100644 --- a/sagemaker-core/src/sagemaker/core/tools/templates.py +++ b/sagemaker-core/src/sagemaker/core/tools/templates.py @@ -332,7 +332,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="{resource_name}", status=current_status) + raise TimeoutExceededError(resource_type="{resource_name}", status=current_status) time.sleep(poll) ''' @@ -385,7 +385,7 @@ def wait_for_status( return {failed_error_block} if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="{resource_name}", status=current_status) + raise TimeoutExceededError(resource_type="{resource_name}", status=current_status) time.sleep(poll) ''' @@ -436,7 +436,7 @@ def wait_for_delete( {deleted_status_check} if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="{resource_name}", status=current_status) + raise TimeoutExceededError(resource_type="{resource_name}", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] From 2dab21531848f5dd43108a35bea48dadf1021318 Mon Sep 17 00:00:00 2001 From: Molly He Date: Wed, 22 Apr 2026 16:17:47 -0700 Subject: [PATCH 4/5] Update autogen scripts for adding message as parameter --- sagemaker-core/src/sagemaker/core/tools/constants.py | 5 +++++ sagemaker-core/src/sagemaker/core/tools/resources_codegen.py | 3 +++ sagemaker-core/src/sagemaker/core/tools/templates.py | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sagemaker-core/src/sagemaker/core/tools/constants.py b/sagemaker-core/src/sagemaker/core/tools/constants.py index 0649eb980e..e372a5897b 100644 --- a/sagemaker-core/src/sagemaker/core/tools/constants.py +++ b/sagemaker-core/src/sagemaker/core/tools/constants.py @@ -22,6 +22,11 @@ RESOURCE_WITH_LOGS = set(["TrainingJob", "ProcessingJob", "TransformJob"]) +DEFAULT_TIMEOUT_MESSAGE = "Increase the timeout and try again." +RESOURCE_TIMEOUT_MESSAGES = { + "TrainingJob": "Your training job is still running. Call .refresh() to check its current status.", +} + CONFIGURABLE_ATTRIBUTE_SUBSTRINGS = [ "kms", "s3", diff --git a/sagemaker-core/src/sagemaker/core/tools/resources_codegen.py b/sagemaker-core/src/sagemaker/core/tools/resources_codegen.py index 2780ca14e7..563fc4a163 100644 --- a/sagemaker-core/src/sagemaker/core/tools/resources_codegen.py +++ b/sagemaker-core/src/sagemaker/core/tools/resources_codegen.py @@ -30,6 +30,8 @@ PYTHON_TYPES_TO_BASIC_JSON_TYPES, CONFIGURABLE_ATTRIBUTE_SUBSTRINGS, RESOURCE_WITH_LOGS, + DEFAULT_TIMEOUT_MESSAGE, + RESOURCE_TIMEOUT_MESSAGES, ) from sagemaker.core.tools.method import Method, MethodType from sagemaker.core.utils.utils import ( @@ -1742,6 +1744,7 @@ def generate_wait_method(self, resource_name: str) -> str: logs_arg_doc=logs_arg_doc, init_wait_logs=init_wait_logs, print_wait_logs=print_wait_logs, + timeout_message=RESOURCE_TIMEOUT_MESSAGES.get(resource_name, DEFAULT_TIMEOUT_MESSAGE), ) return formatted_method diff --git a/sagemaker-core/src/sagemaker/core/tools/templates.py b/sagemaker-core/src/sagemaker/core/tools/templates.py index d02ff95e23..460902d9f5 100644 --- a/sagemaker-core/src/sagemaker/core/tools/templates.py +++ b/sagemaker-core/src/sagemaker/core/tools/templates.py @@ -332,7 +332,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resource_type="{resource_name}", status=current_status) + raise TimeoutExceededError(resource_type="{resource_name}", status=current_status, message="{timeout_message}") time.sleep(poll) ''' From 419bc0b89b7d5bd7eead185b8e0bab33abdc6fd2 Mon Sep 17 00:00:00 2001 From: Molly He Date: Wed, 22 Apr 2026 16:24:09 -0700 Subject: [PATCH 5/5] Fix typo in resources.py --- .../src/sagemaker/core/resources.py | 162 +++++++++--------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/sagemaker-core/src/sagemaker/core/resources.py b/sagemaker-core/src/sagemaker/core/resources.py index 6454e00700..49223e95cb 100644 --- a/sagemaker-core/src/sagemaker/core/resources.py +++ b/sagemaker-core/src/sagemaker/core/resources.py @@ -972,7 +972,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Algorithm", status=current_status) + raise TimeoutExceededError(resource_type="Algorithm", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -1026,7 +1026,7 @@ def wait_for_delete( status.update(f"Current status: [bold]{current_status}") if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Algorithm", status=current_status) + raise TimeoutExceededError(resource_type="Algorithm", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -1499,7 +1499,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="App", status=current_status) + raise TimeoutExceededError(resource_type="App", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -1557,7 +1557,7 @@ def wait_for_delete( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="App", status=current_status) + raise TimeoutExceededError(resource_type="App", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -3084,7 +3084,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="AutoMLJob", status=current_status) + raise TimeoutExceededError(resource_type="AutoMLJob", status=current_status) time.sleep(poll) @classmethod @@ -3580,7 +3580,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="AutoMLJobV2", status=current_status) + raise TimeoutExceededError(resource_type="AutoMLJobV2", status=current_status) time.sleep(poll) @@ -3838,7 +3838,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="AutoMLTask", status=current_status) + raise TimeoutExceededError(resource_type="AutoMLTask", status=current_status) time.sleep(poll) @@ -4211,7 +4211,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="CapacitySchedule", status=current_status + resource_type="CapacitySchedule", status=current_status ) time.sleep(poll) @@ -4716,7 +4716,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Cluster", status=current_status) + raise TimeoutExceededError(resource_type="Cluster", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -4770,7 +4770,7 @@ def wait_for_delete( status.update(f"Current status: [bold]{current_status}") if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Cluster", status=current_status) + raise TimeoutExceededError(resource_type="Cluster", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -5482,7 +5482,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ClusterSchedulerConfig", status=current_status + resource_type="ClusterSchedulerConfig", status=current_status ) time.sleep(poll) @@ -5542,7 +5542,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ClusterSchedulerConfig", status=current_status + resource_type="ClusterSchedulerConfig", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -6339,7 +6339,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="CompilationJob", status=current_status) + raise TimeoutExceededError(resource_type="CompilationJob", status=current_status) time.sleep(poll) @classmethod @@ -6811,7 +6811,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="ComputeQuota", status=current_status) + raise TimeoutExceededError(resource_type="ComputeQuota", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -6870,7 +6870,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ComputeQuota", status=current_status + resource_type="ComputeQuota", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -9529,7 +9529,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Domain", status=current_status) + raise TimeoutExceededError(resource_type="Domain", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -9591,7 +9591,7 @@ def wait_for_delete( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Domain", status=current_status) + raise TimeoutExceededError(resource_type="Domain", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -10517,7 +10517,7 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="EdgePackagingJob", status=current_status + resource_type="EdgePackagingJob", status=current_status ) time.sleep(poll) @@ -11023,7 +11023,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Endpoint", status=current_status) + raise TimeoutExceededError(resource_type="Endpoint", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -11077,7 +11077,7 @@ def wait_for_delete( status.update(f"Current status: [bold]{current_status}") if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Endpoint", status=current_status) + raise TimeoutExceededError(resource_type="Endpoint", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -12437,7 +12437,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="EvaluationJob", status=current_status) + raise TimeoutExceededError(resource_type="EvaluationJob", status=current_status) time.sleep(poll) @classmethod @@ -13387,7 +13387,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="FeatureGroup", status=current_status) + raise TimeoutExceededError(resource_type="FeatureGroup", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -13442,7 +13442,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="FeatureGroup", status=current_status + resource_type="FeatureGroup", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -14442,7 +14442,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="FlowDefinition", status=current_status) + raise TimeoutExceededError(resource_type="FlowDefinition", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -14497,7 +14497,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="FlowDefinition", status=current_status + resource_type="FlowDefinition", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -14849,7 +14849,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="GroundTruthJob", status=current_status) + raise TimeoutExceededError(resource_type="GroundTruthJob", status=current_status) time.sleep(poll) @@ -15096,7 +15096,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="GroundTruthProject", status=current_status + resource_type="GroundTruthProject", status=current_status ) time.sleep(poll) @@ -15703,7 +15703,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Hub", status=current_status) + raise TimeoutExceededError(resource_type="Hub", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -15757,7 +15757,7 @@ def wait_for_delete( status.update(f"Current status: [bold]{current_status}") if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Hub", status=current_status) + raise TimeoutExceededError(resource_type="Hub", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -16148,7 +16148,7 @@ def wait_for_status( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="HubContent", status=current_status) + raise TimeoutExceededError(resource_type="HubContent", status=current_status) time.sleep(poll) @classmethod @@ -16940,7 +16940,7 @@ def wait_for_status( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="HumanTaskUi", status=current_status) + raise TimeoutExceededError(resource_type="HumanTaskUi", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -16995,7 +16995,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="HumanTaskUi", status=current_status + resource_type="HumanTaskUi", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -17453,7 +17453,7 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="HyperParameterTuningJob", status=current_status + resource_type="HyperParameterTuningJob", status=current_status ) time.sleep(poll) @@ -17509,7 +17509,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="HyperParameterTuningJob", status=current_status + resource_type="HyperParameterTuningJob", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -18200,7 +18200,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Image", status=current_status) + raise TimeoutExceededError(resource_type="Image", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -18262,7 +18262,7 @@ def wait_for_delete( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Image", status=current_status) + raise TimeoutExceededError(resource_type="Image", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -18816,7 +18816,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="ImageVersion", status=current_status) + raise TimeoutExceededError(resource_type="ImageVersion", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -18879,7 +18879,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ImageVersion", status=current_status + resource_type="ImageVersion", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -19242,7 +19242,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="InferenceComponent", status=current_status + resource_type="InferenceComponent", status=current_status ) time.sleep(poll) @@ -19298,7 +19298,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="InferenceComponent", status=current_status + resource_type="InferenceComponent", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -19913,7 +19913,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="InferenceExperiment", status=current_status + resource_type="InferenceExperiment", status=current_status ) time.sleep(poll) @@ -20373,7 +20373,7 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="InferenceRecommendationsJob", status=current_status + resource_type="InferenceRecommendationsJob", status=current_status ) time.sleep(poll) @@ -20433,7 +20433,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="InferenceRecommendationsJob", status=current_status + resource_type="InferenceRecommendationsJob", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -20979,7 +20979,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="LabelingJob", status=current_status) + raise TimeoutExceededError(resource_type="LabelingJob", status=current_status) time.sleep(poll) @classmethod @@ -21882,7 +21882,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="MlflowApp", status=current_status) + raise TimeoutExceededError(resource_type="MlflowApp", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -21940,7 +21940,7 @@ def wait_for_delete( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="MlflowApp", status=current_status) + raise TimeoutExceededError(resource_type="MlflowApp", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -22508,7 +22508,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="MlflowTrackingServer", status=current_status + resource_type="MlflowTrackingServer", status=current_status ) time.sleep(poll) @@ -22564,7 +22564,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="MlflowTrackingServer", status=current_status + resource_type="MlflowTrackingServer", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -23759,7 +23759,7 @@ def wait_for_status( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="ModelCard", status=current_status) + raise TimeoutExceededError(resource_type="ModelCard", status=current_status) time.sleep(poll) @classmethod @@ -24177,7 +24177,7 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ModelCardExportJob", status=current_status + resource_type="ModelCardExportJob", status=current_status ) time.sleep(poll) @@ -25290,7 +25290,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="ModelPackage", status=current_status) + raise TimeoutExceededError(resource_type="ModelPackage", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -25345,7 +25345,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ModelPackage", status=current_status + resource_type="ModelPackage", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -25759,7 +25759,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ModelPackageGroup", status=current_status + resource_type="ModelPackageGroup", status=current_status ) time.sleep(poll) @@ -25815,7 +25815,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="ModelPackageGroup", status=current_status + resource_type="ModelPackageGroup", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -26817,7 +26817,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="MonitoringExecution", status=current_status + resource_type="MonitoringExecution", status=current_status ) time.sleep(poll) @@ -27373,7 +27373,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="MonitoringSchedule", status=current_status + resource_type="MonitoringSchedule", status=current_status ) time.sleep(poll) @@ -27996,7 +27996,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="NotebookInstance", status=current_status + resource_type="NotebookInstance", status=current_status ) time.sleep(poll) @@ -28052,7 +28052,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="NotebookInstance", status=current_status + resource_type="NotebookInstance", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -28879,7 +28879,7 @@ def wait( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="OptimizationJob", status=current_status + resource_type="OptimizationJob", status=current_status ) time.sleep(poll) @@ -29458,7 +29458,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="PartnerApp", status=current_status) + raise TimeoutExceededError(resource_type="PartnerApp", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -29516,7 +29516,7 @@ def wait_for_delete( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="PartnerApp", status=current_status) + raise TimeoutExceededError(resource_type="PartnerApp", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -29954,7 +29954,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="PersistentVolume", status=current_status + resource_type="PersistentVolume", status=current_status ) time.sleep(poll) @@ -30010,7 +30010,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="PersistentVolume", status=current_status + resource_type="PersistentVolume", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -30411,7 +30411,7 @@ def wait_for_status( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Pipeline", status=current_status) + raise TimeoutExceededError(resource_type="Pipeline", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -30465,7 +30465,7 @@ def wait_for_delete( status.update(f"Current status: [bold]{current_status}") if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Pipeline", status=current_status) + raise TimeoutExceededError(resource_type="Pipeline", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -30877,7 +30877,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="PipelineExecution", status=current_status + resource_type="PipelineExecution", status=current_status ) time.sleep(poll) @@ -32164,7 +32164,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="ProcessingJob", status=current_status) + raise TimeoutExceededError(resource_type="ProcessingJob", status=current_status) time.sleep(poll) @classmethod @@ -32913,7 +32913,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Project", status=current_status) + raise TimeoutExceededError(resource_type="Project", status=current_status) time.sleep(poll) @classmethod @@ -33382,7 +33382,7 @@ def wait_for_status( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="QuotaAllocation", status=current_status + resource_type="QuotaAllocation", status=current_status ) time.sleep(poll) @@ -33442,7 +33442,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="QuotaAllocation", status=current_status + resource_type="QuotaAllocation", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -34463,7 +34463,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Space", status=current_status) + raise TimeoutExceededError(resource_type="Space", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -34525,7 +34525,7 @@ def wait_for_delete( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Space", status=current_status) + raise TimeoutExceededError(resource_type="Space", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -35942,7 +35942,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="TrainingJob", status=current_status + resource_type="TrainingJob", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -36728,7 +36728,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="TrainingPlan", status=current_status) + raise TimeoutExceededError(resource_type="TrainingPlan", status=current_status) time.sleep(poll) @classmethod @@ -37308,7 +37308,7 @@ def wait( return if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="TransformJob", status=current_status) + raise TimeoutExceededError(resource_type="TransformJob", status=current_status) time.sleep(poll) @classmethod @@ -38381,7 +38381,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="TrialComponent", status=current_status) + raise TimeoutExceededError(resource_type="TrialComponent", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -38436,7 +38436,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="TrialComponent", status=current_status + resource_type="TrialComponent", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -39451,7 +39451,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="UserProfile", status=current_status) + raise TimeoutExceededError(resource_type="UserProfile", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -39514,7 +39514,7 @@ def wait_for_delete( if timeout is not None and time.time() - start_time >= timeout: raise TimeoutExceededError( - resouce_type="UserProfile", status=current_status + resource_type="UserProfile", status=current_status ) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"] @@ -39941,7 +39941,7 @@ def wait_for_status( ) if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Workforce", status=current_status) + raise TimeoutExceededError(resource_type="Workforce", status=current_status) time.sleep(poll) @Base.add_validate_call @@ -39995,7 +39995,7 @@ def wait_for_delete( status.update(f"Current status: [bold]{current_status}") if timeout is not None and time.time() - start_time >= timeout: - raise TimeoutExceededError(resouce_type="Workforce", status=current_status) + raise TimeoutExceededError(resource_type="Workforce", status=current_status) except botocore.exceptions.ClientError as e: error_code = e.response["Error"]["Code"]