Skip to content

Commit

Permalink
fix: Decouple samtranslator.models and *.intrinsics and add import te…
Browse files Browse the repository at this point in the history
…sts (#2977)
  • Loading branch information
aahung committed Feb 28, 2023
1 parent 480be09 commit 5cb5b59
Show file tree
Hide file tree
Showing 6 changed files with 139 additions and 100 deletions.
23 changes: 23 additions & 0 deletions samtranslator/internal/intrinsics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from typing import Any, Dict, Optional, Union

from samtranslator.intrinsics.resolver import IntrinsicsResolver
from samtranslator.model.exceptions import InvalidResourceException


def resolve_string_parameter_in_resource(
logical_id: str,
intrinsics_resolver: IntrinsicsResolver,
parameter_value: Optional[Union[str, Dict[str, Any]]],
parameter_name: str,
) -> Optional[Union[str, Dict[str, Any]]]:
"""Try to resolve values in a resource from template parameters."""
if not parameter_value:
return parameter_value
value = intrinsics_resolver.resolve_parameter_refs(parameter_value)

if not isinstance(value, str) and not isinstance(value, dict):
raise InvalidResourceException(
logical_id,
"Could not resolve parameter for '{}' or parameter is not a String.".format(parameter_name),
)
return value
20 changes: 1 addition & 19 deletions samtranslator/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
import inspect
import re
from abc import ABC, ABCMeta, abstractmethod
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
from typing import Any, Callable, Dict, List, Optional, Tuple

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

def _resolve_string_parameter(
self,
intrinsics_resolver: IntrinsicsResolver,
parameter_value: Optional[Union[str, Dict[str, Any]]],
parameter_name: str,
) -> Optional[Union[str, Dict[str, Any]]]:
if not parameter_value:
return parameter_value
value = intrinsics_resolver.resolve_parameter_refs(parameter_value)

if not isinstance(value, str) and not isinstance(value, dict):
raise InvalidResourceException(
self.logical_id,
"Could not resolve parameter for '{}' or parameter is not a String.".format(parameter_name),
)
return value


class ResourceTypeResolver:
"""ResourceTypeResolver maps Resource Types to Resource classes, e.g. AWS::Serverless::Function to
Expand Down
17 changes: 12 additions & 5 deletions samtranslator/model/sam_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import samtranslator.model.eventsources.push
import samtranslator.model.eventsources.scheduler
from samtranslator.feature_toggle.feature_toggle import FeatureToggle
from samtranslator.internal.intrinsics import resolve_string_parameter_in_resource
from samtranslator.intrinsics.resolver import IntrinsicsResolver
from samtranslator.metrics.method_decorator import cw_timer
from samtranslator.model import (
Expand Down Expand Up @@ -1591,11 +1592,17 @@ def _construct_lambda_layer(self, intrinsics_resolver: IntrinsicsResolver) -> La
:rtype: list
"""
# Resolve intrinsics if applicable:
self.LayerName = self._resolve_string_parameter(intrinsics_resolver, self.LayerName, "LayerName")
self.LicenseInfo = self._resolve_string_parameter(intrinsics_resolver, self.LicenseInfo, "LicenseInfo")
self.Description = self._resolve_string_parameter(intrinsics_resolver, self.Description, "Description")
self.RetentionPolicy = self._resolve_string_parameter(
intrinsics_resolver, self.RetentionPolicy, "RetentionPolicy"
self.LayerName = resolve_string_parameter_in_resource(
self.logical_id, intrinsics_resolver, self.LayerName, "LayerName"
)
self.LicenseInfo = resolve_string_parameter_in_resource(
self.logical_id, intrinsics_resolver, self.LicenseInfo, "LicenseInfo"
)
self.Description = resolve_string_parameter_in_resource(
self.logical_id, intrinsics_resolver, self.Description, "Description"
)
self.RetentionPolicy = resolve_string_parameter_in_resource(
self.logical_id, intrinsics_resolver, self.RetentionPolicy, "RetentionPolicy"
)

# If nothing defined, this will be set to Retain
Expand Down
Loading

0 comments on commit 5cb5b59

Please sign in to comment.