Skip to content

Commit

Permalink
fix: wrong cast of !Ref when using CommaDelimitedList (#6768)
Browse files Browse the repository at this point in the history
* fix: wrong cast of !Ref when using CommaDelimitedList

* Add unit tests, keep supporting using an array

* Format files

---------

Co-authored-by: Daniel Mil <[email protected]>
Co-authored-by: Haresh Nasit <[email protected]>
  • Loading branch information
3 people authored Mar 26, 2024
1 parent 0f6fc45 commit 9ecb3b1
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
12 changes: 12 additions & 0 deletions samcli/lib/intrinsic_resolver/intrinsics_symbol_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ class IntrinsicsSymbolTable:
CFN_RESOURCE_PROPERTIES = "Properties"
CFN_LAMBDA_FUNCTION_NAME = "FunctionName"

COMMA_DELIMITED_LIST = "CommaDelimitedList"

def __init__(
self, template=None, logical_id_translator=None, default_type_resolver=None, common_attribute_resolver=None
):
Expand Down Expand Up @@ -324,6 +326,16 @@ def get_translation(self, logical_id, resource_attributes=IntrinsicResolver.REF)
if any(isinstance(logical_id_item, object_type) for object_type in [str, list, bool, int]):
if resource_attributes not in (IntrinsicResolver.REF, ""):
return None
parameter_info = self._parameters.get(logical_id)
if (
parameter_info
and parameter_info.get(IntrinsicsSymbolTable.CFN_RESOURCE_TYPE)
== IntrinsicsSymbolTable.COMMA_DELIMITED_LIST
and isinstance(logical_id_item, str)
):
# If the reference is a comma-delimited list represented as a string,
# return the reference as a list of items instead
return [item.strip() for item in logical_id_item.split(",")]
return logical_id_item

return logical_id_item.get(resource_attributes)
Expand Down
14 changes: 14 additions & 0 deletions tests/unit/lib/intrinsic_resolver/test_intrinsics_symbol_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from unittest.mock import patch

from parameterized import parameterized

from samcli.lib.intrinsic_resolver.invalid_intrinsic_exception import InvalidSymbolException
from samcli.lib.intrinsic_resolver.intrinsic_property_resolver import IntrinsicResolver
from samcli.lib.intrinsic_resolver.intrinsics_symbol_table import IntrinsicsSymbolTable
Expand Down Expand Up @@ -103,6 +105,18 @@ def test_unknown_symbol_translation(self):
res = symbol_resolver.get_translation("UNKNOWN MAP")
self.assertEqual(res, None)

@parameterized.expand([(["my-origin.com", "my-second-origin.com"],), ("my-origin.com, my-second-origin.com",)])
def test_comma_delimited_list(self, logical_id_translator_target):
template = {
"Parameters": {"Test": {"Default": "my-origin.com,my-second-origin.com", "Type": "CommaDelimitedList"}},
}

symbol_resolver = IntrinsicsSymbolTable(
template=template, logical_id_translator={"Test": logical_id_translator_target}
)
res = symbol_resolver.get_translation("Test")
self.assertEqual(res, ["my-origin.com", "my-second-origin.com"])

def test_basic_symbol_translation(self):
symbol_resolver = IntrinsicsSymbolTable(template={}, logical_id_translator={"item": "test"})
res = symbol_resolver.get_translation("item")
Expand Down

0 comments on commit 9ecb3b1

Please sign in to comment.