From 9168ad88a6fb690875e12345b111167ea947758c Mon Sep 17 00:00:00 2001 From: dw-0 Date: Tue, 30 Sep 2025 21:11:48 +0200 Subject: [PATCH] refactor(backup): migrate `backup_printer_config_dir` to `BackupService` and update references accordingly --- .../client_config/client_config_remove.py | 4 +- .../client_config/client_config_setup.py | 4 +- kiauh/components/webui_client/client_setup.py | 5 ++- kiauh/core/menus/backup_menu.py | 4 +- kiauh/core/services/backup_service.py | 40 +++++++++++++++++ .../obico/moonraker_obico_extension.py | 6 +-- .../simply_print/simply_print_extension.py | 7 +-- kiauh/utils/common.py | 43 ------------------- 8 files changed, 56 insertions(+), 57 deletions(-) diff --git a/kiauh/components/webui_client/client_config/client_config_remove.py b/kiauh/components/webui_client/client_config/client_config_remove.py index 351c950..4c7ae89 100644 --- a/kiauh/components/webui_client/client_config/client_config_remove.py +++ b/kiauh/components/webui_client/client_config/client_config_remove.py @@ -14,9 +14,9 @@ from components.klipper.klipper import Klipper from components.moonraker.moonraker import Moonraker from components.webui_client.base_data import BaseWebClientConfig from core.logger import Logger +from core.services.backup_service import BackupService from core.services.message_service import Message from core.types.color import Color -from utils.common import backup_printer_config_dir from utils.config_utils import remove_config_section from utils.fs_utils import run_remove_routines from utils.instance_type import InstanceType @@ -36,7 +36,7 @@ def run_client_config_removal( if run_remove_routines(client_config.config_dir): completion_msg.text.append(f"● {client_config.display_name} removed") - backup_printer_config_dir() + BackupService().backup_printer_config_dir() completion_msg = remove_moonraker_config_section( completion_msg, client_config, mr_instances diff --git a/kiauh/components/webui_client/client_config/client_config_setup.py b/kiauh/components/webui_client/client_config/client_config_setup.py index 9d31fdb..1037a72 100644 --- a/kiauh/components/webui_client/client_config/client_config_setup.py +++ b/kiauh/components/webui_client/client_config/client_config_setup.py @@ -25,8 +25,8 @@ from components.webui_client.client_utils import ( ) from core.instance_manager.instance_manager import InstanceManager from core.logger import Logger +from core.services.backup_service import BackupService 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.fs_utils import create_symlink 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) if cfg_backup: - backup_printer_config_dir() + BackupService().backup_printer_config_dir() add_config_section( section=f"update_manager {client_config.name}", diff --git a/kiauh/components/webui_client/client_setup.py b/kiauh/components/webui_client/client_setup.py index 36eb194..e5d7ca7 100644 --- a/kiauh/components/webui_client/client_setup.py +++ b/kiauh/components/webui_client/client_setup.py @@ -37,9 +37,10 @@ from components.webui_client.client_utils import ( ) from core.instance_manager.instance_manager import InstanceManager from core.logger import DialogType, Logger +from core.services.backup_service import BackupService from core.settings.kiauh_settings import KiauhSettings 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.fs_utils import unzip from utils.input_utils import get_confirm @@ -97,7 +98,7 @@ def install_client( if enable_remotemode and client.client == WebClientType.MAINSAIL: enable_mainsail_remotemode() - backup_printer_config_dir() + BackupService().backup_printer_config_dir() add_config_section( section=f"update_manager {client.name}", instances=mr_instances, diff --git a/kiauh/core/menus/backup_menu.py b/kiauh/core/menus/backup_menu.py index a9d7500..7cd5a03 100644 --- a/kiauh/core/menus/backup_menu.py +++ b/kiauh/core/menus/backup_menu.py @@ -25,8 +25,8 @@ 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 core.services.backup_service import BackupService from core.types.color import Color -from utils.common import backup_printer_config_dir # noinspection PyUnusedLocal @@ -86,7 +86,7 @@ class BackupMenu(BaseMenu): backup_moonraker_dir() def backup_printer_config(self, **kwargs) -> None: - backup_printer_config_dir() + BackupService().backup_printer_config_dir() def backup_moonraker_db(self, **kwargs) -> None: backup_moonraker_db_dir() diff --git a/kiauh/core/services/backup_service.py b/kiauh/core/services/backup_service.py index 637d0d6..c48e401 100644 --- a/kiauh/core/services/backup_service.py +++ b/kiauh/core/services/backup_service.py @@ -147,3 +147,43 @@ class BackupService: 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", + ) diff --git a/kiauh/extensions/obico/moonraker_obico_extension.py b/kiauh/extensions/obico/moonraker_obico_extension.py index 986b153..bf2b20d 100644 --- a/kiauh/extensions/obico/moonraker_obico_extension.py +++ b/kiauh/extensions/obico/moonraker_obico_extension.py @@ -14,6 +14,7 @@ from components.moonraker.moonraker import Moonraker from core.instance_manager.base_instance import SUFFIX_BLACKLIST from core.instance_manager.instance_manager import InstanceManager 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 ( SimpleConfigParser, ) @@ -32,7 +33,6 @@ from extensions.obico.moonraker_obico import ( MoonrakerObico, ) from utils.common import ( - backup_printer_config_dir, check_install_dependencies, moonraker_exists, ) @@ -123,7 +123,7 @@ class ObicoExtension(BaseExtension): cmd_sysctl_manage("daemon-reload") - backup_printer_config_dir() + BackupService().backup_printer_config_dir() # add to klippers config self._patch_printer_cfg(kl_instances) @@ -171,7 +171,7 @@ class ObicoExtension(BaseExtension): self._remove_obico_instances(ob_instances) self._remove_obico_dir() self._remove_obico_env() - backup_printer_config_dir() + BackupService().backup_printer_config_dir() remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances) remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances) Logger.print_dialog( diff --git a/kiauh/extensions/simply_print/simply_print_extension.py b/kiauh/extensions/simply_print/simply_print_extension.py index 495e098..aa83a76 100644 --- a/kiauh/extensions/simply_print/simply_print_extension.py +++ b/kiauh/extensions/simply_print/simply_print_extension.py @@ -11,11 +11,12 @@ from typing import List from components.moonraker.moonraker import Moonraker from core.instance_manager.instance_manager import InstanceManager 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 ( SimpleConfigParser, ) 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 @@ -112,10 +113,10 @@ class SimplyPrintExtension(BaseExtension): continue if is_install and not scp.has_section("simplyprint"): - backup_printer_config_dir() + BackupService().backup_printer_config_dir() scp.add_section(section) elif not is_install and scp.has_section("simplyprint"): - backup_printer_config_dir() + BackupService().backup_printer_config_dir() scp.remove_section(section) scp.write_file(moonraker.cfg_file) patched_files.append(moonraker.cfg_file) diff --git a/kiauh/utils/common.py b/kiauh/utils/common.py index c08e4c7..99db882 100644 --- a/kiauh/utils/common.py +++ b/kiauh/utils/common.py @@ -14,13 +14,11 @@ from datetime import datetime from pathlib import Path from typing import Dict, List, Literal, Set -from components.klipper.klipper import Klipper from components.moonraker.moonraker import Moonraker from core.constants import ( GLOBAL_DEPS, ) from core.logger import DialogType, Logger -from core.services.backup_service import BackupService from core.types.color import Color from core.types.component_status import ComponentStatus, StatusCode from utils.git_utils import ( @@ -151,47 +149,6 @@ def get_install_status( ) -def backup_printer_config_dir() -> None: - instances: List[Klipper] = get_instances(Klipper) - svc = BackupService() - - 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: - svc.backup_directory( - source_path=data_dir.joinpath("config"), - target_path=data_dir.name, - backup_name="config", - ) - - 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]: """ Helper method to check if a Moonraker instance exists