Source code for controller.commands.install

"""
Install the specified version of RAPyDO or docker, compose, buildx
"""

import typer

from controller import SUBMODULES_DIR, log, print_and_exit
from controller.app import Application, Configuration
from controller.packages import Packages
from controller.utilities import git


[docs] @Application.app.command(help="Install the specified version of rapydo") def install( version: str = typer.Argument("auto", help="Version to be installed"), editable: bool = typer.Option( True, "--no-editable", help="Disable editable mode", show_default=False, ), ) -> None: Application.print_command( Application.serialize_parameter("--no-editable", not editable, IF=not editable), Application.serialize_parameter("", version), ) if version == "docker": Packages.install_docker() return None if version == "compose": Packages.install_compose() return None if version == "buildx": Packages.install_buildx() return None Application.get_controller().controller_init() if version == "auto": version = Configuration.rapydo_version log.info("Detected version {} to be installed", version) if editable: install_controller_from_folder(version) else: install_controller_from_git(version)
[docs] def install_controller_from_folder(version: str) -> None: do_path = SUBMODULES_DIR.joinpath("do") try: Application.git_submodules() except SystemExit: log.info( """You asked to install rapydo {ver} in editable mode, but {p} is missing. You can force the installation by disabling the editable mode: rapydo install {ver} --no-editable """, ver=version, p=do_path, ) raise log.info( "You asked to install rapydo {}. It will be installed in editable mode", version, ) do_repo = Application.gits.get("do") b = git.get_active_branch(do_repo) if b is None: log.error("Unable to read local controller repository") # pragma: no cover elif b == version: log.info("Controller repository already at {}", version) elif git.switch_branch(do_repo, version): log.info("Controller repository switched to {}", version) else: print_and_exit("Invalid version") Packages.install(do_path, editable=True) log.info("Controller version {} installed from local folder", version)
[docs] def install_controller_from_git(version: str) -> None: controller = f"git+https://github.com/rapydo/do.git@{version}" log.info("You asked to install rapydo {} from git", version) Packages.install(controller, editable=False) log.info("Controller version {} installed from git", version)