1717
1818import pytest
1919
20- from mock import Mock , patch
20+ from mock import Mock , call , patch
2121
2222from sagemaker import s3
2323from sagemaker .session_settings import SessionSettings
@@ -718,13 +718,99 @@ def test_pipeline_list_executions(sagemaker_session_mock):
718718 assert executions ["NextToken" ] == "token"
719719
720720
721+ def test_pipeline_build_parameters_from_execution (sagemaker_session_mock ):
722+ pipeline = Pipeline (
723+ name = "MyPipeline" ,
724+ sagemaker_session = sagemaker_session_mock ,
725+ )
726+ reference_execution_arn = "reference_execution_arn"
727+ parameter_value_overrides = {"TestParameterName" : "NewParameterValue" }
728+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .return_value = {
729+ "PipelineParameters" : [{"Name" : "TestParameterName" , "Value" : "TestParameterValue" }]
730+ }
731+ parameters = pipeline .build_parameters_from_execution (
732+ pipeline_execution_arn = reference_execution_arn ,
733+ parameter_value_overrides = parameter_value_overrides ,
734+ )
735+ assert (
736+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .called_with (
737+ PipelineExecutionArn = reference_execution_arn
738+ )
739+ )
740+ assert len (parameters ) == 1
741+ assert parameters ["TestParameterName" ] == "NewParameterValue"
742+
743+
744+ def test_pipeline_build_parameters_from_execution_with_invalid_overrides (sagemaker_session_mock ):
745+ pipeline = Pipeline (
746+ name = "MyPipeline" ,
747+ sagemaker_session = sagemaker_session_mock ,
748+ )
749+ reference_execution_arn = "reference_execution_arn"
750+ invalid_parameter_value_overrides = {"InvalidParameterName" : "Value" }
751+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .return_value = {
752+ "PipelineParameters" : [{"Name" : "TestParameterName" , "Value" : "TestParameterValue" }]
753+ }
754+ with pytest .raises (ValueError ) as error :
755+ pipeline .build_parameters_from_execution (
756+ pipeline_execution_arn = reference_execution_arn ,
757+ parameter_value_overrides = invalid_parameter_value_overrides ,
758+ )
759+ assert (
760+ f"The following parameter overrides provided: { str (set (invalid_parameter_value_overrides .keys ()))} "
761+ + f"are not present in the pipeline execution: { reference_execution_arn } "
762+ in str (error )
763+ )
764+ assert (
765+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .called_with (
766+ PipelineExecutionArn = reference_execution_arn
767+ )
768+ )
769+
770+
771+ def test_pipeline_build_parameters_from_execution_with_paginated_result (sagemaker_session_mock ):
772+ pipeline = Pipeline (
773+ name = "MyPipeline" ,
774+ sagemaker_session = sagemaker_session_mock ,
775+ )
776+ reference_execution_arn = "reference_execution_arn"
777+ next_token = "token"
778+ first_page_response = {
779+ "PipelineParameters" : [{"Name" : "TestParameterName1" , "Value" : "TestParameterValue1" }],
780+ "NextToken" : next_token ,
781+ }
782+ second_page_response = {
783+ "PipelineParameters" : [{"Name" : "TestParameterName2" , "Value" : "TestParameterValue2" }],
784+ }
785+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .side_effect = [
786+ first_page_response ,
787+ second_page_response ,
788+ ]
789+ parameters = pipeline .build_parameters_from_execution (
790+ pipeline_execution_arn = reference_execution_arn
791+ )
792+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .assert_has_calls (
793+ [
794+ call (PipelineExecutionArn = reference_execution_arn ),
795+ call (PipelineExecutionArn = reference_execution_arn , NextToken = next_token ),
796+ ]
797+ )
798+ assert len (parameters ) == 2
799+ assert parameters ["TestParameterName1" ] == "TestParameterValue1"
800+ assert parameters ["TestParameterName2" ] == "TestParameterValue2"
801+
802+
721803def test_pipeline_execution_basics (sagemaker_session_mock ):
722804 sagemaker_session_mock .sagemaker_client .start_pipeline_execution .return_value = {
723805 "PipelineExecutionArn" : "my:arn"
724806 }
725807 sagemaker_session_mock .sagemaker_client .list_pipeline_execution_steps .return_value = {
726808 "PipelineExecutionSteps" : [Mock ()]
727809 }
810+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .return_value = {
811+ "PipelineParameters" : [{"Name" : "TestParameterName" , "Value" : "TestParameterValue" }],
812+ "NextToken" : "token" ,
813+ }
728814 pipeline = Pipeline (
729815 name = "MyPipeline" ,
730816 parameters = [ParameterString ("alpha" , "beta" ), ParameterString ("gamma" , "delta" )],
@@ -745,6 +831,17 @@ def test_pipeline_execution_basics(sagemaker_session_mock):
745831 PipelineExecutionArn = "my:arn"
746832 )
747833 assert len (steps ) == 1
834+ list_parameters_response = execution .list_parameters ()
835+ assert (
836+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .called_with (
837+ PipelineExecutionArn = "my:arn"
838+ )
839+ )
840+ parameter_list = list_parameters_response ["PipelineParameters" ]
841+ assert len (parameter_list ) == 1
842+ assert parameter_list [0 ]["Name" ] == "TestParameterName"
843+ assert parameter_list [0 ]["Value" ] == "TestParameterValue"
844+ assert list_parameters_response ["NextToken" ] == "token"
748845
749846
750847def _generate_large_pipeline_steps (input_data : object ):
0 commit comments