Skip to content

Commit ded2577

Browse files
qidewenwhensamruds
authored andcommitted
fix: Add validation for empty ParameterString value in start local pipeline (aws#4354)
1 parent c74347b commit ded2577

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/sagemaker/local/entities.py

+6
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,12 @@ def _initialize_and_validate_parameters(self, overridden_parameters):
845845
"{}.".format(param_name, parameter_type.python_type, type(param_value))
846846
)
847847
raise ClientError(error_msg, "start_pipeline_execution")
848+
if param_value == "":
849+
error_msg = self._construct_validation_exception_message(
850+
'Parameter {} value "" is too short (length: 0, '
851+
"required minimum: 1).".format(param_name)
852+
)
853+
raise ClientError(error_msg, "start_pipeline_execution")
848854
merged_parameters[param_name] = param_value
849855
for param_name, default_parameter in default_parameters.items():
850856
if param_name not in merged_parameters:

tests/integ/test_local_mode.py

+2
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,7 @@ def else_step():
908908
assert exe_step_result["Metadata"]["Condition"]["Outcome"] is True
909909

910910

911+
@pytest.mark.local_mode
911912
def test_local_pipeline_with_step_decorator_data_referenced_by_other_steps(
912913
local_pipeline_session,
913914
dummy_container,
@@ -987,6 +988,7 @@ def func(var: int):
987988
assert exe_step_result["Metadata"]["Condition"]["Outcome"] is True
988989

989990

991+
@pytest.mark.local_mode
990992
def test_local_remote_function_with_additional_dependencies(
991993
local_pipeline_session, dummy_container
992994
):

tests/unit/sagemaker/local/test_local_entities.py

+26
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from botocore.exceptions import ClientError
2121

2222
import sagemaker.local
23+
from sagemaker.workflow.fail_step import FailStep
2324
from sagemaker.workflow.parameters import ParameterString
2425
from sagemaker.workflow.pipeline import Pipeline
2526
from sagemaker.workflow.lambda_step import LambdaStep
@@ -293,3 +294,28 @@ def test_start_local_pipeline_with_wrong_parameter_type(sagemaker_local_session)
293294
f"Unexpected type for parameter '{parameter.name}'. Expected "
294295
f"{parameter.parameter_type.python_type} but found {type(True)}." in str(error.value)
295296
)
297+
298+
299+
def test_start_local_pipeline_with_empty_parameter_string_value(
300+
local_pipeline_session,
301+
):
302+
param_str_name = "MyParameterString"
303+
param_str = ParameterString(name=param_str_name, default_value="default")
304+
fail_step = FailStep(
305+
name="MyFailStep",
306+
error_message=param_str,
307+
)
308+
309+
pipeline = Pipeline(
310+
name="MyPipeline",
311+
steps=[fail_step],
312+
sagemaker_session=local_pipeline_session,
313+
parameters=[param_str],
314+
)
315+
316+
local_pipeline = sagemaker.local.entities._LocalPipeline(pipeline)
317+
with pytest.raises(ClientError) as error:
318+
local_pipeline.start(PipelineParameters={param_str_name: ""})
319+
assert (
320+
f'Parameter {param_str_name} value "" is too short (length: 0, required minimum: 1).'
321+
) in str(error)

0 commit comments

Comments
 (0)