refactor: do not run the requirements installation if the virtualenv already exists

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-08-18 20:59:49 +02:00
parent 547194e950
commit a0076698d5
7 changed files with 33 additions and 25 deletions

View File

@@ -154,7 +154,7 @@ def setup_klipper_prerequesites() -> None:
# install klipper dependencies and create python virtualenv # install klipper dependencies and create python virtualenv
try: try:
install_klipper_packages() install_klipper_packages()
create_python_venv(KLIPPER_ENV_DIR) if create_python_venv(KLIPPER_ENV_DIR):
install_python_requirements(KLIPPER_ENV_DIR, KLIPPER_REQ_FILE) install_python_requirements(KLIPPER_ENV_DIR, KLIPPER_REQ_FILE)
except Exception: except Exception:
Logger.print_error("Error during installation of Klipper requirements!") Logger.print_error("Error during installation of Klipper requirements!")

View File

@@ -150,7 +150,7 @@ def setup_moonraker_prerequesites() -> None:
# install moonraker dependencies and create python virtualenv # install moonraker dependencies and create python virtualenv
install_moonraker_packages() install_moonraker_packages()
create_python_venv(MOONRAKER_ENV_DIR) if create_python_venv(MOONRAKER_ENV_DIR):
install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_REQ_FILE) install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_REQ_FILE)
install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_SPEEDUPS_REQ_FILE) install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_SPEEDUPS_REQ_FILE)

View File

@@ -31,3 +31,4 @@ OBICO_ENV_DIR = Path.home().joinpath("moonraker-obico-env")
OBICO_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{OBICO_SERVICE_NAME}") OBICO_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{OBICO_SERVICE_NAME}")
OBICO_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{OBICO_ENV_FILE_NAME}") OBICO_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{OBICO_ENV_FILE_NAME}")
OBICO_LINK_SCRIPT = OBICO_DIR.joinpath("scripts/link.sh") OBICO_LINK_SCRIPT = OBICO_DIR.joinpath("scripts/link.sh")
OBICO_REQ_FILE = OBICO_DIR.joinpath("requirements.txt")

View File

@@ -23,6 +23,7 @@ from extensions.obico import (
OBICO_ENV_DIR, OBICO_ENV_DIR,
OBICO_MACROS_CFG_NAME, OBICO_MACROS_CFG_NAME,
OBICO_REPO, OBICO_REPO,
OBICO_REQ_FILE,
OBICO_UPDATE_CFG_NAME, OBICO_UPDATE_CFG_NAME,
OBICO_UPDATE_CFG_SAMPLE_NAME, OBICO_UPDATE_CFG_SAMPLE_NAME,
) )
@@ -239,9 +240,8 @@ class ObicoExtension(BaseExtension):
check_install_dependencies({*package_list}) check_install_dependencies({*package_list})
# create virtualenv # create virtualenv
create_python_venv(OBICO_ENV_DIR) if create_python_venv(OBICO_ENV_DIR):
requirements = OBICO_DIR.joinpath("requirements.txt") install_python_requirements(OBICO_ENV_DIR, OBICO_REQ_FILE)
install_python_requirements(OBICO_ENV_DIR, requirements)
def _create_obico_macros_cfg(self, moonraker) -> None: def _create_obico_macros_cfg(self, moonraker) -> None:
macros_cfg = OBICO_DIR.joinpath(f"include_cfgs/{OBICO_MACROS_CFG_NAME}") macros_cfg = OBICO_DIR.joinpath(f"include_cfgs/{OBICO_MACROS_CFG_NAME}")

View File

@@ -26,3 +26,4 @@ TG_BOT_ENV = Path.home().joinpath("moonraker-telegram-bot-env")
# files # files
TG_BOT_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{TG_BOT_SERVICE_NAME}") TG_BOT_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{TG_BOT_SERVICE_NAME}")
TG_BOT_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{TG_BOT_ENV_FILE_NAME}") TG_BOT_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{TG_BOT_ENV_FILE_NAME}")
TG_BOT_REQ_FILE = TG_BOT_DIR.joinpath("scripts/requirements.txt")

View File

@@ -14,7 +14,7 @@ from components.moonraker.moonraker import Moonraker
from core.instance_manager.instance_manager import InstanceManager from core.instance_manager.instance_manager import InstanceManager
from core.logger import DialogType, Logger from core.logger import DialogType, Logger
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.telegram_bot import TG_BOT_REPO from extensions.telegram_bot import TG_BOT_REPO, TG_BOT_REQ_FILE
from extensions.telegram_bot.moonraker_telegram_bot import ( from extensions.telegram_bot.moonraker_telegram_bot import (
TG_BOT_DIR, TG_BOT_DIR,
TG_BOT_ENV, TG_BOT_ENV,
@@ -161,9 +161,8 @@ class TelegramBotExtension(BaseExtension):
check_install_dependencies({*package_list}) check_install_dependencies({*package_list})
# create virtualenv # create virtualenv
create_python_venv(TG_BOT_ENV) if create_python_venv(TG_BOT_ENV):
requirements = TG_BOT_DIR.joinpath("scripts/requirements.txt") install_python_requirements(TG_BOT_ENV, TG_BOT_REQ_FILE)
install_python_requirements(TG_BOT_ENV, requirements)
def _patch_bot_update_manager(self, instances: List[Moonraker]) -> None: def _patch_bot_update_manager(self, instances: List[Moonraker]) -> None:
env_py = f"{TG_BOT_ENV}/bin/python" env_py = f"{TG_BOT_ENV}/bin/python"

View File

@@ -87,11 +87,13 @@ def parse_packages_from_file(source_file: Path) -> List[str]:
return packages return packages
def create_python_venv(target: Path) -> None: def create_python_venv(target: Path) -> bool:
""" """
Create a python 3 virtualenv at the provided target destination | Create a python 3 virtualenv at the provided target destination.
Returns True if the virtualenv was created successfully.
Returns False if the virtualenv already exists, recreation was declined or creation failed.
:param target: Path where to create the virtualenv at :param target: Path where to create the virtualenv at
:return: None :return: bool
""" """
Logger.print_status("Set up Python virtual environment ...") Logger.print_status("Set up Python virtual environment ...")
if not target.exists(): if not target.exists():
@@ -99,20 +101,25 @@ def create_python_venv(target: Path) -> None:
cmd = ["virtualenv", "-p", "/usr/bin/python3", target.as_posix()] cmd = ["virtualenv", "-p", "/usr/bin/python3", target.as_posix()]
run(cmd, check=True) run(cmd, check=True)
Logger.print_ok("Setup of virtualenv successful!") Logger.print_ok("Setup of virtualenv successful!")
return True
except CalledProcessError as e: except CalledProcessError as e:
Logger.print_error(f"Error setting up virtualenv:\n{e}") Logger.print_error(f"Error setting up virtualenv:\n{e}")
raise return False
else: else:
if get_confirm("Virtualenv already exists. Re-create?", default_choice=False): if not get_confirm(
"Virtualenv already exists. Re-create?", default_choice=False
):
Logger.print_info("Skipping re-creation of virtualenv ...")
return False
try: try:
shutil.rmtree(target) shutil.rmtree(target)
create_python_venv(target) create_python_venv(target)
return True
except OSError as e: except OSError as e:
log = f"Error removing existing virtualenv: {e.strerror}" log = f"Error removing existing virtualenv: {e.strerror}"
Logger.print_error(log, False) Logger.print_error(log, False)
raise return False
else:
Logger.print_info("Skipping re-creation of virtualenv ...")
def update_python_pip(target: Path) -> None: def update_python_pip(target: Path) -> None: