refactor(backup): migrate backup_printer_config_dir to BackupService and update references accordingly

This commit is contained in:
dw-0
2025-09-30 21:11:48 +02:00
parent 03c0d46a2e
commit 9168ad88a6
8 changed files with 56 additions and 57 deletions

View File

@@ -14,9 +14,9 @@ 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.common import backup_printer_config_dir
from utils.config_utils import remove_config_section from utils.config_utils import remove_config_section
from utils.fs_utils import run_remove_routines from utils.fs_utils import run_remove_routines
from utils.instance_type import InstanceType from utils.instance_type import InstanceType
@@ -36,7 +36,7 @@ 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")
backup_printer_config_dir() 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

@@ -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

@@ -147,3 +147,43 @@ class BackupService:
target_path=target_path, target_path=target_path,
target_name=instance.cfg_file.name, 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

@@ -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,
) )
@@ -32,7 +33,6 @@ from extensions.obico.moonraker_obico import (
MoonrakerObico, MoonrakerObico,
) )
from utils.common import ( from utils.common import (
backup_printer_config_dir,
check_install_dependencies, check_install_dependencies,
moonraker_exists, moonraker_exists,
) )
@@ -123,7 +123,7 @@ class ObicoExtension(BaseExtension):
cmd_sysctl_manage("daemon-reload") cmd_sysctl_manage("daemon-reload")
backup_printer_config_dir() 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)
@@ -171,7 +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()
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_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

@@ -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

@@ -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,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]: 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