Skip to content

Commit ea5c094

Browse files
authored
fix(parameters): fix variable shadowing in SSM parameter chunking (#8006)
1 parent bdd2d1f commit ea5c094

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

aws_lambda_powertools/utilities/parameters/ssm.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -583,12 +583,12 @@ def _get_parameters_by_name_in_chunks(
583583
diff = {key: value for key, value in batch.items() if key not in cache}
584584

585585
for chunk in slice_dictionary(data=diff, chunk_size=self._MAX_GET_PARAMETERS_ITEM):
586-
response, possible_errors = self._get_parameters_by_name(
586+
chunk_response, possible_errors = self._get_parameters_by_name(
587587
parameters=chunk,
588588
raise_on_error=raise_on_error,
589589
decrypt=decrypt,
590590
)
591-
response.update(response)
591+
response.update(chunk_response)
592592
errors.extend(possible_errors)
593593

594594
return response, errors

tests/functional/parameters/_boto3/test_utilities_parameters.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2347,6 +2347,26 @@ def _get_parameters_by_name(
23472347
parameters.get_parameters_by_name(parameters=params)
23482348

23492349

2350+
def test_get_parameters_by_name_chunks(monkeypatch, config):
2351+
# GIVEN a batch of 12 parameters (more than max batch size of 10)
2352+
params = {f"param{i}": {} for i in range(12)}
2353+
2354+
class TestProvider(SSMProvider):
2355+
def __init__(self, boto_config: Config = config, **kwargs):
2356+
super().__init__(boto_config=boto_config, **kwargs)
2357+
2358+
def _get_parameters_by_name(self, parameters, raise_on_error=True, decrypt=False):
2359+
return {name: f"val_{name}" for name in parameters}, []
2360+
2361+
monkeypatch.setitem(parameters.base.DEFAULT_PROVIDERS, "ssm", TestProvider())
2362+
2363+
# WHEN get_parameters_by_name is called
2364+
result = parameters.get_parameters_by_name(parameters=params)
2365+
2366+
# THEN all parameters should be returned across chunks
2367+
assert len(result) == 12
2368+
2369+
23502370
def test_get_parameters_by_name_cache(monkeypatch, mock_name, mock_value, config):
23512371
# GIVEN we have a parameter to fetch but is already in cache
23522372
params = {mock_name: {}}

0 commit comments

Comments
 (0)