feat: implement optional extension update entry point
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
@@ -22,7 +22,7 @@ from core.menus import FooterType
|
||||
from core.menus.advanced_menu import AdvancedMenu
|
||||
from core.menus.backup_menu import BackupMenu
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from core.menus.extensions_menu import ExtensionsMenu
|
||||
from extensions.extensions_menu import ExtensionsMenu
|
||||
from core.menus.install_menu import InstallMenu
|
||||
from core.menus.remove_menu import RemoveMenu
|
||||
from core.menus.settings_menu import SettingsMenu
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# ======================================================================= #
|
||||
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||
# #
|
||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||
# https://github.com/dw-0/kiauh #
|
||||
# #
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||
# ======================================================================= #
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
EXTENSION_ROOT = Path(__file__).resolve().parents[1].joinpath("extensions")
|
||||
|
||||
@@ -19,12 +19,11 @@ class BaseExtension(ABC):
|
||||
|
||||
@abstractmethod
|
||||
def install_extension(self, **kwargs) -> None:
|
||||
raise NotImplementedError(
|
||||
"Subclasses must implement the install_extension method"
|
||||
)
|
||||
raise NotImplementedError
|
||||
|
||||
def update_extension(self, **kwargs) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def remove_extension(self, **kwargs) -> None:
|
||||
raise NotImplementedError(
|
||||
"Subclasses must implement the remove_extension method"
|
||||
)
|
||||
raise NotImplementedError
|
||||
@@ -14,7 +14,8 @@ import textwrap
|
||||
from pathlib import Path
|
||||
from typing import Type, Dict
|
||||
|
||||
from core.base_extension import BaseExtension
|
||||
from extensions import EXTENSION_ROOT
|
||||
from extensions.base_extension import BaseExtension
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import RESET_FORMAT, COLOR_CYAN, COLOR_YELLOW
|
||||
|
||||
@@ -31,9 +32,8 @@ class ExtensionsMenu(BaseMenu):
|
||||
|
||||
def discover_extensions(self) -> Dict[str, BaseExtension]:
|
||||
ext_dict = {}
|
||||
extensions_dir = Path(__file__).resolve().parents[2].joinpath("extensions")
|
||||
|
||||
for ext in extensions_dir.iterdir():
|
||||
for ext in EXTENSION_ROOT.iterdir():
|
||||
metadata_json = Path(ext).joinpath("metadata.json")
|
||||
if not metadata_json.exists():
|
||||
continue
|
||||
@@ -95,16 +95,18 @@ class ExtensionSubmenu(BaseMenu):
|
||||
def __init__(self, previous_menu: BaseMenu, extension: BaseExtension):
|
||||
super().__init__()
|
||||
|
||||
self.previous_menu = previous_menu
|
||||
self.options = {
|
||||
"1": extension.install_extension,
|
||||
"2": extension.remove_extension,
|
||||
}
|
||||
|
||||
self.extension = extension
|
||||
self.extension_name = extension.metadata.get("display_name")
|
||||
self.extension_desc = extension.metadata.get("description")
|
||||
|
||||
self.previous_menu = previous_menu
|
||||
self.options["1"] = extension.install_extension
|
||||
if self.extension.metadata.get("updates"):
|
||||
self.options["2"] = extension.update_extension
|
||||
self.options["3"] = extension.remove_extension
|
||||
else:
|
||||
self.options["2"] = extension.remove_extension
|
||||
|
||||
def print_menu(self) -> None:
|
||||
header = f" [ {self.extension_name} ] "
|
||||
color = COLOR_YELLOW
|
||||
@@ -127,7 +129,13 @@ class ExtensionSubmenu(BaseMenu):
|
||||
"""
|
||||
|-------------------------------------------------------|
|
||||
| 1) Install |
|
||||
| 2) Remove |
|
||||
"""
|
||||
)[1:]
|
||||
|
||||
if self.extension.metadata.get("updates"):
|
||||
menu += "| 2) Update |\n"
|
||||
menu += "| 3) Remove |\n"
|
||||
else:
|
||||
menu += "| 2) Remove |\n"
|
||||
|
||||
print(menu, end="")
|
||||
@@ -13,7 +13,7 @@ from typing import List
|
||||
|
||||
from components.klipper.klipper import Klipper
|
||||
from core.backup_manager.backup_manager import BackupManager
|
||||
from core.base_extension import BaseExtension
|
||||
from extensions.base_extension import BaseExtension
|
||||
from core.config_manager.config_manager import ConfigManager
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from extensions.gcode_shell_cmd import (
|
||||
|
||||
@@ -19,7 +19,7 @@ from components.klipper.klipper_dialogs import (
|
||||
print_instance_overview,
|
||||
DisplayType,
|
||||
)
|
||||
from core.base_extension import BaseExtension
|
||||
from extensions.base_extension import BaseExtension
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from core.menus.base_menu import BaseMenu
|
||||
|
||||
Reference in New Issue
Block a user