Skip to content

Commit 5cb5b59

Browse files
committed
fix: Decouple samtranslator.models and *.intrinsics and add import tests (#2977)
1 parent 480be09 commit 5cb5b59

File tree

6 files changed

+139
-100
lines changed

6 files changed

+139
-100
lines changed

samtranslator/internal/intrinsics.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from typing import Any, Dict, Optional, Union
2+
3+
from samtranslator.intrinsics.resolver import IntrinsicsResolver
4+
from samtranslator.model.exceptions import InvalidResourceException
5+
6+
7+
def resolve_string_parameter_in_resource(
8+
logical_id: str,
9+
intrinsics_resolver: IntrinsicsResolver,
10+
parameter_value: Optional[Union[str, Dict[str, Any]]],
11+
parameter_name: str,
12+
) -> Optional[Union[str, Dict[str, Any]]]:
13+
"""Try to resolve values in a resource from template parameters."""
14+
if not parameter_value:
15+
return parameter_value
16+
value = intrinsics_resolver.resolve_parameter_refs(parameter_value)
17+
18+
if not isinstance(value, str) and not isinstance(value, dict):
19+
raise InvalidResourceException(
20+
logical_id,
21+
"Could not resolve parameter for '{}' or parameter is not a String.".format(parameter_name),
22+
)
23+
return value

samtranslator/model/__init__.py

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
import inspect
33
import re
44
from abc import ABC, ABCMeta, abstractmethod
5-
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
5+
from typing import Any, Callable, Dict, List, Optional, Tuple
66

7-
from samtranslator.intrinsics.resolver import IntrinsicsResolver
87
from samtranslator.model.exceptions import ExpectedType, InvalidResourceException, InvalidResourcePropertyTypeException
98
from samtranslator.model.tags.resource_tagging import get_tag_list
109
from samtranslator.model.types import IS_DICT, IS_STR, Validator, any_type, is_type
@@ -502,23 +501,6 @@ def _check_tag(self, reserved_tag_name, tags): # type: ignore[no-untyped-def]
502501
"input.",
503502
)
504503

505-
def _resolve_string_parameter(
506-
self,
507-
intrinsics_resolver: IntrinsicsResolver,
508-
parameter_value: Optional[Union[str, Dict[str, Any]]],
509-
parameter_name: str,
510-
) -> Optional[Union[str, Dict[str, Any]]]:
511-
if not parameter_value:
512-
return parameter_value
513-
value = intrinsics_resolver.resolve_parameter_refs(parameter_value)
514-
515-
if not isinstance(value, str) and not isinstance(value, dict):
516-
raise InvalidResourceException(
517-
self.logical_id,
518-
"Could not resolve parameter for '{}' or parameter is not a String.".format(parameter_name),
519-
)
520-
return value
521-
522504

523505
class ResourceTypeResolver:
524506
"""ResourceTypeResolver maps Resource Types to Resource classes, e.g. AWS::Serverless::Function to

samtranslator/model/sam_resources.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import samtranslator.model.eventsources.push
1010
import samtranslator.model.eventsources.scheduler
1111
from samtranslator.feature_toggle.feature_toggle import FeatureToggle
12+
from samtranslator.internal.intrinsics import resolve_string_parameter_in_resource
1213
from samtranslator.intrinsics.resolver import IntrinsicsResolver
1314
from samtranslator.metrics.method_decorator import cw_timer
1415
from samtranslator.model import (
@@ -1591,11 +1592,17 @@ def _construct_lambda_layer(self, intrinsics_resolver: IntrinsicsResolver) -> La
15911592
:rtype: list
15921593
"""
15931594
# Resolve intrinsics if applicable:
1594-
self.LayerName = self._resolve_string_parameter(intrinsics_resolver, self.LayerName, "LayerName")
1595-
self.LicenseInfo = self._resolve_string_parameter(intrinsics_resolver, self.LicenseInfo, "LicenseInfo")
1596-
self.Description = self._resolve_string_parameter(intrinsics_resolver, self.Description, "Description")
1597-
self.RetentionPolicy = self._resolve_string_parameter(
1598-
intrinsics_resolver, self.RetentionPolicy, "RetentionPolicy"
1595+
self.LayerName = resolve_string_parameter_in_resource(
1596+
self.logical_id, intrinsics_resolver, self.LayerName, "LayerName"
1597+
)
1598+
self.LicenseInfo = resolve_string_parameter_in_resource(
1599+
self.logical_id, intrinsics_resolver, self.LicenseInfo, "LicenseInfo"
1600+
)
1601+
self.Description = resolve_string_parameter_in_resource(
1602+
self.logical_id, intrinsics_resolver, self.Description, "Description"
1603+
)
1604+
self.RetentionPolicy = resolve_string_parameter_in_resource(
1605+
self.logical_id, intrinsics_resolver, self.RetentionPolicy, "RetentionPolicy"
15991606
)
16001607

16011608
# If nothing defined, this will be set to Retain

0 commit comments

Comments
 (0)