Skip to content

Commit aaf9707

Browse files
committed
fix(parameters): fix _transform_and_cache_get_parameters_response
was passing positional arguments to transform_value in the wrong order, making the latter fail miserably with TransformParameterError: Unable to transform value using "the value" because value was being passed as the expected transform argument. Use keyword arguments instead and cover this with a test.
1 parent 88c309d commit aaf9707

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

aws_lambda_powertools/utilities/parameters/ssm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,7 @@ def _transform_and_cache_get_parameters_response(
654654

655655
# NOTE: If transform is set, we do it before caching to reduce number of operations
656656
if transform:
657-
value = transform_value(name, value, transform, raise_on_error) # type: ignore
657+
value = transform_value(value=value, transform=transform, raise_on_transform_error=raise_on_error)
658658

659659
_cache_key = (name, options["transform"])
660660
self.add_to_cache(key=_cache_key, value=value, max_age=options["max_age"])

tests/functional/parameters/_boto3/test_utilities_parameters.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,34 @@ def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure(mock_name,
11141114
stubber.deactivate()
11151115

11161116

1117+
def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure_transform(mock_name, mock_value, config):
1118+
success = f"/dev/{mock_name}"
1119+
fail = f"/prod/{mock_name}"
1120+
params = {success: {}, fail: {}}
1121+
param_names = list(params.keys())
1122+
expected_value = {"value": mock_value}
1123+
stub_params = {success: json.dumps(expected_value)}
1124+
1125+
expected_stub_response = build_get_parameters_stub(params=stub_params, invalid_parameters=[fail])
1126+
expected_stub_params = {"Names": param_names}
1127+
1128+
provider = parameters.SSMProvider(boto_config=config)
1129+
stubber = stub.Stubber(provider.client)
1130+
stubber.add_response("get_parameters", expected_stub_response, expected_stub_params)
1131+
stubber.activate()
1132+
1133+
try:
1134+
ret = provider.get_parameters_by_name(parameters=params, transform="json", raise_on_error=False)
1135+
1136+
stubber.assert_no_pending_responses()
1137+
assert ret[success] == expected_value
1138+
assert ret["_errors"]
1139+
assert len(ret["_errors"]) == 1
1140+
assert fail not in ret
1141+
finally:
1142+
stubber.deactivate()
1143+
1144+
11171145
def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure_with_decrypt(mock_name, config):
11181146
# GIVEN one parameter requires decryption and an arbitrary SDK error occurs
11191147
param = f"/{mock_name}"

0 commit comments

Comments
 (0)