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 c3c04dd commit 2ba5048
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 @@ -3,12 +3,11 @@
import re
from abc import ABC, ABCMeta, abstractmethod
from contextlib import suppress
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar, Union
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar

from pydantic import BaseModel
from pydantic.error_wrappers import ValidationError

from samtranslator.intrinsics.resolver import IntrinsicsResolver
from samtranslator.model.exceptions import (
ExpectedType,
InvalidResourceException,
Expand Down Expand Up @@ -544,23 +543,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.internal.types import GetManagedPolicyMap
from samtranslator.intrinsics.resolver import IntrinsicsResolver
from samtranslator.metrics.method_decorator import cw_timer
Expand Down Expand Up @@ -1574,11 +1575,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 2ba5048

Please sign in to comment.