Skip to content

Commit 0d17484

Browse files
authored
Improve join performance (#3906)
1 parent c58d38a commit 0d17484

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/cfnlint/jsonschema/_resolvers_cfn.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,12 @@ def _join_expansion(validator: Validator, instances: Any) -> Iterator[Any]:
293293
yield [value]
294294
return
295295

296-
for value, _, _ in validator.resolve_value(instances[0]):
296+
for value, instance_validator, errs in validator.resolve_value(instances[0]):
297+
if errs:
298+
continue
297299
if not isinstance(value, (str, int, float, bool)):
298300
raise ValueError(f"Incorrect value type for {value!r}")
299-
for values in _join_expansion(validator, instances[1:]):
301+
for values in _join_expansion(instance_validator, instances[1:]):
300302
yield [value] + values
301303

302304

test/unit/module/jsonschema/test_resolvers_cfn.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,20 @@ def test_invalid_functions(name, instance, response):
553553
{"Fn::Sub": "${MyResource.Arn}"},
554554
[],
555555
),
556+
(
557+
"Fn::Join uses previous values when doing resolution",
558+
{"Fn::Join": ["-", [{"Ref": "Environment"}, {"Ref": "Environment"}]]},
559+
[
560+
("dev-dev", deque(), None),
561+
("test-test", deque(), None),
562+
("prod-prod", deque(), None),
563+
],
564+
),
565+
(
566+
"Fn::Join using a few values with a bad Ref",
567+
{"Fn::Join": ["-", [{"Ref": "Environment"}, {"Ref": "DNE"}]]},
568+
[],
569+
),
556570
],
557571
)
558572
def test_valid_functions(name, instance, response):

0 commit comments

Comments
 (0)