From 198efb5f53968d0640be8ae7892b021c5658ec00 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Tue, 26 Nov 2024 21:10:48 +1100 Subject: [PATCH] Fix 2916 - Reinstate prompt in list menus (#2940) * Reinstate prompt in list menus * Ruff --- archinstall/lib/disk/partitioning_menu.py | 11 +++++-- archinstall/lib/disk/subvolume_menu.py | 14 ++++++-- .../lib/interactions/manage_users_conf.py | 8 ++++- archinstall/lib/interactions/network_menu.py | 8 ++++- archinstall/lib/menu/list_manager.py | 32 +++++++++++-------- archinstall/lib/mirrors.py | 5 +-- 6 files changed, 56 insertions(+), 22 deletions(-) diff --git a/archinstall/lib/disk/partitioning_menu.py b/archinstall/lib/disk/partitioning_menu.py index a1a82959..308b0d9c 100644 --- a/archinstall/lib/disk/partitioning_menu.py +++ b/archinstall/lib/disk/partitioning_menu.py @@ -58,7 +58,12 @@ class PartitioningList(ListManager): } display_actions = list(self._actions.values()) - super().__init__(prompt, device_partitions, display_actions[:2], display_actions[3:]) + super().__init__( + device_partitions, + display_actions[:2], + display_actions[3:], + prompt + ) @override def selected_action_display(self, selection: PartitionModification) -> str: @@ -186,8 +191,8 @@ class PartitioningList(ListManager): def _set_btrfs_subvolumes(self, partition: PartitionModification) -> None: partition.btrfs_subvols = SubvolumeMenu( - str(_("Manage btrfs subvolumes for current partition")), - partition.btrfs_subvols + partition.btrfs_subvols, + None ).run() def _prompt_formatting(self, partition: PartitionModification) -> None: diff --git a/archinstall/lib/disk/subvolume_menu.py b/archinstall/lib/disk/subvolume_menu.py index 018e88dd..fdf14943 100644 --- a/archinstall/lib/disk/subvolume_menu.py +++ b/archinstall/lib/disk/subvolume_menu.py @@ -16,13 +16,23 @@ if TYPE_CHECKING: class SubvolumeMenu(ListManager): - def __init__(self, prompt: str, btrfs_subvols: list[SubvolumeModification]): + def __init__( + self, + btrfs_subvols: list[SubvolumeModification], + prompt: str | None = None + ): self._actions = [ str(_('Add subvolume')), str(_('Edit subvolume')), str(_('Delete subvolume')) ] - super().__init__(prompt, btrfs_subvols, [self._actions[0]], self._actions[1:]) + + super().__init__( + btrfs_subvols, + [self._actions[0]], + self._actions[1:], + prompt + ) @override def selected_action_display(self, selection: SubvolumeModification) -> str: diff --git a/archinstall/lib/interactions/manage_users_conf.py b/archinstall/lib/interactions/manage_users_conf.py index e2d73860..b9973057 100644 --- a/archinstall/lib/interactions/manage_users_conf.py +++ b/archinstall/lib/interactions/manage_users_conf.py @@ -26,7 +26,13 @@ class UserList(ListManager): str(_('Promote/Demote user')), str(_('Delete User')) ] - super().__init__(prompt, lusers, [self._actions[0]], self._actions[1:]) + + super().__init__( + lusers, + [self._actions[0]], + self._actions[1:], + prompt + ) @override def selected_action_display(self, selection: User) -> str: diff --git a/archinstall/lib/interactions/network_menu.py b/archinstall/lib/interactions/network_menu.py index ed7ad9c6..0f681d7c 100644 --- a/archinstall/lib/interactions/network_menu.py +++ b/archinstall/lib/interactions/network_menu.py @@ -24,7 +24,13 @@ class ManualNetworkConfig(ListManager): str(_('Edit interface')), str(_('Delete interface')) ] - super().__init__(prompt, preset, [self._actions[0]], self._actions[1:]) + + super().__init__( + preset, + [self._actions[0]], + self._actions[1:], + prompt + ) @override def selected_action_display(self, selection: Nic) -> str: diff --git a/archinstall/lib/menu/list_manager.py b/archinstall/lib/menu/list_manager.py index ad74dced..8bd1dea2 100644 --- a/archinstall/lib/menu/list_manager.py +++ b/archinstall/lib/menu/list_manager.py @@ -16,10 +16,10 @@ if TYPE_CHECKING: class ListManager: def __init__( self, - prompt: str, entries: list[Any], base_actions: list[str], - sub_menu_actions: list[str] + sub_menu_actions: list[str], + prompt: str | None = None ): """ :param prompt: Text which will appear at the header @@ -38,8 +38,7 @@ class ListManager: self._original_data = copy.deepcopy(entries) self._data = copy.deepcopy(entries) - explainer = str(_('\n Choose an object from the list, and select one of the available actions for it to execute')) - self._prompt = prompt if prompt else explainer + self._prompt: str | None = prompt self._separator = '' self._confirm_action = str(_('Confirm and exit')) @@ -66,8 +65,12 @@ class ListManager: # and the value is the original value from the self._data container data_formatted = self.reformat(self._data) options = self._prepare_selection(data_formatted) + header = self._get_header(data_formatted) + if self._prompt is not None: + header = f'{self._prompt}\n\n{header}' + items = [MenuItem(o[0], value=o[1]) for o in options] group = MenuItemGroup(items, sort_items=False) @@ -76,7 +79,7 @@ class ListManager: header=header, search_enabled=False, allow_skip=False, - alignment=Alignment.CENTER, + alignment=Alignment.CENTER ).run() match result.type_: @@ -149,16 +152,19 @@ class ListManager: Default implementation of the table to be displayed. Override if any custom formatting is needed """ - table = FormattedOutput.as_table(data) - rows = table.split('\n') + display_data: dict[str, Any | None] = {} - # these are the header rows of the table and do not map to any User obviously - # we're adding 2 spaces as prefix because the menu selector '> ' will be put before - # the selectable rows so the header has to be aligned - display_data: dict[str, Any | None] = {f'{rows[0]}': None, f'{rows[1]}': None} + if data: + table = FormattedOutput.as_table(data) + rows = table.split('\n') - for row, entry in zip(rows[2:], data): - display_data[row] = entry + # these are the header rows of the table and do not map to any User obviously + # we're adding 2 spaces as prefix because the menu selector '> ' will be put before + # the selectable rows so the header has to be aligned + display_data = {f'{rows[0]}': None, f'{rows[1]}': None} + + for row, entry in zip(rows[2:], data): + display_data[row] = entry return display_data diff --git a/archinstall/lib/mirrors.py b/archinstall/lib/mirrors.py index 198fe3e9..a81544f6 100644 --- a/archinstall/lib/mirrors.py +++ b/archinstall/lib/mirrors.py @@ -129,11 +129,12 @@ class CustomMirrorList(ListManager): str(_('Change custom mirror')), str(_('Delete custom mirror')) ] + super().__init__( - '', custom_mirrors, [self._actions[0]], - self._actions[1:] + self._actions[1:], + '' ) @override