def build_exception_objects()

in detection_rules/exception.py [0:0]


def build_exception_objects(exceptions_containers: List[dict], exceptions_items: List[dict],
                            exception_list_rule_table: dict, exceptions_directory: Path, save_toml: bool = False,
                            skip_errors: bool = False, verbose=False,
                            ) -> Tuple[List[TOMLException], List[str], List[str]]:
    """Build TOMLException objects from a list of exception dictionaries."""
    output = []
    errors = []
    toml_exceptions = []
    for container in exceptions_containers.values():
        try:
            list_id = container.get("list_id")
            items = exceptions_items.get(list_id)
            contents = TOMLExceptionContents.from_exceptions_dict(
                {"container": container, "items": items},
                exception_list_rule_table.get(list_id),
            )
            filename = f"{list_id}_exceptions.toml"
            if RULES_CONFIG.exception_dir is None and not exceptions_directory:
                raise FileNotFoundError(
                    "No Exceptions directory is specified. Please specify either in the config or CLI."
                )
            exceptions_path = (
                Path(exceptions_directory) / filename
                if exceptions_directory
                else RULES_CONFIG.exception_dir / filename
            )
            if verbose:
                output.append(f"[+] Building exception(s) for {exceptions_path}")
            e_object = TOMLException(
                contents=contents,
                path=exceptions_path,
            )
            if save_toml:
                e_object.save_toml()
            toml_exceptions.append(e_object)

        except Exception as e:
            if skip_errors:
                output.append(f"- skipping exceptions export - {type(e).__name__}")
                if not exceptions_directory:
                    errors.append(f"- no exceptions directory found - {e}")
                else:
                    errors.append(f"- exceptions export - {e}")
                continue
            raise

    return toml_exceptions, output, errors