-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Add resource property validation framework to SAM translator. #3805
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
base: develop
Are you sure you want to change the base?
Conversation
The Tests failed because of lower coverage percentage. (94.82% instead of 95%). Added validation logic push the overall total line increase and lower the coverage percentage. Low coverage files: Removing deprecated and unused |
Current usage analysis: What IS being used: However, we cannot delete this file yet because this public facing interface might be used by package consuming this package.
|
188db2a
to
b52c322
Compare
# def get_property_validation_rules(self) -> Optional[PropertyRules]: | ||
# """Override to provide PropertyRules validation for SAM Function.""" | ||
# TODO: To enable these rules, we need to update translator test input/output files to property configure template | ||
# to avoid fail-fast. eg: test with DeploymentPreference without AutoPublishAlias would fail fast before reaching testing state | ||
# from samtranslator.internal.schema_source.aws_serverless_function import Properties as FunctionProperties | ||
# return (PropertyRules(FunctionProperties) | ||
# .addMutuallyExclusive("ImageUri", "InlineCode", "CodeUri") | ||
# .addConditionalInclusive("DeploymentPreference", ["AutoPublishAlias"]) | ||
# .addConditionalInclusive("ProvisionedConcurrencyConfig", ["AutoPublishAlias"]) | ||
# .addConditionalInclusive("PackageType=Zip", ["Runtime", "Handler"]) | ||
# .addConditionalInclusive("PackageType=Image", ["ImageUri"]) | ||
# .addConditionalExclusive("PackageType=Zip", ["ImageUri", "ImageConfig"]) | ||
# .addConditionalExclusive("PackageType=Image", ["Runtime", "Handler", "Layers"])) | ||
# return None | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we plan to leave this here, commented out?
# TODO: Skip pass schema_class=aws_serverless_function.Properties to skip schema validation for now. | ||
# - adding this now would required update error message in error error_function_*_test.py | ||
# - add this when we can verify that changing error message would not break customers | ||
# self.validate_before_transform(schema_class=aws_serverless_function.Properties) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is this validate_before_transform
that appears here? Is it defined somewhere else?
missing = [prop for prop in target_props if not self._check_property_condition(validated_model, prop)] | ||
if missing: | ||
missing_props = ", ".join(f"'{p}'" for p in missing) | ||
return f"'{source_props[0]}' requires all of: {missing_props}." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is source_props
only of length 1?
If so, can you change line 101 to just take the first one from source_props
instead of loop over the array?
Or if we want to still keep it extensible, we would have to change this error here to point to the all the source_props
(or the right one), instead of just using source_props[0]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same for conditional_exclusive
mock_attr1 = Mock() | ||
mock_attr2 = Mock() | ||
mock_attr1.return_value = "value1" | ||
mock_attr2.return_value = "value2" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not necessary (and I don't know how much it's used in other places, but you can also set the return value right away:
mock_attr1 = Mock(return_value="value1")
mock_attr2 = Mock(return_value="value2")
Issue #, if available
None
Description of changes
This PR introduces a comprehensive validation framework for SAM resource properties, and enhancing the translator's ability to catch configuration errors early in the deployment process.
validation
Description of how you validated changes
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.