Skip to content

Commit

Permalink
refactor: delete layer_linking, move to resource_linking (#4255)
Browse files Browse the repository at this point in the history
  • Loading branch information
torresxb1 authored Sep 21, 2022
1 parent 75870ab commit e33ad3e
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 106 deletions.
39 changes: 0 additions & 39 deletions samcli/hook_packages/terraform/hooks/prepare/layer_linking.py

This file was deleted.

35 changes: 35 additions & 0 deletions samcli/hook_packages/terraform/hooks/prepare/resource_linking.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,38 @@
Use Terraform plan to link resources together
e.g. linking layers to functions
"""

from typing import List


def _clean_references_list(references: List[str]) -> List[str]:
"""
Return a new copy of the complete references list.
e.g. given a list of references like
[
'aws_lambda_layer_version.layer1[0].arn',
'aws_lambda_layer_version.layer1[0]',
'aws_lambda_layer_version.layer1',
]
We want only the first complete reference ('aws_lambda_layer_version.layer1[0].arn')
Parameters
----------
references: List[str]
A list of reference strings
Returns
-------
List[str]
A copy of a cleaned list of reference strings
"""
cleaned_references = []
copied_references = sorted(references, reverse=True)
if not references:
return []
cleaned_references.append(copied_references[0])
for i in range(1, len(copied_references)):
if not cleaned_references[-1].startswith(copied_references[i]):
cleaned_references.append(copied_references[i])
return cleaned_references
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from copy import deepcopy
from unittest import TestCase

from parameterized import parameterized

from samcli.hook_packages.terraform.hooks.prepare.resource_linking import _clean_references_list


class TestResourceLinking(TestCase):
@parameterized.expand(
[
([], []),
(["aws_lambda_layer_version.layer1[0].arn"], ["aws_lambda_layer_version.layer1[0].arn"]),
(["aws_lambda_layer_version.layer1[0]"], ["aws_lambda_layer_version.layer1[0]"]),
(["aws_lambda_layer_version.layer1"], ["aws_lambda_layer_version.layer1"]),
(
[
"aws_lambda_layer_version.layer1[0].arn",
"aws_lambda_layer_version.layer1[0]",
"aws_lambda_layer_version.layer1",
],
["aws_lambda_layer_version.layer1[0].arn"],
),
(
[
"aws_lambda_layer_version.layer1[0].arn",
"aws_lambda_layer_version.layer1[0]",
"aws_lambda_layer_version.layer1",
"module.const_layer1.layer_arn",
"module.const_layer1",
"module.const_layer2.layer_arn",
"module.const_layer2",
],
[
"module.const_layer2.layer_arn",
"module.const_layer1.layer_arn",
"aws_lambda_layer_version.layer1[0].arn",
],
),
(
[
'aws_lambda_layer_version.layer1["key1"].arn',
'aws_lambda_layer_version.layer1["key1"]',
"aws_lambda_layer_version.layer1",
],
['aws_lambda_layer_version.layer1["key1"].arn'],
),
]
)
def test_clean_references_list(self, references, expected):
cleaned_references = _clean_references_list(references)
self.assertEqual(cleaned_references, expected)

def test_ensure_original_references_not_mutated(self):
references = [
"aws_lambda_layer_version.layer1[0].arn",
"aws_lambda_layer_version.layer1[0]",
"aws_lambda_layer_version.layer1",
"module.const_layer1.layer_arn",
"module.const_layer1",
"module.const_layer2.layer_arn",
"module.const_layer2",
]
original_references = deepcopy(references)
cleaned_references_list = _clean_references_list(references)
self.assertEqual(references, original_references)
self.assertNotEqual(references, cleaned_references_list)
67 changes: 0 additions & 67 deletions tests/unit/hook_packages/terraform/test_layer_linking.py

This file was deleted.

0 comments on commit e33ad3e

Please sign in to comment.