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

Move rule to E2532 to E3601 #3502

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
850 changes: 850 additions & 0 deletions src/cfnlint/data/schemas/other/step_functions/statemachine.json

Large diffs are not rendered by default.

202 changes: 0 additions & 202 deletions src/cfnlint/rules/resources/stepfunctions/StateMachine.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: MIT-0
"""

from __future__ import annotations

import json
from typing import Any

import cfnlint.data.schemas.other.resources
import cfnlint.data.schemas.other.step_functions
import cfnlint.helpers
from cfnlint.jsonschema import ValidationError, ValidationResult, Validator
from cfnlint.rules.jsonschema.CfnLintJsonSchema import CfnLintJsonSchema, SchemaDetails
from cfnlint.schema.resolver import RefResolver


class StateMachineDefinition(CfnLintJsonSchema):
id = "E3601"
shortdesc = "Validate the structure of a StateMachine definition"
description = (
"Validate the Definition or DefinitionString inside a "
"AWS::StepFunctions::StateMachine resource"
)
source_url = "https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-state-machine-structure.html"
tags = ["resources", "statemachine"]

def __init__(self):
super().__init__(
keywords=[
"Resources/AWS::StepFunctions::StateMachine/Properties/Definition",
"Resources/AWS::StepFunctions::StateMachine/Properties/DefinitionString",
],
schema_details=SchemaDetails(
cfnlint.data.schemas.other.step_functions, "statemachine.json"
),
all_matches=True,
)

store = {
"definition": self.schema,
}

self.resolver = RefResolver.from_schema(self.schema, store=store)

def _fix_message(self, err: ValidationError) -> ValidationError:
if len(err.path) > 1:
err.message = f"{err.message} at {'/'.join(err.path)!r}"
for i, c_err in enumerate(err.context):
err.context[i] = self._fix_message(c_err)

Check warning on line 51 in src/cfnlint/rules/resources/stepfunctions/StateMachineDefinition.py

View check run for this annotation

Codecov / codecov/patch

src/cfnlint/rules/resources/stepfunctions/StateMachineDefinition.py#L51

Added line #L51 was not covered by tests
return err

def validate(
self, validator: Validator, keywords: Any, instance: Any, schema: dict[str, Any]
) -> ValidationResult:
# First time child rules are configured against the rule
# so we can run this now
add_path_to_message = False
if validator.is_type(instance, "string"):
try:
step_validator = validator.evolve(
context=validator.context.evolve(
functions=[],
),
resolver=self.resolver,
schema=self.schema,
)
instance = json.loads(instance)
add_path_to_message = True
except json.JSONDecodeError:
return
else:
step_validator = validator.evolve(
resolver=self.resolver,
schema=self.schema,
)

for err in step_validator.iter_errors(instance):
if add_path_to_message:
err = self._fix_message(err)
if not err.validator.startswith("fn_") and err.validator not in ["cfnLint"]:
err.rule = self

yield self._clean_error(err)

This file was deleted.

Loading
Loading