Source code for borgini._main

"""
borgini._main
=============

Contains package entry point.
"""
from __future__ import annotations

import shutil
import sys

from . import funcs, parser
from ._core import BorgBackup, Data, PygmentPrint

__version__ = "1.0.0"


class Parser(parser.RawParser):
    """Inherit ``RawParser`` which inherits ``argparse.ArgumentParser``.

    Catch any incompatible arguments. Instantiate and access the
    ``Namespace`` object from this class.
    """

    def __init__(self) -> None:
        super().__init__()
        self.editor = self.args.editor
        self.editor_opts = any(
            v for k, v in self.arg_groups["EDITOR"].__dict__.items()
        )
        self.message = self._get_message()
        self._exit_error()

    def _check_editor(self) -> str | None:
        # exit the process if the editor argument has been incorrectly
        # supplied
        if not shutil.which(self.editor):
            return parser.getcolor(
                f"EDITOR must be installed: `{self.editor}' cannot be found",
                code=1,
            )
        if not self.editor_opts:
            return parser.getcolor(
                "EDITOR must be followed by a file to edit", code=1
            )
        return None

    def _get_message(self) -> str | None:
        if self.editor:
            return self._check_editor()
        return None

    def _exit_error(self) -> None:
        if self.message:
            print(self.message, file=sys.stderr)
            self.print_help()
            sys.exit(1)


[docs]def main() -> None: """Main function for package.""" _parser = Parser() args = _parser.args profile = args.select dry = args.dry data = Data(funcs.CONFIGDIR, profile) data.make_appdir() funcs.initialize_datafiles(data) pygments = PygmentPrint(data.files["styles"]) catch = parser.Catch(profile) _configpath = data.get_path("config.ini") _config = funcs.initialize_config(_configpath, catch) funcs.remove_profile(args.remove) funcs.list_profiles(args.list, pygments) funcs.edit_file(args.editor, args.__dict__, data.files, pygments, dry) funcs.set_passphrase( _config.get_key("ENVIRONMENT", "keyfile"), catch # type: ignore ) catch.check_repopath_config( _config.get_key("DEFAULT", "repopath") # type: ignore ) fullpath = funcs.get_path( *_config.get_keytuple( # type: ignore SSH=("remoteuser", "remotehost", "port"), DEFAULT=("repopath", "ssh"), ) ) borg = BorgBackup( fullpath, pygments, dry, *_config.get_keytuple(DEFAULT=("reponame", "timestamp")), ) backup = _config.return_all("BACKUP") include = data.get_include() exclude = data.get_exclude() borg.create(backup, exclude, include) if _config.get_key("DEFAULT", "prune"): pruneargs = _config.return_all("PRUNE") borg.prune(pruneargs)