17
17
18
18
import pytest
19
19
20
- from mock import Mock , patch
20
+ from mock import Mock , call , patch
21
21
22
22
from sagemaker import s3
23
23
from sagemaker .session_settings import SessionSettings
@@ -718,13 +718,99 @@ def test_pipeline_list_executions(sagemaker_session_mock):
718
718
assert executions ["NextToken" ] == "token"
719
719
720
720
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
+
721
803
def test_pipeline_execution_basics (sagemaker_session_mock ):
722
804
sagemaker_session_mock .sagemaker_client .start_pipeline_execution .return_value = {
723
805
"PipelineExecutionArn" : "my:arn"
724
806
}
725
807
sagemaker_session_mock .sagemaker_client .list_pipeline_execution_steps .return_value = {
726
808
"PipelineExecutionSteps" : [Mock ()]
727
809
}
810
+ sagemaker_session_mock .sagemaker_client .list_pipeline_parameters_for_execution .return_value = {
811
+ "PipelineParameters" : [{"Name" : "TestParameterName" , "Value" : "TestParameterValue" }],
812
+ "NextToken" : "token" ,
813
+ }
728
814
pipeline = Pipeline (
729
815
name = "MyPipeline" ,
730
816
parameters = [ParameterString ("alpha" , "beta" ), ParameterString ("gamma" , "delta" )],
@@ -745,6 +831,17 @@ def test_pipeline_execution_basics(sagemaker_session_mock):
745
831
PipelineExecutionArn = "my:arn"
746
832
)
747
833
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"
748
845
749
846
750
847
def _generate_large_pipeline_steps (input_data : object ):
0 commit comments