Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion aws_lambda_powertools/utilities/parameters/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,9 @@ def get_multiple(
raise GetParameterError(str(exc))

if transform:
values.update(transform_value(values, transform, raise_on_transform_error))
values.update(
transform_value(value=values, transform=transform, raise_on_transform_error=raise_on_transform_error),
)

self.add_to_cache(key=key, value=values, max_age=max_age)

Expand Down
6 changes: 3 additions & 3 deletions aws_lambda_powertools/utilities/parameters/ssm.py
Original file line number Diff line number Diff line change
Expand Up @@ -650,13 +650,13 @@ def _transform_and_cache_get_parameters_response(
name = parameter["Name"]
value = parameter["Value"]
options = parameters[name]
transform = options.get("transform")
transform = options["transform"]

# NOTE: If transform is set, we do it before caching to reduce number of operations
if transform:
value = transform_value(name, value, transform, raise_on_error) # type: ignore
value = transform_value(value=value, transform=transform, raise_on_transform_error=raise_on_error) # type: ignore[assignment]

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

response[name] = value
Expand Down
28 changes: 28 additions & 0 deletions tests/functional/parameters/_boto3/test_utilities_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -1114,6 +1114,34 @@ def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure(mock_name,
stubber.deactivate()


def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure_transform(mock_name, mock_value, config):
success = f"/dev/{mock_name}"
fail = f"/prod/{mock_name}"
params = {success: {}, fail: {}}
param_names = list(params.keys())
expected_value = {"value": mock_value}
stub_params = {success: json.dumps(expected_value)}

expected_stub_response = build_get_parameters_stub(params=stub_params, invalid_parameters=[fail])
expected_stub_params = {"Names": param_names}

provider = parameters.SSMProvider(boto_config=config)
stubber = stub.Stubber(provider.client)
stubber.add_response("get_parameters", expected_stub_response, expected_stub_params)
stubber.activate()

try:
ret = provider.get_parameters_by_name(parameters=params, transform="json", raise_on_error=False)

stubber.assert_no_pending_responses()
assert ret[success] == expected_value
assert ret["_errors"]
assert len(ret["_errors"]) == 1
assert fail not in ret
finally:
stubber.deactivate()


def test_ssm_provider_get_parameters_by_name_do_not_raise_on_failure_with_decrypt(mock_name, config):
# GIVEN one parameter requires decryption and an arbitrary SDK error occurs
param = f"/{mock_name}"
Expand Down