in samtranslator/model/connector_profiles/profile.py [0:0]
def _profile_replace_str(s: Any, replacements: Dict[str, Any]): # type: ignore[no-untyped-def]
if not isinstance(s, str):
return s
res = {}
for k, v in replacements.items():
pattern = "%{" + k + "}"
# !Sub doesn't allow special characters in variable names
sub_var_name = _sanitize(k)
replaced_pattern = "${" + sub_var_name + "}"
if pattern in s and v is None:
raise ValueError(f"{k} is missing.")
if pattern == s:
# s and pattern match exactly, simply return replacement string
return v
if pattern in s:
# pattern is substring of s, use Fn::Sub to replace part of s
s = s.replace(pattern, replaced_pattern)
res[sub_var_name] = v
if re.search(r"\${.+}", s):
# As long as the string has a ${..}, it needs sub.
if res:
return {"Fn::Sub": [s, res]}
return {"Fn::Sub": s}
return s