fix: use of lambdas breaks the menu refactoring

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-04-01 00:55:25 +02:00
parent b2dd5d8ed7
commit 4547ac571a
5 changed files with 78 additions and 29 deletions

View File

@@ -39,7 +39,7 @@ class KlipperFlashMethodMenu(BaseMenu):
self.options = {
"1": self.select_regular,
"2": self.select_sdcard,
"h": lambda: KlipperFlashMethodHelpMenu(self).run(),
"h": self.help_menu,
}
self.input_label_txt = "Select flash method"
self.footer_type = FooterType.BACK_HELP
@@ -78,6 +78,9 @@ class KlipperFlashMethodMenu(BaseMenu):
def goto_next_menu(self, **kwargs):
KlipperFlashCommandMenu(previous_menu=self).run()
def help_menu(self, **kwargs):
KlipperFlashMethodHelpMenu(previous_menu=self).run()
# noinspection PyUnusedLocal
# noinspection PyMethodMayBeStatic
@@ -89,7 +92,7 @@ class KlipperFlashCommandMenu(BaseMenu):
self.options = {
"1": self.select_flash,
"2": self.select_serialflash,
"h": lambda: KlipperFlashCommandHelpMenu(previous_menu=self).run(),
"h": self.help_menu,
}
self.default_option = self.select_flash
self.input_label_txt = "Select flash command"
@@ -121,6 +124,9 @@ class KlipperFlashCommandMenu(BaseMenu):
def goto_next_menu(self, **kwargs):
KlipperSelectMcuConnectionMenu(previous_menu=self).run()
def help_menu(self, **kwargs):
KlipperFlashCommandHelpMenu(previous_menu=self).run()
# noinspection PyUnusedLocal
# noinspection PyMethodMayBeStatic
@@ -133,7 +139,7 @@ class KlipperSelectMcuConnectionMenu(BaseMenu):
"1": self.select_usb,
"2": self.select_dfu,
"3": self.select_usb_dfu,
"h": lambda: KlipperMcuConnectionHelpMenu(previous_menu=self).run(),
"h": self.help_menu,
}
self.input_label_txt = "Select connection type"
self.footer_type = FooterType.BACK_HELP
@@ -193,6 +199,9 @@ class KlipperSelectMcuConnectionMenu(BaseMenu):
def goto_next_menu(self, **kwargs):
KlipperSelectMcuIdMenu(previous_menu=self).run()
def help_menu(self, **kwargs):
KlipperMcuConnectionHelpMenu(previous_menu=self).run()
# noinspection PyUnusedLocal
# noinspection PyMethodMayBeStatic

View File

@@ -17,6 +17,7 @@ from core.menus.base_menu import BaseMenu
from utils.constants import COLOR_YELLOW, RESET_FORMAT
# noinspection PyUnusedLocal
class AdvancedMenu(BaseMenu):
def __init__(self, previous_menu: BaseMenu):
super().__init__()
@@ -26,9 +27,9 @@ class AdvancedMenu(BaseMenu):
"1": None,
"2": None,
"3": None,
"4": lambda: KlipperFlashMethodMenu(previous_menu=self).run(),
"4": self.flash,
"5": None,
"6": lambda: KlipperSelectMcuConnectionMenu(previous_menu=self).run(),
"6": self.get_id,
}
def print_menu(self):
@@ -52,3 +53,9 @@ class AdvancedMenu(BaseMenu):
"""
)[1:]
print(menu, end="")
def flash(self, **kwargs):
KlipperFlashMethodMenu(previous_menu=self).run()
def get_id(self, **kwargs):
KlipperSelectMcuConnectionMenu(previous_menu=self).run()

View File

@@ -13,7 +13,7 @@ import subprocess
import sys
import textwrap
from abc import abstractmethod, ABC
from typing import Dict, Union, Callable, Type
from typing import Dict, Union, Callable, Type, Tuple
from core.menus import FooterType, NAVI_OPTIONS, ExitAppException, GoBackException
from utils.constants import (
@@ -129,7 +129,7 @@ class BaseMenu(ABC):
self.print_menu()
self.print_footer()
def validate_user_input(self, usr_input: str) -> Callable:
def validate_user_input(self, usr_input: str) -> Tuple[Callable, str]:
"""
Validate the user input and either return an Option, a string or None
:param usr_input: The user input in form of a string
@@ -148,16 +148,16 @@ class BaseMenu(ABC):
elif usr_input == "b":
raise GoBackException()
elif usr_input == "h":
return option
return option, usr_input
# if usr_input is None or an empty string, we execute the menues default option if specified
if usr_input == "" and self.default_option is not None:
return self.default_option
return self.default_option, usr_input
# user selected a regular option
return option
return option, usr_input
def handle_user_input(self) -> Callable:
def handle_user_input(self) -> Tuple[Callable, str]:
"""Handle the user input, return the validated input or print an error."""
while True:
print(f"{COLOR_CYAN}###### {self.input_label_txt}: {RESET_FORMAT}", end="")
@@ -173,7 +173,8 @@ class BaseMenu(ABC):
while True:
try:
self.display_menu()
self.handle_user_input()()
option = self.handle_user_input()
option[0](opt_index=option[1])
except GoBackException:
return
except ExitAppException:

