From 372712ba3241dab3c0ef211c573868206426ef3d Mon Sep 17 00:00:00 2001 From: dw-0 Date: Sun, 30 Jun 2024 18:05:42 +0200 Subject: [PATCH] refactor: delete klipper logs with their respective instances upon instance removal Signed-off-by: Dominik Willner --- kiauh/components/klipper/klipper.py | 46 +++++++++++-------- kiauh/components/klipper/klipper_remove.py | 18 ++------ .../klipper/menus/klipper_remove_menu.py | 11 ----- 3 files changed, 31 insertions(+), 44 deletions(-) diff --git a/kiauh/components/klipper/klipper.py b/kiauh/components/klipper/klipper.py index 2847ae5..b82a376 100644 --- a/kiauh/components/klipper/klipper.py +++ b/kiauh/components/klipper/klipper.py @@ -7,8 +7,8 @@ # This file may be distributed under the terms of the GNU GPLv3 license # # ======================================================================= # -import subprocess from pathlib import Path +from subprocess import DEVNULL, CalledProcessError, run from typing import List from components.klipper import KLIPPER_DIR, KLIPPER_ENV_DIR, MODULE_PATH @@ -50,43 +50,46 @@ class Klipper(BaseInstance): def create(self) -> None: Logger.print_status("Creating new Klipper Instance ...") + service_template_path = MODULE_PATH.joinpath("assets/klipper.service") service_file_name = self.get_service_file_name(extension=True) service_file_target = SYSTEMD.joinpath(service_file_name) + env_template_file_path = MODULE_PATH.joinpath("assets/klipper.env") env_file_target = self.sysd_dir.joinpath("klipper.env") try: self.create_folders() - self.write_service_file( - service_template_path, service_file_target, env_file_target + self._write_service_file( + service_template_path, + service_file_target, + env_file_target, ) - self.write_env_file(env_template_file_path, env_file_target) + self._write_env_file(env_template_file_path, env_file_target) - except subprocess.CalledProcessError as e: - Logger.print_error( - f"Error creating service file {service_file_target}: {e}" - ) + except CalledProcessError as e: + Logger.print_error(f"Error creating instance: {e}") raise except OSError as e: - Logger.print_error(f"Error creating env file {env_file_target}: {e}") + Logger.print_error(f"Error creating env file: {e}") raise def delete(self) -> None: service_file = self.get_service_file_name(extension=True) service_file_path = self.get_service_file_path() - Logger.print_status(f"Deleting Klipper Instance: {service_file}") + Logger.print_status(f"Removing Klipper Instance: {service_file}") try: command = ["sudo", "rm", "-f", service_file_path] - subprocess.run(command, check=True) - Logger.print_ok(f"Service file deleted: {service_file_path}") - except subprocess.CalledProcessError as e: - Logger.print_error(f"Error deleting service file: {e}") + run(command, check=True) + self._delete_logfiles() + Logger.print_ok("Instance successfully removed!") + except CalledProcessError as e: + Logger.print_error(f"Error removing instance: {e}") raise - def write_service_file( + def _write_service_file( self, service_template_path: Path, service_file_target: Path, @@ -96,15 +99,15 @@ class Klipper(BaseInstance): service_template_path, env_file_target ) command = ["sudo", "tee", service_file_target] - subprocess.run( + run( command, input=service_content.encode(), - stdout=subprocess.DEVNULL, + stdout=DEVNULL, check=True, ) Logger.print_ok(f"Service file created: {service_file_target}") - def write_env_file( + def _write_env_file( self, env_template_file_path: Path, env_file_target: Path ) -> None: env_file_content = self._prep_env_file(env_template_file_path) @@ -150,3 +153,10 @@ class Klipper(BaseInstance): env_file_content = env_file_content.replace("%LOG%", str(self.log)) env_file_content = env_file_content.replace("%UDS%", str(self.uds)) return env_file_content + + def _delete_logfiles(self) -> None: + from utils.fs_utils import run_remove_routines + + for log in list(self.log_dir.glob(f"{self.log}*")): + Logger.print_status(f"Remove '{log}'") + run_remove_routines(log) diff --git a/kiauh/components/klipper/klipper_remove.py b/kiauh/components/klipper/klipper_remove.py index 0b75ebd..e3ee1d1 100644 --- a/kiauh/components/klipper/klipper_remove.py +++ b/kiauh/components/klipper/klipper_remove.py @@ -23,7 +23,6 @@ def run_klipper_removal( remove_service: bool, remove_dir: bool, remove_env: bool, - delete_logs: bool, ) -> None: im = InstanceManager(Klipper) @@ -36,15 +35,9 @@ def run_klipper_removal( Logger.print_info("No Klipper Services installed! Skipped ...") if (remove_dir or remove_env) and im.instances: - Logger.print_warn("There are still other Klipper services installed!") - Logger.print_warn("Therefor the following parts cannot be removed:") - Logger.print_warn( - """ - ● Klipper local repository - ● Klipper Python environment - """, - False, - ) + Logger.print_info("There are still other Klipper services installed:") + Logger.print_info(f"● '{KLIPPER_DIR}' was not removed.", prefix=False) + Logger.print_info(f"● '{KLIPPER_ENV_DIR}' was not removed.", prefix=False) else: if remove_dir: Logger.print_status("Removing Klipper local repository ...") @@ -53,11 +46,6 @@ def run_klipper_removal( Logger.print_status("Removing Klipper Python environment ...") run_remove_routines(KLIPPER_ENV_DIR) - # delete klipper logs of all instances - if delete_logs: - Logger.print_status("Removing all Klipper logs ...") - delete_klipper_logs(im.instances) - def select_instances_to_remove( instances: List[Klipper], diff --git a/kiauh/components/klipper/menus/klipper_remove_menu.py b/kiauh/components/klipper/menus/klipper_remove_menu.py index 915dbb4..bed4dcd 100644 --- a/kiauh/components/klipper/menus/klipper_remove_menu.py +++ b/kiauh/components/klipper/menus/klipper_remove_menu.py @@ -25,7 +25,6 @@ class KlipperRemoveMenu(BaseMenu): self.remove_klipper_service = False self.remove_klipper_dir = False self.remove_klipper_env = False - self.remove_klipper_logs = False self.selection_state = False def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None: @@ -41,7 +40,6 @@ class KlipperRemoveMenu(BaseMenu): "1": Option(method=self.toggle_remove_klipper_service, menu=False), "2": Option(method=self.toggle_remove_klipper_dir, menu=False), "3": Option(method=self.toggle_remove_klipper_env, menu=False), - "4": Option(method=self.toggle_delete_klipper_logs, menu=False), "c": Option(method=self.run_removal_process, menu=False), } @@ -54,7 +52,6 @@ class KlipperRemoveMenu(BaseMenu): o1 = checked if self.remove_klipper_service else unchecked o2 = checked if self.remove_klipper_dir else unchecked o3 = checked if self.remove_klipper_env else unchecked - o4 = checked if self.remove_klipper_logs else unchecked menu = textwrap.dedent( f""" ╔═══════════════════════════════════════════════════════╗ @@ -68,7 +65,6 @@ class KlipperRemoveMenu(BaseMenu): ║ 1) {o1} Remove Service ║ ║ 2) {o2} Remove Local Repository ║ ║ 3) {o3} Remove Python Environment ║ - ║ 4) {o4} Delete all Log-Files ║ ╟───────────────────────────────────────────────────────╢ ║ C) Continue ║ ╟───────────────────────────────────────────────────────╢ @@ -80,7 +76,6 @@ class KlipperRemoveMenu(BaseMenu): self.remove_klipper_service = not self.remove_klipper_service self.remove_klipper_dir = not self.remove_klipper_dir self.remove_klipper_env = not self.remove_klipper_env - self.remove_klipper_logs = not self.remove_klipper_logs self.selection_state = not self.selection_state def toggle_remove_klipper_service(self, **kwargs) -> None: @@ -92,15 +87,11 @@ class KlipperRemoveMenu(BaseMenu): def toggle_remove_klipper_env(self, **kwargs) -> None: self.remove_klipper_env = not self.remove_klipper_env - def toggle_delete_klipper_logs(self, **kwargs) -> None: - self.remove_klipper_logs = not self.remove_klipper_logs - def run_removal_process(self, **kwargs) -> None: if ( not self.remove_klipper_service and not self.remove_klipper_dir and not self.remove_klipper_env - and not self.remove_klipper_logs ): error = f"{COLOR_RED}Nothing selected! Select options to remove first.{RESET_FORMAT}" print(error) @@ -110,13 +101,11 @@ class KlipperRemoveMenu(BaseMenu): self.remove_klipper_service, self.remove_klipper_dir, self.remove_klipper_env, - self.remove_klipper_logs, ) self.remove_klipper_service = False self.remove_klipper_dir = False self.remove_klipper_env = False - self.remove_klipper_logs = False self._go_back()