Compare commits

...

5 Commits

18 changed files with 152 additions and 43 deletions

View File

@@ -123,19 +123,19 @@ function main() {
launch_kiauh_v6 launch_kiauh_v6
else else
top_border top_border
echo -e "| ${green}KIAUH v6.0.0-alpha1 is available now!${white} |" echo -e "| ${green}KIAUH v6.0.0-rc.2 is available now!${white} |"
hr hr
echo -e "| View Changelog: ${magenta}https://git.io/JnmlX${white} |" echo -e "| View Changelog: ${magenta}https://git.io/JnmlX${white} |"
blank_line blank_line
echo -e "| KIAUH v6 was completely rewritten from the ground up. |" echo -e "| KIAUH v6 was completely rewritten from the ground up. |"
echo -e "| It's based on Python 3.8 and has many improvements. |" echo -e "| It's based on Python 3.8 and has many improvements. |"
blank_line blank_line
echo -e "| ${yellow}NOTE: Version 6 is still in alpha, so bugs may occur!${white} |" echo -e "| ${yellow}NOTE: Version 6 is still not final yet, but most bugs${white} |"
echo -e "| ${yellow}Yet, your feedback and bug reports are very much${white} |" echo -e "| ${yellow}should be fixed by now. Still, if you encounter any${white} |"
echo -e "| ${yellow}appreciated and will help finalize the release.${white} |" echo -e "| ${yellow}issues, please report them so they can get fixed.${white} |"
hr hr
echo -e "| Would you like to try out KIAUH v6? |" echo -e "| Would you like to try out KIAUH v6? |"
echo -e "| 1) Yes |" echo -e "| 1) Yes (recommended - v5 is sunsetting soon) |"
echo -e "| 2) No |" echo -e "| 2) No |"
echo -e "| 3) Yes, remember my choice for next time |" echo -e "| 3) Yes, remember my choice for next time |"
echo -e "| 4) No, remember my choice for next time |" echo -e "| 4) No, remember my choice for next time |"

View File

@@ -96,6 +96,7 @@ def install_klipperscreen() -> None:
def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None: def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None:
BackupService().backup_moonraker_conf()
add_config_section( add_config_section(
section=KLIPPERSCREEN_UPDATER_SECTION_NAME, section=KLIPPERSCREEN_UPDATER_SECTION_NAME,
instances=instances, instances=instances,
@@ -182,6 +183,7 @@ def remove_klipperscreen() -> None:
mr_instances: List[Moonraker] = get_instances(Moonraker) mr_instances: List[Moonraker] = get_instances(Moonraker)
if mr_instances: if mr_instances:
Logger.print_status("Removing KlipperScreen from update manager ...") Logger.print_status("Removing KlipperScreen from update manager ...")
BackupService().backup_moonraker_conf()
remove_config_section("update_manager KlipperScreen", mr_instances) remove_config_section("update_manager KlipperScreen", mr_instances)
Logger.print_ok("KlipperScreen successfully removed from update manager!") Logger.print_ok("KlipperScreen successfully removed from update manager!")

View File

@@ -182,8 +182,32 @@ def backup_moonraker_db_dir() -> None:
svc = BackupService() svc = BackupService()
if not instances: if not instances:
Logger.print_info("Unable to find directory to backup!") # fallback: search for printer data directories in the user's home directory
Logger.print_info("Are there no Moonraker instances installed?") Logger.print_info("No Moonraker instances found via systemd services.")
Logger.print_info(
"Attempting to find printer data directories in home directory..."
)
home_dir = Path.home()
printer_data_dirs = []
for pattern in ["printer_data", "printer_*_data"]:
for data_dir in home_dir.glob(pattern):
if data_dir.is_dir():
printer_data_dirs.append(data_dir)
if not printer_data_dirs:
Logger.print_info("Unable to find directory to backup!")
Logger.print_info("No printer data directories found in home directory.")
return
for data_dir in printer_data_dirs:
svc.backup_directory(
source_path=data_dir.joinpath("database"),
target_path=data_dir.name,
backup_name="database",
)
return return
for instance in instances: for instance in instances:

View File

@@ -14,6 +14,7 @@ from components.klipper.klipper import Klipper
from components.moonraker.moonraker import Moonraker from components.moonraker.moonraker import Moonraker
from components.webui_client.base_data import BaseWebClientConfig from components.webui_client.base_data import BaseWebClientConfig
from core.logger import Logger from core.logger import Logger
from core.services.backup_service import BackupService
from core.services.message_service import Message from core.services.message_service import Message
from core.types.color import Color from core.types.color import Color
from utils.config_utils import remove_config_section from utils.config_utils import remove_config_section
@@ -35,6 +36,8 @@ def run_client_config_removal(
if run_remove_routines(client_config.config_dir): if run_remove_routines(client_config.config_dir):
completion_msg.text.append(f"{client_config.display_name} removed") completion_msg.text.append(f"{client_config.display_name} removed")
BackupService().backup_printer_config_dir()
completion_msg = remove_moonraker_config_section( completion_msg = remove_moonraker_config_section(
completion_msg, client_config, mr_instances completion_msg, client_config, mr_instances
) )

View File

@@ -25,8 +25,8 @@ from components.webui_client.client_utils import (
) )
from core.instance_manager.instance_manager import InstanceManager from core.instance_manager.instance_manager import InstanceManager
from core.logger import Logger from core.logger import Logger
from core.services.backup_service import BackupService
from core.settings.kiauh_settings import KiauhSettings from core.settings.kiauh_settings import KiauhSettings
from utils.common import backup_printer_config_dir
from utils.config_utils import add_config_section, add_config_section_at_top from utils.config_utils import add_config_section, add_config_section_at_top
from utils.fs_utils import create_symlink from utils.fs_utils import create_symlink
from utils.git_utils import git_clone_wrapper, git_pull_wrapper from utils.git_utils import git_clone_wrapper, git_pull_wrapper
@@ -57,7 +57,7 @@ def install_client_config(client_data: BaseWebClient, cfg_backup=True) -> None:
create_client_config_symlink(client_config, kl_instances) create_client_config_symlink(client_config, kl_instances)
if cfg_backup: if cfg_backup:
backup_printer_config_dir() BackupService().backup_printer_config_dir()
add_config_section( add_config_section(
section=f"update_manager {client_config.name}", section=f"update_manager {client_config.name}",

View File

@@ -67,6 +67,7 @@ def run_client_removal(
if remove_client_nginx_logs(client, kl_instances): if remove_client_nginx_logs(client, kl_instances):
completion_msg.text.append("● NGINX logs removed") completion_msg.text.append("● NGINX logs removed")
BackupService().backup_moonraker_conf()
section = f"update_manager {client_name}" section = f"update_manager {client_name}"
handled_instances: List[Moonraker] = remove_config_section( handled_instances: List[Moonraker] = remove_config_section(
section, mr_instances section, mr_instances

View File

@@ -37,9 +37,10 @@ from components.webui_client.client_utils import (
) )
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 core.services.backup_service import BackupService
from core.settings.kiauh_settings import KiauhSettings from core.settings.kiauh_settings import KiauhSettings
from core.types.color import Color from core.types.color import Color
from utils.common import backup_printer_config_dir, check_install_dependencies from utils.common import check_install_dependencies
from utils.config_utils import add_config_section from utils.config_utils import add_config_section
from utils.fs_utils import unzip from utils.fs_utils import unzip
from utils.input_utils import get_confirm from utils.input_utils import get_confirm
@@ -97,7 +98,7 @@ def install_client(
if enable_remotemode and client.client == WebClientType.MAINSAIL: if enable_remotemode and client.client == WebClientType.MAINSAIL:
enable_mainsail_remotemode() enable_mainsail_remotemode()
backup_printer_config_dir() BackupService().backup_printer_config_dir()
add_config_section( add_config_section(
section=f"update_manager {client.name}", section=f"update_manager {client.name}",
instances=mr_instances, instances=mr_instances,

View File

@@ -25,8 +25,8 @@ from components.webui_client.fluidd_data import FluiddData
from components.webui_client.mainsail_data import MainsailData from components.webui_client.mainsail_data import MainsailData
from core.menus import Option from core.menus import Option
from core.menus.base_menu import BaseMenu from core.menus.base_menu import BaseMenu
from core.services.backup_service import BackupService
from core.types.color import Color from core.types.color import Color
from utils.common import backup_printer_config_dir
# noinspection PyUnusedLocal # noinspection PyUnusedLocal
@@ -86,7 +86,7 @@ class BackupMenu(BaseMenu):
backup_moonraker_dir() backup_moonraker_dir()
def backup_printer_config(self, **kwargs) -> None: def backup_printer_config(self, **kwargs) -> None:
backup_printer_config_dir() BackupService().backup_printer_config_dir()
def backup_moonraker_db(self, **kwargs) -> None: def backup_moonraker_db(self, **kwargs) -> None:
backup_moonraker_db_dir() backup_moonraker_db_dir()

View File

@@ -11,9 +11,12 @@ from __future__ import annotations
import shutil import shutil
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import Optional from typing import List, Optional
from components.klipper.klipper import Klipper
from components.moonraker.moonraker import Moonraker
from core.logger import Logger from core.logger import Logger
from utils.instance_utils import get_instances
class BackupService: class BackupService:
@@ -24,6 +27,14 @@ class BackupService:
def backup_root(self) -> Path: def backup_root(self) -> Path:
return self._backup_root return self._backup_root
@property
def timestamp(self) -> str:
return datetime.now().strftime("%Y%m%d-%H%M%S")
################################################
# GENERIC BACKUP METHODS
################################################
def backup_file( def backup_file(
self, self,
source_path: Path, source_path: Path,
@@ -47,9 +58,9 @@ class BackupService:
try: try:
self._backup_root.mkdir(parents=True, exist_ok=True) self._backup_root.mkdir(parents=True, exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
filename = ( filename = (
target_name or f"{source_path.stem}_{timestamp}{source_path.suffix}" target_name
or f"{source_path.stem}_{self.timestamp}{source_path.suffix}"
) )
if target_path is not None: if target_path is not None:
backup_path = self._backup_root.joinpath(target_path, filename) backup_path = self._backup_root.joinpath(target_path, filename)
@@ -91,8 +102,7 @@ class BackupService:
try: try:
self._backup_root.mkdir(parents=True, exist_ok=True) self._backup_root.mkdir(parents=True, exist_ok=True)
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S") backup_dir_name = f"{backup_name}_{self.timestamp}"
backup_dir_name = f"{backup_name}_{timestamp}"
if target_path is not None: if target_path is not None:
backup_path = self._backup_root.joinpath(target_path, backup_dir_name) backup_path = self._backup_root.joinpath(target_path, backup_dir_name)
@@ -109,3 +119,71 @@ class BackupService:
except Exception as e: except Exception as e:
Logger.print_error(f"Failed to backup directory '{source_path}': {e}") Logger.print_error(f"Failed to backup directory '{source_path}': {e}")
return None return None
################################################
# SPECIFIC BACKUP METHODS
################################################
def backup_printer_cfg(self):
klipper_instances: List[Klipper] = get_instances(Klipper)
for instance in klipper_instances:
target_path: Path = self._backup_root.joinpath(
instance.data_dir.name, f"config_{self.timestamp}"
)
self.backup_file(
source_path=instance.cfg_file,
target_path=target_path,
target_name=instance.cfg_file.name,
)
def backup_moonraker_conf(self):
moonraker_instances: List[Moonraker] = get_instances(Moonraker)
for instance in moonraker_instances:
target_path: Path = self._backup_root.joinpath(
instance.data_dir.name, f"config_{self.timestamp}"
)
self.backup_file(
source_path=instance.cfg_file,
target_path=target_path,
target_name=instance.cfg_file.name,
)
def backup_printer_config_dir(self) -> None:
instances: List[Klipper] = get_instances(Klipper)
if not instances:
# fallback: search for printer data directories in the user's home directory
Logger.print_info("No Klipper instances found via systemd services.")
Logger.print_info(
"Attempting to find printer data directories in home directory..."
)
home_dir = Path.home()
printer_data_dirs = []
for pattern in ["printer_data", "printer_*_data"]:
for data_dir in home_dir.glob(pattern):
if data_dir.is_dir():
printer_data_dirs.append(data_dir)
if not printer_data_dirs:
Logger.print_info("Unable to find directory to backup!")
Logger.print_info(
"No printer data directories found in home directory."
)
return
for data_dir in printer_data_dirs:
self.backup_directory(
source_path=data_dir.joinpath("config"),
target_path=data_dir.name,
backup_name="config",
)
return
for instance in instances:
self.backup_directory(
source_path=instance.base.cfg_dir,
target_path=f"{instance.data_dir.name}",
backup_name="config",
)

View File

@@ -151,6 +151,7 @@ class MobilerakerExtension(BaseExtension):
Logger.print_status( Logger.print_status(
"Removing Mobileraker's companion from update manager ..." "Removing Mobileraker's companion from update manager ..."
) )
BackupService().backup_moonraker_conf()
remove_config_section(MOBILERAKER_UPDATER_SECTION_NAME, mr_instances) remove_config_section(MOBILERAKER_UPDATER_SECTION_NAME, mr_instances)
Logger.print_ok( Logger.print_ok(
"Mobileraker's companion successfully removed from update manager!" "Mobileraker's companion successfully removed from update manager!"
@@ -162,6 +163,7 @@ class MobilerakerExtension(BaseExtension):
Logger.print_error(f"Error removing Mobileraker's companion:\n{e}") Logger.print_error(f"Error removing Mobileraker's companion:\n{e}")
def _patch_mobileraker_update_manager(self, instances: List[Moonraker]) -> None: def _patch_mobileraker_update_manager(self, instances: List[Moonraker]) -> None:
BackupService().backup_moonraker_conf()
add_config_section( add_config_section(
section=MOBILERAKER_UPDATER_SECTION_NAME, section=MOBILERAKER_UPDATER_SECTION_NAME,
instances=instances, instances=instances,

View File

@@ -14,6 +14,7 @@ from components.moonraker.moonraker import Moonraker
from core.instance_manager.base_instance import SUFFIX_BLACKLIST from core.instance_manager.base_instance import SUFFIX_BLACKLIST
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 core.services.backup_service import BackupService
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import ( from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
SimpleConfigParser, SimpleConfigParser,
) )
@@ -31,7 +32,10 @@ from extensions.obico import (
from extensions.obico.moonraker_obico import ( from extensions.obico.moonraker_obico import (
MoonrakerObico, MoonrakerObico,
) )
from utils.common import check_install_dependencies, moonraker_exists from utils.common import (
check_install_dependencies,
moonraker_exists,
)
from utils.config_utils import ( from utils.config_utils import (
add_config_section, add_config_section,
remove_config_section, remove_config_section,
@@ -119,6 +123,8 @@ class ObicoExtension(BaseExtension):
cmd_sysctl_manage("daemon-reload") cmd_sysctl_manage("daemon-reload")
BackupService().backup_printer_config_dir()
# add to klippers config # add to klippers config
self._patch_printer_cfg(kl_instances) self._patch_printer_cfg(kl_instances)
InstanceManager.restart_all(kl_instances) InstanceManager.restart_all(kl_instances)
@@ -165,6 +171,7 @@ class ObicoExtension(BaseExtension):
self._remove_obico_instances(ob_instances) self._remove_obico_instances(ob_instances)
self._remove_obico_dir() self._remove_obico_dir()
self._remove_obico_env() self._remove_obico_env()
BackupService().backup_printer_config_dir()
remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances) remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances)
remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances) remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances)
Logger.print_dialog( Logger.print_dialog(

View File

@@ -13,6 +13,7 @@ from components.klipper.klipper import Klipper
from components.moonraker.moonraker import Moonraker 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 core.services.backup_service import BackupService
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.octoapp import ( from extensions.octoapp import (
OA_DEPS_JSON_FILE, OA_DEPS_JSON_FILE,
@@ -133,6 +134,7 @@ class OctoappExtension(BaseExtension):
self._remove_OA_store_dirs() self._remove_OA_store_dirs()
self._remove_OA_dir() self._remove_OA_dir()
self._remove_OA_env() self._remove_OA_env()
BackupService().backup_moonraker_conf()
remove_config_section(f"include {OA_SYS_CFG_NAME}", mr_instances) remove_config_section(f"include {OA_SYS_CFG_NAME}", mr_instances)
run_remove_routines(OA_INSTALLER_LOG_FILE) run_remove_routines(OA_INSTALLER_LOG_FILE)
Logger.print_dialog( Logger.print_dialog(

View File

@@ -12,6 +12,7 @@ from typing import List
from components.moonraker.moonraker import Moonraker 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 core.services.backup_service import BackupService
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.octoeverywhere import ( from extensions.octoeverywhere import (
OE_DEPS_JSON_FILE, OE_DEPS_JSON_FILE,
@@ -133,6 +134,7 @@ class OctoeverywhereExtension(BaseExtension):
self._remove_oe_instances(ob_instances) self._remove_oe_instances(ob_instances)
self._remove_oe_dir() self._remove_oe_dir()
self._remove_oe_env() self._remove_oe_env()
BackupService().backup_moonraker_conf()
remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances) remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances)
run_remove_routines(OE_INSTALLER_LOG_FILE) run_remove_routines(OE_INSTALLER_LOG_FILE)
Logger.print_dialog( Logger.print_dialog(

View File

@@ -11,11 +11,12 @@ from typing import List
from components.moonraker.moonraker import Moonraker 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 core.services.backup_service import BackupService
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import ( from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
SimpleConfigParser, SimpleConfigParser,
) )
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from utils.common import backup_printer_config_dir, moonraker_exists from utils.common import moonraker_exists
from utils.input_utils import get_confirm from utils.input_utils import get_confirm
@@ -112,10 +113,10 @@ class SimplyPrintExtension(BaseExtension):
continue continue
if is_install and not scp.has_section("simplyprint"): if is_install and not scp.has_section("simplyprint"):
backup_printer_config_dir() BackupService().backup_printer_config_dir()
scp.add_section(section) scp.add_section(section)
elif not is_install and scp.has_section("simplyprint"): elif not is_install and scp.has_section("simplyprint"):
backup_printer_config_dir() BackupService().backup_printer_config_dir()
scp.remove_section(section) scp.remove_section(section)
scp.write_file(moonraker.cfg_file) scp.write_file(moonraker.cfg_file)
patched_files.append(moonraker.cfg_file) patched_files.append(moonraker.cfg_file)

View File

@@ -100,6 +100,7 @@ class SpoolmanExtension(BaseExtension):
mr_instances: List[Moonraker] = mrsvc.get_all_instances() mr_instances: List[Moonraker] = mrsvc.get_all_instances()
Logger.print_status("Removing Spoolman configuration from moonraker.conf...") Logger.print_status("Removing Spoolman configuration from moonraker.conf...")
BackupService().backup_moonraker_conf()
remove_config_section("spoolman", mr_instances) remove_config_section("spoolman", mr_instances)
Logger.print_status("Removing Spoolman from moonraker.asvc...") Logger.print_status("Removing Spoolman from moonraker.asvc...")
@@ -289,6 +290,7 @@ class SpoolmanExtension(BaseExtension):
mrsvc.load_instances() mrsvc.load_instances()
mr_instances = mrsvc.get_all_instances() mr_instances = mrsvc.get_all_instances()
BackupService().backup_moonraker_conf()
# noinspection HttpUrlsUsage # noinspection HttpUrlsUsage
add_config_section( add_config_section(
section="spoolman", section="spoolman",

View File

@@ -13,6 +13,7 @@ from typing import List
from components.moonraker.moonraker import Moonraker 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 core.services.backup_service import BackupService
from extensions.base_extension import BaseExtension from extensions.base_extension import BaseExtension
from extensions.telegram_bot import TG_BOT_REPO, TG_BOT_REQ_FILE 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 (
@@ -105,6 +106,7 @@ class TelegramBotExtension(BaseExtension):
cmd_sysctl_manage("daemon-reload") cmd_sysctl_manage("daemon-reload")
# add to moonraker update manager # add to moonraker update manager
BackupService().backup_moonraker_conf()
self._patch_bot_update_manager(mr_instances) self._patch_bot_update_manager(mr_instances)
# restart moonraker # restart moonraker
@@ -150,6 +152,7 @@ class TelegramBotExtension(BaseExtension):
self._remove_bot_instances(tb_instances) self._remove_bot_instances(tb_instances)
self._remove_bot_dir() self._remove_bot_dir()
self._remove_bot_env() self._remove_bot_env()
BackupService().backup_moonraker_conf()
remove_config_section("update_manager moonraker-telegram-bot", mr_instances) remove_config_section("update_manager moonraker-telegram-bot", mr_instances)
self._delete_bot_logs(tb_instances) self._delete_bot_logs(tb_instances)
except Exception as e: except Exception as e:

View File

@@ -14,13 +14,11 @@ from datetime import datetime
from pathlib import Path from pathlib import Path
from typing import Dict, List, Literal, Set from typing import Dict, List, Literal, Set
from components.klipper.klipper import Klipper
from components.moonraker.moonraker import Moonraker from components.moonraker.moonraker import Moonraker
from core.constants import ( from core.constants import (
GLOBAL_DEPS, GLOBAL_DEPS,
) )
from core.logger import DialogType, Logger from core.logger import DialogType, Logger
from core.services.backup_service import BackupService
from core.types.color import Color from core.types.color import Color
from core.types.component_status import ComponentStatus, StatusCode from core.types.component_status import ComponentStatus, StatusCode
from utils.git_utils import ( from utils.git_utils import (
@@ -151,23 +149,6 @@ def get_install_status(
) )
def backup_printer_config_dir() -> None:
instances: List[Klipper] = get_instances(Klipper)
svc = BackupService()
if not instances:
Logger.print_info("Unable to find directory to backup!")
Logger.print_info("Are there no Klipper instances installed?")
return
for instance in instances:
svc.backup_directory(
source_path=instance.base.cfg_dir,
target_path=f"{instance.data_dir.name}",
backup_name="config",
)
def moonraker_exists(name: str = "") -> List[Moonraker]: def moonraker_exists(name: str = "") -> List[Moonraker]:
""" """
Helper method to check if a Moonraker instance exists Helper method to check if a Moonraker instance exists

View File

@@ -73,7 +73,7 @@ def add_config_section_at_top(section: str, instances: List[InstanceType]) -> No
tmp.writelines(org_content) tmp.writelines(org_content)
cfg_file.unlink() cfg_file.unlink()
shutil.move(tmp_cfg_path, cfg_file) shutil.move(tmp_cfg_path.as_posix(), cfg_file)
Logger.print_ok("OK!") Logger.print_ok("OK!")
@@ -81,7 +81,7 @@ def add_config_section_at_top(section: str, instances: List[InstanceType]) -> No
def remove_config_section( def remove_config_section(
section: str, instances: List[InstanceType] section: str, instances: List[InstanceType]
) -> List[InstanceType]: ) -> List[InstanceType]:
removed_from: List[instances] = [] removed_from: List[InstanceType] = []
for instance in instances: for instance in instances:
cfg_file = instance.cfg_file cfg_file = instance.cfg_file
Logger.print_status(f"Remove section '[{section}]' from '{cfg_file}' ...") Logger.print_status(f"Remove section '[{section}]' from '{cfg_file}' ...")