feat(Klipper): create example printer.cfg if wanted

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2023-12-17 18:00:16 +01:00
parent 1178d3c730
commit 30b4414469
5 changed files with 60 additions and 5 deletions

View File

@@ -9,8 +9,11 @@
# This file may be distributed under the terms of the GNU GPLv3 license #
# ======================================================================= #
import os
from pathlib import Path
MODULE_PATH = os.path.dirname(os.path.abspath(__file__))
KLIPPER_DIR = f"{Path.home()}/klipper"
KLIPPER_ENV_DIR = f"{Path.home()}/klippy-env"
KLIPPER_REQUIREMENTS_TXT = f"{KLIPPER_DIR}/scripts/klippy-requirements.txt"

View File

@@ -31,7 +31,7 @@ class Klipper(BaseInstance):
super().__init__(instance_type=self, suffix=suffix)
self.klipper_dir = KLIPPER_DIR
self.env_dir = KLIPPER_ENV_DIR
self._cfg_file = f"{self.cfg_dir}/printer.cfg"
self._cfg_file = self._get_cfg()
self._log = f"{self.log_dir}/klippy.log"
self._serial = f"{self.comms_dir}/klippy.serial"
self._uds = f"{self.comms_dir}/klippy.sock"
@@ -156,8 +156,16 @@ class Klipper(BaseInstance):
env_file_content = env_template_file_content.replace(
"%KLIPPER_DIR%", self.klipper_dir
)
env_file_content = env_file_content.replace("%CFG%", self._cfg_file)
env_file_content = env_file_content.replace(
"%CFG%", f"{self.cfg_dir}/printer.cfg"
)
env_file_content = env_file_content.replace("%SERIAL%", self._serial)
env_file_content = env_file_content.replace("%LOG%", self._log)
env_file_content = env_file_content.replace("%UDS%", self._uds)
return env_file_content
def _get_cfg(self):
cfg_file_loc = f"{self.cfg_dir}/printer.cfg"
if Path(cfg_file_loc).is_file():
return cfg_file_loc
return None

View File

@@ -38,6 +38,7 @@ from kiauh.modules.klipper.klipper_utils import (
handle_disruptive_system_packages,
check_user_groups,
handle_single_to_multi_conversion,
create_example_printer_cfg,
)
from kiauh.core.repo_manager.repo_manager import RepoManager
from kiauh.utils.input_utils import (
@@ -106,6 +107,8 @@ def install_klipper(
Logger.print_status(EXIT_KLIPPER_SETUP)
return
create_example_cfg = get_confirm("Create example printer.cfg?")
if len(instance_list) < 1:
setup_klipper_prerequesites()
@@ -117,13 +120,24 @@ def install_klipper(
for name in instance_names:
if convert_single_to_multi:
handle_single_to_multi_conversion(instance_manager, name)
current_instance = handle_single_to_multi_conversion(instance_manager, name)
convert_single_to_multi = False
else:
instance_manager.current_instance = Klipper(suffix=name)
current_instance = Klipper(suffix=name)
instance_manager.current_instance = current_instance
instance_manager.create_instance()
instance_manager.enable_instance()
if create_example_cfg:
cfg_dir = current_instance.cfg_dir
Logger.print_status(f"Creating example printer.cfg in '{cfg_dir}'")
if current_instance.cfg_file is None:
create_example_printer_cfg(current_instance)
Logger.print_ok(f"Example printer.cfg created in '{cfg_dir}'")
else:
Logger.print_info(f"printer.cfg in '{cfg_dir}' already exists.")
instance_manager.start_instance()
instance_manager.reload_daemon()

View File

@@ -12,12 +12,15 @@
import os
import re
import grp
import shutil
import subprocess
import textwrap
from typing import List, Union
from kiauh.core.config_manager.config_manager import ConfigManager
from kiauh.core.instance_manager.instance_manager import InstanceManager
from kiauh.modules.klipper import MODULE_PATH
from kiauh.modules.klipper.klipper import Klipper
from kiauh.modules.klipper.klipper_dialogs import (
print_missing_usergroup_dialog,
@@ -92,7 +95,7 @@ def handle_existing_multi_instance_names(
def handle_single_to_multi_conversion(
instance_manager: InstanceManager, name: str
) -> None:
) -> Klipper:
instance_list = instance_manager.instances
instance_manager.current_instance = instance_list[0]
old_data_dir_name = instance_manager.instances[0].data_dir
@@ -103,6 +106,7 @@ def handle_single_to_multi_conversion(
new_data_dir_name = instance_manager.current_instance.data_dir
try:
os.rename(old_data_dir_name, new_data_dir_name)
return instance_manager.current_instance
except OSError as e:
log = f"Cannot rename {old_data_dir_name} to {new_data_dir_name}:\n{e}"
Logger.print_error(log)
@@ -188,3 +192,18 @@ def has_custom_names(instance_list: List[Klipper]) -> bool:
def get_highest_index(instance_list: List[Klipper]) -> int:
indices = [int(instance.suffix.split("-")[-1]) for instance in instance_list]
return max(indices)
def create_example_printer_cfg(instance: Klipper) -> None:
source = os.path.join(MODULE_PATH, "res", "printer.cfg")
target = os.path.join(instance.cfg_dir, "printer.cfg")
try:
shutil.copy(source, target)
except OSError as e:
Logger.print_error(f"Unable to create example printer.cfg:\n{e}")
return
cm = ConfigManager(target)
cm.read_config()
cm.set_value("virtual_sdcard", "path", instance.gcodes_dir)
cm.write_config()

View File

@@ -0,0 +1,11 @@
[mcu]
serial: /dev/serial/by-id/<your-mcu-id>
[virtual_sdcard]
path: %GCODES_DIR%
on_error_gcode: CANCEL_PRINT
[printer]
kinematics: none
max_velocity: 1000
max_accel: 1000