View File

@@ -36,21 +36,21 @@ from utils.constants import (
)
# noinspection PyUnusedLocal
# noinspection PyMethodMayBeStatic
class MainMenu(BaseMenu):
def __init__(self):
super().__init__()
self.options = {
"0": lambda: LogUploadMenu(previous_menu=self).run(),
"1": lambda: InstallMenu(previous_menu=self).run(),
"2": lambda: UpdateMenu(previous_menu=self).run(),
"3": lambda: RemoveMenu(previous_menu=self).run(),
"4": lambda: AdvancedMenu(previous_menu=self).run(),
"5": lambda: BackupMenu(previous_menu=self).run(),
"6": None,
"e": lambda: ExtensionsMenu(previous_menu=self).run(),
"s": lambda: SettingsMenu(previous_menu=self).run(),
"0": self.log_upload_menu,
"1": self.install_menu,
"2": self.update_menu,
"3": self.remove_menu,
"4": self.advanced_menu,
"5": self.backup_menu,
"e": self.extension_menu,
"s": self.settings_menu,
}
self.header = True
self.footer_type = FooterType.QUIT
@@ -141,3 +141,27 @@ class MainMenu(BaseMenu):
"""
)[1:]
print(menu, end="")
def log_upload_menu(self, **kwargs):
LogUploadMenu(previous_menu=self).run()
def install_menu(self, **kwargs):
InstallMenu(previous_menu=self).run()
def update_menu(self, **kwargs):
UpdateMenu(previous_menu=self).run()
def remove_menu(self, **kwargs):
RemoveMenu(previous_menu=self).run()
def advanced_menu(self, **kwargs):
AdvancedMenu(previous_menu=self).run()
def backup_menu(self, **kwargs):
BackupMenu(previous_menu=self).run()
def settings_menu(self, **kwargs):
SettingsMenu(previous_menu=self).run()
def extension_menu(self, **kwargs):
ExtensionsMenu(previous_menu=self).run()

View File

@@ -27,14 +27,10 @@ class RemoveMenu(BaseMenu):
self.previous_menu: BaseMenu = previous_menu
self.options = {
"1": lambda: KlipperRemoveMenu(previous_menu=self).run(),
"2": lambda: MoonrakerRemoveMenu(previous_menu=self).run(),
"3": lambda: ClientRemoveMenu(
previous_menu=self, client=load_client_data("mainsail")
).run(),
"4": lambda: ClientRemoveMenu(
previous_menu=self, client=load_client_data("fluidd")
).run(),
"1": self.remove_klipper,
"2": self.remove_moonraker,
"3": self.remove_mainsail,
"4": self.remove_fluidd,
"5": None,
"6": None,
"7": None,
@@ -72,3 +68,15 @@ class RemoveMenu(BaseMenu):
"""
)[1:]
print(menu, end="")
def remove_klipper(self, **kwargs):
KlipperRemoveMenu(previous_menu=self).run()
def remove_moonraker(self, **kwargs):
MoonrakerRemoveMenu(previous_menu=self).run()
def remove_mainsail(self, **kwargs):
ClientRemoveMenu(previous_menu=self, client=load_client_data("mainsail")).run()
def remove_fluidd(self, **kwargs):
ClientRemoveMenu(previous_menu=self, client=load_client_data("fluidd")).run()