Пример #1
0
 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
Пример #2
0
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."
            )
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 def error(self, message):
     if self.from_cli:
         super().error(message)
     else:
         raise InvalidArgumentError(message)