Compare commits

...

6 Commits

Author SHA1 Message Date
dw-0
3e6d3d9015 feat: add change hostename procedure
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-08-11 12:55:13 +02:00
dw-0
69a0fe2dfb fix: remove redundant print statement
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-08-11 12:54:44 +02:00
dw-0
13611ccd52 refactor: check_install_dependencies expects a set now
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-08-11 12:54:27 +02:00
dw-0
ea4409ee54 refactor: add default to print_ok if no message is given
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-08-11 12:53:08 +02:00
dw-0
4f39edd06c fix: change type of deps from list to set
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-08-10 15:17:49 +02:00
dw-0
77128ac7f8 refactor: move constants and decorators to core package
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-08-10 14:57:21 +02:00
45 changed files with 187 additions and 71 deletions

View File

@@ -10,7 +10,7 @@
from pathlib import Path
from core.backup_manager import BACKUP_ROOT_DIR
from utils.constants import SYSTEMD
from core.constants import SYSTEMD
# repo
CROWSNEST_REPO = "https://github.com/mainsail-crew/crowsnest.git"

View File

@@ -27,13 +27,13 @@ from components.crowsnest import (
)
from components.klipper.klipper import Klipper
from core.backup_manager.backup_manager import BackupManager
from core.constants import CURRENT_USER
from core.instance_manager.instance_manager import InstanceManager
from core.settings.kiauh_settings import KiauhSettings
from utils.common import (
check_install_dependencies,
get_install_status,
)
from utils.constants import CURRENT_USER
from utils.git_utils import (
git_clone_wrapper,
git_pull_wrapper,
@@ -52,7 +52,7 @@ def install_crowsnest() -> None:
git_clone_wrapper(CROWSNEST_REPO, CROWSNEST_DIR, "master")
# Step 2: Install dependencies
check_install_dependencies(["make"])
check_install_dependencies({"make"})
# Step 3: Check for Multi Instance
im = InstanceManager(Klipper)
@@ -139,7 +139,7 @@ def update_crowsnest() -> None:
git_pull_wrapper(CROWSNEST_REPO, CROWSNEST_DIR)
deps = parse_packages_from_file(CROWSNEST_INSTALL_SCRIPT)
check_install_dependencies(deps)
check_install_dependencies({*deps})
cmd_sysctl_service(CROWSNEST_SERVICE_NAME, "restart")

View File

@@ -11,14 +11,14 @@ import textwrap
from enum import Enum, unique
from typing import List
from core.instance_manager.base_instance import BaseInstance
from core.menus.base_menu import print_back_footer
from utils.constants import (
from core.constants import (
COLOR_CYAN,
COLOR_GREEN,
COLOR_YELLOW,
RESET_FORMAT,
)
from core.instance_manager.base_instance import BaseInstance
from core.menus.base_menu import print_back_footer
@unique

View File

@@ -169,7 +169,7 @@ def install_klipper_packages() -> None:
if Path("/boot/dietpi/.version").exists():
packages.append("dbus")
check_install_dependencies(packages)
check_install_dependencies({*packages})
def update_klipper() -> None:

View File

@@ -30,12 +30,12 @@ from components.webui_client.client_config.client_config_setup import (
create_client_config_symlink,
)
from core.backup_manager.backup_manager import BackupManager
from core.constants import CURRENT_USER
from core.instance_manager.instance_manager import InstanceManager
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
SimpleConfigParser,
)
from utils.common import get_install_status
from utils.constants import CURRENT_USER
from utils.input_utils import get_confirm, get_number_input, get_string_input
from utils.logger import DialogType, Logger
from utils.sys_utils import cmd_sysctl_service

View File

@@ -12,9 +12,9 @@ import textwrap
from typing import Type
from components.klipper import klipper_remove
from core.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
from core.menus import FooterType, Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -9,7 +9,7 @@
from __future__ import annotations
import textwrap
from typing import Type
from typing import List, Set, Type
from components.klipper import KLIPPER_DIR
from components.klipper_firmware.firmware_utils import (
@@ -17,9 +17,9 @@ from components.klipper_firmware.firmware_utils import (
run_make_clean,
run_make_menuconfig,
)
from core.constants import COLOR_CYAN, COLOR_GREEN, COLOR_RED, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_CYAN, COLOR_GREEN, COLOR_RED, RESET_FORMAT
from utils.logger import Logger
from utils.sys_utils import (
check_package_install,
@@ -34,8 +34,8 @@ class KlipperBuildFirmwareMenu(BaseMenu):
def __init__(self, previous_menu: Type[BaseMenu] | None = None):
super().__init__()
self.previous_menu: Type[BaseMenu] | None = previous_menu
self.deps = ["build-essential", "dpkg-dev", "make"]
self.missing_deps = check_package_install(self.deps)
self.deps: Set[str] = {"build-essential", "dpkg-dev", "make"}
self.missing_deps: List[str] = check_package_install(self.deps)
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
from core.menus.advanced_menu import AdvancedMenu

View File

@@ -12,9 +12,9 @@ import textwrap
from typing import Type
from components.klipper_firmware.flash_options import FlashMethod, FlashOptions
from core.constants import COLOR_RED, RESET_FORMAT
from core.menus import FooterType, Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_RED, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -11,8 +11,8 @@ from __future__ import annotations
import textwrap
from typing import Type
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
# noinspection DuplicatedCode

View File

@@ -35,9 +35,9 @@ from components.klipper_firmware.menus.klipper_flash_help_menu import (
KlipperFlashMethodHelpMenu,
KlipperMcuConnectionHelpMenu,
)
from core.constants import COLOR_CYAN, COLOR_RED, COLOR_YELLOW, RESET_FORMAT
from core.menus import FooterType, Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_CYAN, COLOR_RED, COLOR_YELLOW, RESET_FORMAT
from utils.input_utils import get_number_input
from utils.logger import DialogType, Logger

View File

@@ -9,7 +9,7 @@
from pathlib import Path
from core.backup_manager import BACKUP_ROOT_DIR
from utils.constants import SYSTEMD
from core.constants import SYSTEMD
# repo
KLIPPERSCREEN_REPO = "https://github.com/KlipperScreen/KlipperScreen.git"

View File

@@ -26,6 +26,7 @@ from components.klipperscreen import (
)
from components.moonraker.moonraker import Moonraker
from core.backup_manager.backup_manager import BackupManager
from core.constants import SYSTEMD
from core.instance_manager.instance_manager import InstanceManager
from core.settings.kiauh_settings import KiauhSettings
from utils.common import (
@@ -33,7 +34,6 @@ from utils.common import (
get_install_status,
)
from utils.config_utils import add_config_section, remove_config_section
from utils.constants import SYSTEMD
from utils.fs_utils import remove_with_sudo
from utils.git_utils import (
git_clone_wrapper,
@@ -78,8 +78,7 @@ def install_klipperscreen() -> None:
):
return
package_list = ["git", "wget", "curl", "unzip", "dfu-util"]
check_install_dependencies(package_list)
check_install_dependencies()
git_clone_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR)

View File

@@ -12,9 +12,9 @@ import textwrap
from typing import Type
from components.log_uploads.log_upload_utils import get_logfile_list, upload_logfile
from core.constants import COLOR_YELLOW, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_YELLOW, RESET_FORMAT
from utils.logger import Logger

View File

@@ -9,7 +9,7 @@
from pathlib import Path
from core.backup_manager import BACKUP_ROOT_DIR
from utils.constants import SYSTEMD
from core.constants import SYSTEMD
# repo
MOBILERAKER_REPO = "https://github.com/Clon1998/mobileraker_companion.git"

View File

@@ -12,9 +12,9 @@ import textwrap
from typing import Type
from components.moonraker import moonraker_remove
from core.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -12,8 +12,8 @@ from typing import List
from components.klipper.klipper import Klipper
from components.moonraker.moonraker import Moonraker
from core.constants import COLOR_CYAN, COLOR_GREEN, COLOR_YELLOW, RESET_FORMAT
from core.menus.base_menu import print_back_footer
from utils.constants import COLOR_CYAN, COLOR_GREEN, COLOR_YELLOW, RESET_FORMAT
def print_moonraker_overview(

View File

@@ -167,7 +167,7 @@ def install_moonraker_packages() -> None:
if not moonraker_deps:
raise ValueError("Error reading Moonraker dependencies!")
check_install_dependencies(moonraker_deps)
check_install_dependencies({*moonraker_deps})
def install_moonraker_polkit() -> None:

View File

@@ -168,7 +168,7 @@ def install_oe_dependencies() -> None:
if not oe_deps:
raise ValueError("Error reading OctoEverywhere dependencies!")
check_install_dependencies(oe_deps)
check_install_dependencies({*oe_deps})
install_python_requirements(OE_ENV_DIR, OE_REQ_FILE)

View File

@@ -112,7 +112,7 @@ def install_client(client: BaseWebClient) -> None:
)
valid_port = is_valid_port(port, ports_in_use)
check_install_dependencies(["nginx"])
check_install_dependencies({"nginx"})
try:
download_client(client)

View File

@@ -21,10 +21,10 @@ from components.webui_client.base_data import (
from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData
from core.backup_manager.backup_manager import BackupManager
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from core.settings.kiauh_settings import KiauhSettings
from utils import NGINX_CONFD, NGINX_SITES_AVAILABLE
from utils.common import get_install_status
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from utils.git_utils import (
get_latest_tag,
get_latest_unstable_tag,

View File

@@ -13,9 +13,9 @@ from typing import Type
from components.webui_client import client_remove
from components.webui_client.base_data import BaseWebClient, WebClientType
from core.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -15,7 +15,7 @@ from dataclasses import dataclass, field
from pathlib import Path
from typing import List
from utils.constants import CURRENT_USER, SYSTEMD
from core.constants import CURRENT_USER, SYSTEMD
from utils.logger import Logger

View File

@@ -13,8 +13,8 @@ import subprocess
from pathlib import Path
from typing import List, Type, TypeVar
from core.constants import SYSTEMD
from core.instance_manager.base_instance import BaseInstance
from utils.constants import SYSTEMD
from utils.logger import Logger
from utils.sys_utils import cmd_sysctl_service

View File

@@ -22,9 +22,10 @@ from components.klipper_firmware.menus.klipper_flash_menu import (
)
from components.moonraker import MOONRAKER_DIR
from components.moonraker.moonraker import Moonraker
from core.constants import COLOR_YELLOW, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_YELLOW, RESET_FORMAT
from procedures.system import change_system_hostname
from utils.git_utils import rollback_repository
@@ -48,6 +49,7 @@ class AdvancedMenu(BaseMenu):
"4": Option(method=self.get_id, menu=False),
"5": Option(method=self.klipper_rollback, menu=True),
"6": Option(method=self.moonraker_rollback, menu=True),
"7": Option(method=self.change_hostname, menu=True),
}
def print_menu(self) -> None:
@@ -63,7 +65,8 @@ class AdvancedMenu(BaseMenu):
║ 1) [Build] │ 5) [Klipper] ║
║ 2) [Flash] │ 6) [Moonraker] ║
║ 3) [Build + Flash] │ ║
║ 4) [Get MCU ID] │
║ 4) [Get MCU ID] │ System:
║ │ 7) [Change hostname] ║
╟───────────────────────────┴───────────────────────────╢
"""
)[1:]
@@ -90,3 +93,6 @@ class AdvancedMenu(BaseMenu):
previous_menu=self.__class__,
standalone=True,
).run()
def change_hostname(self, **kwargs) -> None:
change_system_hostname()

View File

@@ -23,10 +23,10 @@ from components.webui_client.client_utils import (
)
from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.common import backup_printer_config_dir
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -16,14 +16,14 @@ import traceback
from abc import abstractmethod
from typing import Dict, Type
from core.menus import FooterType, Option
from utils.constants import (
from core.constants import (
COLOR_CYAN,
COLOR_GREEN,
COLOR_RED,
COLOR_YELLOW,
RESET_FORMAT,
)
from core.menus import FooterType, Option
from utils.logger import Logger

View File

@@ -21,9 +21,9 @@ from components.webui_client import client_setup
from components.webui_client.client_config import client_config_setup
from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData
from core.constants import COLOR_GREEN, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_GREEN, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -25,6 +25,14 @@ from components.webui_client.client_utils import (
)
from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData
from core.constants import (
COLOR_CYAN,
COLOR_GREEN,
COLOR_MAGENTA,
COLOR_RED,
COLOR_YELLOW,
RESET_FORMAT,
)
from core.menus import FooterType
from core.menus.advanced_menu import AdvancedMenu
from core.menus.backup_menu import BackupMenu
@@ -34,14 +42,6 @@ from core.menus.remove_menu import RemoveMenu
from core.menus.settings_menu import SettingsMenu
from core.menus.update_menu import UpdateMenu
from extensions.extensions_menu import ExtensionsMenu
from utils.constants import (
COLOR_CYAN,
COLOR_GREEN,
COLOR_MAGENTA,
COLOR_RED,
COLOR_YELLOW,
RESET_FORMAT,
)
from utils.logger import Logger
from utils.types import ComponentStatus, StatusMap, StatusText

View File

@@ -22,9 +22,9 @@ from components.octoeverywhere.octoeverywhere_setup import remove_octoeverywhere
from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData
from components.webui_client.menus.client_remove_menu import ClientRemoveMenu
from core.constants import COLOR_RED, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_RED, RESET_FORMAT
# noinspection PyUnusedLocal

View File

@@ -17,11 +17,11 @@ from components.klipper import KLIPPER_DIR
from components.klipper.klipper import Klipper
from components.moonraker import MOONRAKER_DIR
from components.moonraker.moonraker import Moonraker
from core.constants import COLOR_CYAN, COLOR_GREEN, RESET_FORMAT
from core.instance_manager.instance_manager import InstanceManager
from core.menus import Option
from core.menus.base_menu import BaseMenu
from core.settings.kiauh_settings import KiauhSettings
from utils.constants import COLOR_CYAN, COLOR_GREEN, RESET_FORMAT
from utils.git_utils import git_clone_wrapper
from utils.input_utils import get_confirm, get_string_input
from utils.logger import DialogType, Logger

View File

@@ -40,14 +40,14 @@ from components.webui_client.client_utils import (
)
from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.constants import (
from core.constants import (
COLOR_GREEN,
COLOR_RED,
COLOR_YELLOW,
RESET_FORMAT,
)
from core.menus import Option
from core.menus.base_menu import BaseMenu
from utils.input_utils import get_confirm
from utils.logger import DialogType, Logger
from utils.spinner import Spinner

View File

@@ -15,11 +15,11 @@ import textwrap
from pathlib import Path
from typing import Dict, List, Type
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from core.menus import Option
from core.menus.base_menu import BaseMenu
from extensions import EXTENSION_ROOT
from extensions.base_extension import BaseExtension
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from utils.logger import Logger

View File

@@ -19,12 +19,12 @@ from components.klipper.klipper_dialogs import (
DisplayType,
print_instance_overview,
)
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from core.instance_manager.base_instance import BaseInstance
from core.instance_manager.instance_manager import InstanceManager
from core.menus import Option
from core.menus.base_menu import BaseMenu
from extensions.base_extension import BaseExtension
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
from utils.git_utils import git_clone_wrapper
from utils.input_utils import get_selection_input
from utils.logger import Logger

View File

@@ -236,7 +236,7 @@ class ObicoExtension(BaseExtension):
# install dependencies
script = OBICO_DIR.joinpath("install.sh")
package_list = parse_packages_from_file(script)
check_install_dependencies(package_list)
check_install_dependencies({*package_list})
# create virtualenv
create_python_venv(OBICO_ENV_DIR)

View File

@@ -48,7 +48,7 @@ class PrettyGcodeExtension(BaseExtension):
allow_go_back=True,
)
check_install_dependencies(["nginx"])
check_install_dependencies({"nginx"})
try:
# remove any existing pgc dir

View File

@@ -158,7 +158,7 @@ class TelegramBotExtension(BaseExtension):
# install dependencies
script = TG_BOT_DIR.joinpath("scripts/install.sh")
package_list = parse_packages_from_file(script)
check_install_dependencies(package_list)
check_install_dependencies({*package_list})
# create virtualenv
create_python_venv(TG_BOT_ENV)

View File

107
kiauh/procedures/system.py Normal file
View File

@@ -0,0 +1,107 @@
# ======================================================================= #
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
# #
# This file is part of KIAUH - Klipper Installation And Update Helper #
# https://github.com/dw-0/kiauh #
# #
# This file may be distributed under the terms of the GNU GPLv3 license #
# ======================================================================= #
from pathlib import Path
from subprocess import PIPE, CalledProcessError, run
from utils.common import check_install_dependencies, get_current_date
from utils.fs_utils import check_file_exist
from utils.input_utils import get_confirm, get_string_input
from utils.logger import DialogType, Logger
def change_system_hostname() -> None:
"""
Procedure to change the system hostname.
:return:
"""
Logger.print_dialog(
DialogType.CUSTOM,
[
"Changing the hostname of this system allows you to access an installed "
"webinterface by simply typing the hostname like this in the browser:",
"\n\n",
"http://<hostname>.local",
"\n\n",
"Example: If you set your hostname to 'my-printer', you can access an "
"installed webinterface by tyoing 'http://my-printer.local' in the "
"browser.",
],
custom_title="CHANGE SYSTEM HOSTNAME",
padding_top=0,
padding_bottom=0,
)
if not get_confirm("Do you want to change the hostname?", default_choice=False):
return
Logger.print_dialog(
DialogType.CUSTOM,
[
"Allowed characters: a-z, 0-9 and '-'",
"The name must not contain the following:",
"\n\n",
"● Any special characters",
"● No leading or trailing '-'",
],
padding_top=0,
padding_bottom=0,
)
hostname = get_string_input(
"Enter the new hostname",
regex="^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$",
)
if not get_confirm(f"Change the hostname to '{hostname}'?", default_choice=False):
Logger.print_info("Aborting hostname change ...")
return
try:
Logger.print_status("Changing hostname ...")
Logger.print_status("Checking for dependencies ...")
check_install_dependencies({"avahi-daemon"}, include_global=False)
# create or backup hosts file
Logger.print_status("Creating backup of hosts file ...")
hosts_file = Path("/etc/hosts")
if not check_file_exist(hosts_file, True):
cmd = ["sudo", "touch", hosts_file.as_posix()]
run(cmd, stderr=PIPE, check=True)
else:
date_time = get_current_date()
name = f"hosts.{date_time.get('date')}-{date_time.get('time')}.bak"
hosts_file_backup = Path(f"/etc/{name}")
cmd = [
"sudo",
"cp",
hosts_file.as_posix(),
hosts_file_backup.as_posix(),
]
run(cmd, stderr=PIPE, check=True)
Logger.print_ok()
# call hostnamectl set-hostname <hostname>
Logger.print_status(f"Setting hostname to '{hostname}' ...")
cmd = ["sudo", "hostnamectl", "set-hostname", hostname]
run(cmd, stderr=PIPE, check=True)
Logger.print_ok()
# add hostname to hosts file at the end of the file
Logger.print_status("Writing new hostname to /etc/hosts ...")
stdin = f"127.0.0.1 {hostname}\n"
cmd = ["sudo", "tee", "-a", hosts_file.as_posix()]
run(cmd, input=stdin.encode(), stderr=PIPE, stdout=PIPE, check=True)
Logger.print_ok()
Logger.print_ok("New hostname successfully configured!")
Logger.print_ok("Remember to reboot for the changes to take effect!\n")
except CalledProcessError as e:
Logger.print_error(f"Error during change hostname procedure: {e}")
return

View File

@@ -11,16 +11,16 @@ from __future__ import annotations
import re
from datetime import datetime
from pathlib import Path
from typing import Dict, List, Literal, Optional, Type
from typing import Dict, List, Literal, Optional, Set, Type
from components.klipper.klipper import Klipper
from core.instance_manager.base_instance import BaseInstance
from core.instance_manager.instance_manager import InstanceManager
from utils import GLOBAL_DEPS, PRINTER_CFG_BACKUP_DIR
from utils.constants import (
from core.constants import (
COLOR_CYAN,
RESET_FORMAT,
)
from core.instance_manager.base_instance import BaseInstance
from core.instance_manager.instance_manager import InstanceManager
from utils import GLOBAL_DEPS, PRINTER_CFG_BACKUP_DIR
from utils.git_utils import get_local_commit, get_remote_commit, get_repo_name
from utils.logger import DialogType, Logger
from utils.sys_utils import (
@@ -47,17 +47,23 @@ def get_current_date() -> Dict[Literal["date", "time"], str]:
return {"date": date, "time": time}
def check_install_dependencies(deps: List[str] | None = None) -> None:
def check_install_dependencies(
deps: Set[str] | None = None, include_global: bool = True
) -> None:
"""
Common helper method to check if dependencies are installed
and if not, install them automatically |
:param include_global: Wether to include the global dependencies or not
:param deps: List of strings of package names to check if installed
:return: None
"""
if deps is None:
deps = []
deps = set()
requirements = check_package_install({*GLOBAL_DEPS, *deps})
if include_global:
deps.update(GLOBAL_DEPS)
requirements = check_package_install(deps)
if requirements:
Logger.print_status("Installing dependencies ...")
Logger.print_info("The following packages need installation:")

View File

@@ -17,13 +17,13 @@ from typing import List
from zipfile import ZipFile
from components.klipper.klipper import Klipper
from core.decorators import deprecated
from utils import (
MODULE_PATH,
NGINX_CONFD,
NGINX_SITES_AVAILABLE,
NGINX_SITES_ENABLED,
)
from utils.decorators import deprecated
from utils.logger import Logger

View File

@@ -11,8 +11,8 @@ from __future__ import annotations
import re
from typing import Dict, List
from core.constants import COLOR_CYAN, RESET_FORMAT
from utils import INVALID_CHOICE
from utils.constants import COLOR_CYAN, RESET_FORMAT
from utils.logger import Logger
@@ -104,8 +104,6 @@ def get_string_input(
while True:
_input = input(_question)
print(_input)
if _input.lower() in _exclude:
Logger.print_error("This value is already in use/reserved.")
elif default is not None and _input == "":

View File

@@ -12,7 +12,7 @@ import textwrap
from enum import Enum
from typing import List
from utils.constants import (
from core.constants import (
COLOR_CYAN,
COLOR_GREEN,
COLOR_MAGENTA,
@@ -66,7 +66,7 @@ class Logger:
print(f"{COLOR_WHITE}{start}{message}{RESET_FORMAT}", end=end)
@staticmethod
def print_ok(msg, prefix=True, start="", end="\n") -> None:
def print_ok(msg: str = "Success!", prefix=True, start="", end="\n") -> None:
message = f"[OK] {msg}" if prefix else msg
print(f"{COLOR_GREEN}{start}{message}{RESET_FORMAT}", end=end)

View File

@@ -21,7 +21,7 @@ from pathlib import Path
from subprocess import DEVNULL, PIPE, CalledProcessError, Popen, check_output, run
from typing import List, Literal, Set
from utils.constants import SYSTEMD
from core.constants import SYSTEMD
from utils.fs_utils import check_file_exist, remove_with_sudo
from utils.input_utils import get_confirm
from utils.logger import Logger