def _validate(self, sam_template, parameter_values): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template :param dict parameter_values: Dictionary of parameter values provided by the user """ if parameter_values is None: raise ValueError("`parameter_values` argument is required") if ("Resources" not in sam_template or not isinstance(sam_template["Resources"], dict) or not sam_template["Resources"]): raise InvalidDocumentException( [InvalidTemplateException("'Resources' section is required")]) if (not all(isinstance(sam_resource, dict) for sam_resource in sam_template["Resources"].values())): raise InvalidDocumentException( [InvalidTemplateException( "All 'Resources' must be Objects. If you're using YAML, this may be an " "indentation issue." )]) sam_template_instance = SamTemplate(sam_template) for resource_logical_id, sam_resource in sam_template_instance.iterate(): # NOTE: Properties isn't required for SimpleTable, so we can't check # `not isinstance(sam_resources.get("Properties"), dict)` as this would be a breaking change. # sam_resource.properties defaults to {} in SamTemplate init if (not isinstance(sam_resource.properties, dict)): raise InvalidDocumentException( [InvalidResourceException(resource_logical_id, "All 'Resources' must be Objects and have a 'Properties' Object. If " "you're using YAML, this may be an indentation issue." )]) SamTemplateValidator.validate(sam_template)
def _validate(self, sam_template): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template """ if "Resources" not in sam_template or not isinstance(sam_template["Resources"], dict) \ or not sam_template["Resources"]: raise InvalidDocumentException( [InvalidTemplateException("'Resources' section is required")]) SamTemplateValidator.validate(sam_template)
def _validate(self, sam_template): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template """ if "Resources" not in sam_template or not isinstance(sam_template["Resources"], dict) \ or not sam_template["Resources"]: raise InvalidDocumentException( [InvalidTemplateException("'Resources' section is required")]) SamTemplateValidator.validate(sam_template)
def _validate(self, sam_template, parameter_values): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template :param dict parameter_values: Dictionary of parameter values provided by the user """ if parameter_values is None: raise ValueError("`parameter_values` argument is required") if "Resources" not in sam_template or not isinstance( sam_template["Resources"], dict) or not sam_template["Resources"]: raise InvalidDocumentException( [InvalidTemplateException("'Resources' section is required")]) SamTemplateValidator.validate(sam_template)
def test_validate_template_success(testcase): # These templates are failing validation, will fix schema one at a time excluded = [ 'api_endpoint_configuration', 'api_with_binary_media_types', 'api_with_cors', 'cloudwatch_logs_with_ref', 'sns', 'sns_existing_other_subscription', 'sns_topic_outside_template', 'alexa_skill', 'iot_rule', 'function_managed_inline_policy', 'unsupported_resources', 'intrinsic_functions', 'basic_function_with_tags', 'function_with_kmskeyarn', 'function_with_alias', 'function_with_alias_intrinsics', 'function_with_disabled_deployment_preference', 'function_with_deployment_preference', 'function_with_deployment_preference_all_parameters', 'function_with_deployment_preference_multiple_combinations', 'function_with_alias_and_event_sources', 'function_with_resource_refs', 'function_with_policy_templates', 'globals_for_function', 'all_policy_templates', 'simple_table_ref_parameter_intrinsic', 'simple_table_with_table_name', 'function_concurrency', 'simple_table_with_extra_tags' ] if testcase in excluded: return manifest = yaml_parse( open(os.path.join(input_folder, testcase + '.yaml'), 'r')) validation_errors = SamTemplateValidator.validate(manifest) has_errors = len(validation_errors) if has_errors: print("\nFailing template: {0}\n".format(testcase)) print(validation_errors) assert len(validation_errors) == 0
def _validate(self, sam_template, parameter_values): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template :param dict parameter_values: Dictionary of parameter values provided by the user """ if parameter_values is None: raise ValueError("`parameter_values` argument is required") if ( "Resources" not in sam_template or not isinstance(sam_template["Resources"], dict) or not sam_template["Resources"] ): raise InvalidDocumentException([InvalidTemplateException("'Resources' section is required")]) if not all(isinstance(sam_resource, dict) for sam_resource in sam_template["Resources"].values()): raise InvalidDocumentException( [ InvalidTemplateException( "All 'Resources' must be Objects. If you're using YAML, this may be an " "indentation issue." ) ] ) sam_template_instance = SamTemplate(sam_template) for resource_logical_id, sam_resource in sam_template_instance.iterate(): # NOTE: Properties isn't required for SimpleTable, so we can't check # `not isinstance(sam_resources.get("Properties"), dict)` as this would be a breaking change. # sam_resource.properties defaults to {} in SamTemplate init if not isinstance(sam_resource.properties, dict): raise InvalidDocumentException( [ InvalidResourceException( resource_logical_id, "All 'Resources' must be Objects and have a 'Properties' Object. If " "you're using YAML, this may be an indentation issue.", ) ] ) SamTemplateValidator.validate(sam_template)
def _validate(self, sam_template, parameter_values): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template :param dict parameter_values: Dictionary of parameter values provided by the user """ if parameter_values is None: raise ValueError("`parameter_values` argument is required") if "Resources" not in sam_template or not isinstance(sam_template["Resources"], dict) or not sam_template["Resources"]: raise InvalidDocumentException( [InvalidTemplateException("'Resources' section is required")]) validation_errors = SamTemplateValidator.validate(sam_template)
def test_validate_template_success(testcase): # These templates are failing validation, will fix schema one at a time excluded = [ "api_endpoint_configuration", "api_endpoint_configuration_with_vpcendpoint", "api_with_binary_media_types", "api_with_minimum_compression_size", "api_with_cors", "cloudwatch_logs_with_ref", "sns", "sns_existing_other_subscription", "sns_topic_outside_template", "alexa_skill", "iot_rule", "function_managed_inline_policy", "unsupported_resources", "intrinsic_functions", "basic_function_with_tags", "function_with_kmskeyarn", "function_with_alias", "function_with_alias_intrinsics", "function_with_disabled_deployment_preference", "function_with_deployment_preference", "function_with_deployment_preference_all_parameters", "function_with_deployment_preference_from_parameters", "function_with_deployment_preference_multiple_combinations", "function_with_alias_and_event_sources", "function_with_resource_refs", "function_with_policy_templates", "globals_for_function", "all_policy_templates", "simple_table_ref_parameter_intrinsic", "simple_table_with_table_name", "function_concurrency", "simple_table_with_extra_tags", ] if testcase in excluded: return manifest = yaml_parse(open(os.path.join(INPUT_FOLDER, testcase + ".yaml"), "r")) validation_errors = SamTemplateValidator.validate(manifest) has_errors = len(validation_errors) if has_errors: print("\nFailing template: {0}\n".format(testcase)) print(validation_errors) assert len(validation_errors) == 0
def test_validate_template_success(testcase): # These templates are failing validation, will fix schema one at a time excluded = [ 'api_endpoint_configuration', 'api_with_binary_media_types', 'api_with_minimum_compression_size', 'api_with_cors', 'cloudwatch_logs_with_ref', 'sns', 'sns_existing_other_subscription', 'sns_topic_outside_template', 'alexa_skill', 'iot_rule', 'function_managed_inline_policy', 'unsupported_resources', 'intrinsic_functions', 'basic_function_with_tags', 'function_with_kmskeyarn', 'function_with_alias', 'function_with_alias_intrinsics', 'function_with_disabled_deployment_preference', 'function_with_deployment_preference', 'function_with_deployment_preference_all_parameters', 'function_with_deployment_preference_multiple_combinations', 'function_with_alias_and_event_sources', 'function_with_resource_refs', 'function_with_policy_templates', 'globals_for_function', 'all_policy_templates', 'simple_table_ref_parameter_intrinsic', 'simple_table_with_table_name', 'function_concurrency', 'simple_table_with_extra_tags' ] if testcase in excluded: return manifest = yaml_parse(open(os.path.join(INPUT_FOLDER, testcase + '.yaml'), 'r')) validation_errors = SamTemplateValidator.validate(manifest) has_errors = len(validation_errors) if has_errors: print("\nFailing template: {0}\n".format(testcase)) print(validation_errors) assert len(validation_errors) == 0
def _validate(self, sam_template, parameter_values): """ Validates the template and parameter values and raises exceptions if there's an issue :param dict sam_template: SAM template :param dict parameter_values: Dictionary of parameter values provided by the user """ if parameter_values is None: raise ValueError("`parameter_values` argument is required") if "Resources" not in sam_template or not isinstance( sam_template["Resources"], dict) or not sam_template["Resources"]: raise InvalidDocumentException( [InvalidTemplateException("'Resources' section is required")]) validation_errors = SamTemplateValidator.validate(sam_template) has_errors = len(validation_errors) if has_errors: # NOTE: eventually we will throw on invalid schema # raise InvalidDocumentException([InvalidTemplateException(validation_errors)]) logging.warning( "JSON_VALIDATION_WARNING: {0}".format(validation_errors))