def parse_toml_to_config(self, toml_data: Dict): if not toml_data: return False assign_type = {"paths", "format"} set_type = {"include", "exclude", "reports", "ignore", "ext_rules"} append_type = {"configure"} toml_data = { key.replace("-", "_"): value for key, value in toml_data.items() } for key, value in toml_data.items(): if key in assign_type: self.__dict__[key] = value elif key in set_type: self.__dict__[key].update(set(value)) elif key in append_type: self.__dict__[key] += value elif key == "filetypes": for filetype in toml_data["filetypes"]: self.filetypes.add( filetype if filetype.startswith(".") else "." + filetype) elif key == "threshold": self.threshold = RuleSeverity(value) elif key == "output": self.output = open(value, "w") elif key == "no_recursive": self.recursive = not value elif key == "verbose": self.verbose = value else: raise InvalidArgumentError( f"Option '{key}' is not supported in pyproject.toml configuration file." ) return True
def parse_toml_to_config(toml_data, config): if not toml_data: return assign_type = {'paths', 'format', 'configure'} set_type = {'include', 'exclude', 'reports', 'ignore', 'ext_rules'} toml_data = { key.replace('-', '_'): value for key, value in toml_data.items() } for key, value in toml_data.items(): if key in assign_type: config.__dict__[key] = value elif key in set_type: config.__dict__[key].update(set(value)) elif key == 'filetypes': for filetype in toml_data['filetypes']: config.filetypes.add( filetype if filetype.startswith('.') else '.' + filetype) elif key == 'threshold': config.threshold = find_severity_value(value) elif key == 'output': config.output = open(value, 'w') elif key == 'no_recursive': config.recursive = not value elif key == 'verbose': config.verbose = value else: raise InvalidArgumentError( f"Option '{key}' is not supported in pyproject.toml configuration file." )
def load_pyproject_file(self): pyproject_path = find_file_in_project_root("pyproject.toml", self.root) if not pyproject_path.is_file(): return try: config = toml.load(str(pyproject_path)) except toml.TomlDecodeError as err: raise InvalidArgumentError( f"Failed to decode {str(pyproject_path)}: {err}") from None config = config.get("tool", {}).get("robocop", {}) if self.parse_toml_to_config(config): self.config_from = pyproject_path
def load_pyproject_file(self): if not TOML_SUPPORT: return pyproject_path = self.find_file_in_project_root('pyproject.toml') if not pyproject_path.is_file(): return try: config = toml.load(str(pyproject_path)) except toml.TomlDecodeError as err: raise InvalidArgumentError(f'Failed to decode {str(pyproject_path)}: {err}') from None config = config.get("tool", {}).get("robocop", {}) parse_toml_to_config(config, self) self.config_from = pyproject_path
def error(self, message): if self.from_cli: super().error(message) else: raise InvalidArgumentError(message)