def parse(filename): template = None template_lines = None try: (template, template_lines) = cfn_yaml.load(filename) if not template or not is_checked_sls_template(template): return except IOError as e: if e.errno == 2: logger.error('Template file not found: %s', filename) return elif e.errno == 21: logger.error('Template references a directory, not a file: %s', filename) return elif e.errno == 13: logger.error('Permission denied when accessing template file: %s', filename) return except UnicodeDecodeError: logger.error('Cannot read file contents: %s', filename) return except YAMLError as e: print(e) return process_variables(template, filename) return template, template_lines
def parse( filename: str, out_parsing_errors: Optional[Dict[str, str]] = None ) -> Union[Tuple[DictNode, List[Tuple[int, str]]], Tuple[None, None]]: """ Decode filename into an object """ template = None template_lines = None error = None if out_parsing_errors is None: out_parsing_errors = {} try: (template, template_lines) = cfn_yaml.load(filename, cfn_yaml.ContentType.CFN) except IOError as err: if err.errno == 2: error = f"Template file not found: {filename} - {err}" LOGGER.error(error) elif err.errno == 21: error = f"Template references a directory, not a file: {filename} - {err}" LOGGER.error(error) elif err.errno == 13: error = f"Permission denied when accessing template file: {filename} - {err}" LOGGER.error(error) except UnicodeDecodeError as err: error = f"Cannot read file contents: {filename} - {err}" LOGGER.error(error) except cfn_yaml.CfnParseError as err: if "Null value at" in err.message: LOGGER.info(f"Null values do not exist in CFN templates: {filename} - {err}") return None, None error = f"Parsing error in file: {filename} - {err}" LOGGER.info(error) except ValueError as err: error = f"Parsing error in file: {filename} - {err}" LOGGER.info(error) except ScannerError as err: if err.problem in ["found character '\\t' that cannot start any token", "found unknown escape character"]: try: (template, template_lines) = json_parse(filename, allow_nulls=False) except Exception as json_err: # pylint: disable=W0703 error = f"Template {filename} is malformed: {err.problem}. Tried to parse {filename} as JSON but got error: {json_err}" LOGGER.info(error) except YAMLError as err: error = f"Parsing error in file: {filename} - {err}" LOGGER.info(error) if error: out_parsing_errors[filename] = error if isinstance(template, dict): resources = template.get(TemplateSections.RESOURCES.value, None) if resources: if "__startline__" in resources: del resources["__startline__"] if "__endline__" in resources: del resources["__endline__"] return template, template_lines
def parse(filename): """ Decode filename into an object """ template = None template_lines = None try: (template, template_lines) = cfn_yaml.load(filename) except IOError as e: if e.errno == 2: LOGGER.error('Template file not found: %s', filename) elif e.errno == 21: LOGGER.error('Template references a directory, not a file: %s', filename) elif e.errno == 13: LOGGER.error('Permission denied when accessing template file: %s', filename) except UnicodeDecodeError as err: LOGGER.error('Cannot read file contents: %s', filename) except cfn_yaml.CfnParseError as err: pass except ScannerError as err: if err.problem in [ 'found character \'\\t\' that cannot start any token', 'found unknown escape character' ]: try: (template, template_lines) = cfn_json.load(filename) except cfn_json.JSONDecodeError: pass except JSONDecodeError: pass except Exception as json_err: # pylint: disable=W0703 LOGGER.error('Template %s is malformed: %s', filename, err.problem) LOGGER.error('Tried to parse %s as JSON but got error: %s', filename, str(json_err)) except YAMLError as err: pass return template, template_lines