Skip to content

Commit eaebc8b

Browse files
author
Ran Isenberg
committed
fix: parameters: fix return type to bytes in internal function
1 parent 5070769 commit eaebc8b

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

aws_lambda_powertools/utilities/parameters/appconfig.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def _get(self, name: str, **sdk_options) -> str:
104104
sdk_options["ClientId"] = CLIENT_ID
105105

106106
response = self.client.get_configuration(**sdk_options)
107-
return response["Content"].read().decode("utf-8") # read() of botocore.response.StreamingBody
107+
return response["Content"].read() # read() of botocore.response.StreamingBody
108108

109109
def _get_multiple(self, path: str, **sdk_options) -> Dict[str, str]:
110110
"""
@@ -121,7 +121,7 @@ def get_app_config(
121121
force_fetch: bool = False,
122122
max_age: int = DEFAULT_MAX_AGE_SECS,
123123
**sdk_options
124-
) -> Union[str, list, dict]:
124+
) -> Union[str, list, dict, bytes]:
125125
"""
126126
Retrieve a configuration value from AWS App Config.
127127

aws_lambda_powertools/utilities/parameters/base.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,16 @@ def get(
9393
raise GetParameterError(str(exc))
9494

9595
if transform is not None:
96+
if isinstance(value, bytes):
97+
value = value.decode("utf-8")
9698
value = transform_value(value, transform)
9799

98100
self.store[key] = ExpirableValue(value, datetime.now() + timedelta(seconds=max_age))
99101

100102
return value
101103

102104
@abstractmethod
103-
def _get(self, name: str, **sdk_options) -> str:
105+
def _get(self, name: str, **sdk_options) -> bytes:
104106
"""
105107
Retrieve parameter value from the underlying parameter store
106108
"""

tests/functional/test_utilities_parameters.py

+29-3
Original file line numberDiff line numberDiff line change
@@ -1504,7 +1504,8 @@ def test_appconf_provider_get_configuration_no_transform(mock_name, config):
15041504

15051505
try:
15061506
value: str = provider.get(mock_name)
1507-
assert value == json.dumps(mock_body_json)
1507+
str_value = value.decode("utf-8")
1508+
assert str_value == json.dumps(mock_body_json)
15081509
stubber.assert_no_pending_responses()
15091510
finally:
15101511
stubber.deactivate()
@@ -1515,11 +1516,12 @@ def test_appconf_get_app_config_no_transform(monkeypatch, mock_name):
15151516
Test get_app_config()
15161517
"""
15171518
mock_body_json = {"myenvvar1": "Black Panther", "myenvvar2": 3}
1519+
mock_body_bytes = str.encode(json.dumps(mock_body_json))
15181520

15191521
class TestProvider(BaseProvider):
1520-
def _get(self, name: str, **kwargs) -> str:
1522+
def _get(self, name: str, **kwargs) -> bytes:
15211523
assert name == mock_name
1522-
return json.dumps(mock_body_json).encode("utf-8")
1524+
return mock_body_bytes
15231525

15241526
def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]:
15251527
raise NotImplementedError()
@@ -1531,6 +1533,30 @@ def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]:
15311533
value = parameters.get_app_config(mock_name, environment=environment, application=application)
15321534
str_value = value.decode("utf-8")
15331535
assert str_value == json.dumps(mock_body_json)
1536+
assert value == mock_body_bytes
1537+
1538+
1539+
def test_appconf_get_app_config_transform_json(monkeypatch, mock_name):
1540+
"""
1541+
Test get_app_config()
1542+
"""
1543+
mock_body_json = {"myenvvar1": "Black Panther", "myenvvar2": 3}
1544+
mock_body_bytes = str.encode(json.dumps(mock_body_json))
1545+
1546+
class TestProvider(BaseProvider):
1547+
def _get(self, name: str, **kwargs) -> str:
1548+
assert name == mock_name
1549+
return mock_body_bytes
1550+
1551+
def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]:
1552+
raise NotImplementedError()
1553+
1554+
monkeypatch.setitem(parameters.base.DEFAULT_PROVIDERS, "appconfig", TestProvider())
1555+
1556+
environment = "dev"
1557+
application = "myapp"
1558+
value = parameters.get_app_config(mock_name, environment=environment, application=application, transform="json")
1559+
assert value == mock_body_json
15341560

15351561

15361562
def test_appconf_get_app_config_new(monkeypatch, mock_name, mock_value):

0 commit comments

Comments
 (0)