Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Decouple samtranslator.models and *.intrinsics and add import tests #2977

Merged
merged 10 commits into from
Feb 28, 2023
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
18 changes: 0 additions & 18 deletions samtranslator/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
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 @@ -86,6 +86,7 @@
from .packagetype import IMAGE, ZIP
from .s3_utils.uri_parser import construct_image_code_object, construct_s3_location_object
from .tags.resource_tagging import get_tag_list
from ..internal.intrinsics import resolve_string_parameter_in_resource

_CONDITION_CHAR_LIMIT = 255

Expand Down Expand Up @@ -1571,11 +1572,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