"""
Exit module
===========
Stop the workflow when this module is reached. This allows users to execute
only a certain initial part of the workflow without having to comment/uncomment
the unwanted lines.
Examples
--------
Consider the following config file example::
    [topoaa]
    (...)
    [rigidbody]
    (...)
    [exit]  # <- workflow will stop here
    [flexref]
    (...)
The workflow will stop at ``[exit]`` and ``[flexref]`` will not be performed.
You can also use this option combined with ``--restart`` and ``--extend-run``.
See examples in ``examples/docking-protein-protein/*-exit-test.cfg`` files.
"""
import shutil
from pathlib import Path
from haddock.core.defaults import MODULE_DEFAULT_YAML
from haddock.core.exceptions import HaddockTermination
from haddock.core.typing import Any, FilePath
from haddock.modules import BaseHaddockModule
RECIPE_PATH = Path(__file__).resolve().parent
DEFAULT_CONFIG = Path(RECIPE_PATH, MODULE_DEFAULT_YAML)
[docs]
class HaddockModule(BaseHaddockModule):
    """Stop the workflow when this module is reached."""
    name = RECIPE_PATH.name
    def __init__(
            self,
            order: int,
            path: Path,
            *ignore: Any,
            init_params: FilePath = DEFAULT_CONFIG,
            **everything: Any,
            ) -> None:
        super().__init__(order, path, init_params)
[docs]
    @classmethod
    def confirm_installation(cls) -> None:
        """Confirm if contact executable is compiled."""
        return 
    def _run(self) -> None:
        # removes the `exit` step folder
        self.log(self.params["message"])
        shutil.rmtree(Path.cwd())
        error = HaddockTermination()
        raise error