Split out Result and ResultType to break import cycle (#3387)

Previously, there was an import cycle between tui.menu_item and
tui.types.
This commit is contained in:
correctmost 2025-04-13 05:06:48 +00:00 committed by GitHub
parent 57a63053cd
commit e281c2fa6a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 81 additions and 65 deletions

View File

@ -5,7 +5,8 @@ from archinstall.lib.output import info
from archinstall.lib.profile.profiles_handler import profile_handler
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import FrameProperties, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import FrameProperties, PreviewStyle
if TYPE_CHECKING:
from archinstall.lib.installer import Installer

View File

@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
if TYPE_CHECKING:
from collections.abc import Callable

View File

@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
if TYPE_CHECKING:
from collections.abc import Callable

View File

@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
if TYPE_CHECKING:
from collections.abc import Callable

View File

@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
from archinstall.default_profiles.xorg import XorgProfile
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
if TYPE_CHECKING:
from collections.abc import Callable

View File

@ -5,7 +5,8 @@ from archinstall.lib.output import info
from archinstall.lib.profile.profiles_handler import profile_handler
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import FrameProperties, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import FrameProperties, PreviewStyle
if TYPE_CHECKING:
from archinstall.lib.installer import Installer

View File

@ -6,7 +6,8 @@ from typing import TYPE_CHECKING
from archinstall.tui.curses_menu import SelectMenu, Tui
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle
from .args import ArchConfig
from .general import JSON, UNSAFE_JSON

View File

@ -13,7 +13,8 @@ from archinstall.lib.models.device_model import (
)
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
from ..menu.abstract_menu import AbstractSubMenu
from ..models.device_model import Fido2Device

View File

@ -19,7 +19,8 @@ from archinstall.lib.models.device_model import (
)
from archinstall.tui.curses_menu import EditMenu, SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, Orientation, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties, Orientation
from ..menu.list_manager import ListManager
from ..output import FormattedOutput

View File

@ -3,7 +3,8 @@ from typing import TYPE_CHECKING, assert_never, override
from archinstall.lib.models.device_model import SubvolumeModification
from archinstall.tui.curses_menu import EditMenu
from archinstall.tui.types import Alignment, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment
from ..menu.list_manager import ListManager
from ..utils.util import prompt_dir

View File

@ -30,7 +30,8 @@ from archinstall.lib.models.device_model import (
from archinstall.lib.output import debug
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle
from ..output import FormattedOutput
from ..utils.util import prompt_dir

View File

@ -7,7 +7,8 @@ from archinstall.lib.models.packages import Repository
from archinstall.lib.packages.packages import list_available_packages
from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle
from ..locale.utils import list_timezones
from ..models.audio_configuration import Audio, AudioConfiguration

View File

@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, override
from archinstall.tui.curses_menu import EditMenu, SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, Orientation, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, Orientation
from ..menu.list_manager import ListManager
from ..models.users import User

View File

@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, assert_never, override
from archinstall.tui.curses_menu import EditMenu, SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
from ..menu.list_manager import ListManager
from ..models.network_configuration import NetworkConfiguration, Nic, NicType

View File

@ -4,7 +4,8 @@ from typing import TYPE_CHECKING
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, FrameStyle, Orientation, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties, FrameStyle, Orientation, PreviewStyle
from ..hardware import GfxDriver, SysInfo
from ..models.bootloader import Bootloader

View File

@ -2,7 +2,8 @@ from typing import TYPE_CHECKING, override
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
from ..menu.abstract_menu import AbstractSubMenu
from ..models.locale import LocaleConfiguration

View File

@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, Any, Self
from archinstall.tui.curses_menu import SelectMenu, Tui
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Chars, FrameProperties, FrameStyle, PreviewStyle, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Chars, FrameProperties, FrameStyle, PreviewStyle
from ..output import error

View File

@ -3,7 +3,8 @@ from typing import TYPE_CHECKING, Any
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment
from ..output import FormattedOutput

View File

@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, override
from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties
from .menu.abstract_menu import AbstractSubMenu
from .menu.list_manager import ListManager

View File

@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, override
from archinstall.default_profiles.profile import GreeterType, Profile
from archinstall.tui.curses_menu import SelectMenu
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
from archinstall.tui.types import Alignment, FrameProperties, Orientation, ResultType
from archinstall.tui.result import ResultType
from archinstall.tui.types import Alignment, FrameProperties, Orientation
from ..hardware import GfxDriver
from ..interactions.system_conf import select_driver

View File

@ -1,6 +1,7 @@
from .curses_menu import EditMenu, SelectMenu, Tui
from .menu_item import MenuItem, MenuItemGroup
from .types import Alignment, Chars, FrameProperties, FrameStyle, Orientation, PreviewStyle, Result, ResultType
from .result import Result, ResultType
from .types import Alignment, Chars, FrameProperties, FrameStyle, Orientation, PreviewStyle
__all__ = [
'Alignment',

View File

@ -14,6 +14,7 @@ from typing import TYPE_CHECKING, Literal, override
from ..lib.output import debug
from .help import Help
from .menu_item import MenuItem, MenuItemGroup, MenuItemsState
from .result import Result, ResultType
from .types import (
SCROLL_INTERVAL,
STYLE,
@ -24,8 +25,6 @@ from .types import (
MenuKeys,
Orientation,
PreviewStyle,
Result,
ResultType,
ViewportEntry,
_FrameDim,
)

38
archinstall/tui/result.py Normal file
View File

@ -0,0 +1,38 @@
from dataclasses import dataclass
from enum import Enum, auto
from typing import Any
from .menu_item import MenuItem
class ResultType(Enum):
Selection = auto()
Skip = auto()
Reset = auto()
@dataclass
class Result:
type_: ResultType
_item: MenuItem | list[MenuItem] | str | None
def has_item(self) -> bool:
return self._item is not None
def get_value(self) -> Any:
return self.item().get_value()
def get_values(self) -> list[Any]:
return [i.get_value() for i in self.items()]
def item(self) -> MenuItem:
assert self._item is not None and isinstance(self._item, MenuItem)
return self._item
def items(self) -> list[MenuItem]:
assert self._item is not None and isinstance(self._item, list)
return self._item
def text(self) -> str:
assert self._item is not None and isinstance(self._item, str)
return self._item

View File

@ -1,9 +1,6 @@
import curses
from dataclasses import dataclass
from enum import Enum, auto
from typing import Any
from .menu_item import MenuItem
SCROLL_INTERVAL = 10
@ -94,23 +91,11 @@ class FrameProperties:
)
class ResultType(Enum):
Selection = auto()
Skip = auto()
Reset = auto()
class Orientation(Enum):
VERTICAL = auto()
HORIZONTAL = auto()
@dataclass
class MenuCell:
item: MenuItem
text: str
class PreviewStyle(Enum):
NONE = auto()
BOTTOM = auto()
@ -135,33 +120,6 @@ class Chars:
Right_arrow = ""
@dataclass
class Result:
type_: ResultType
_item: MenuItem | list[MenuItem] | str | None
def has_item(self) -> bool:
return self._item is not None
def get_value(self) -> Any:
return self.item().get_value()
def get_values(self) -> list[Any]:
return [i.get_value() for i in self.items()]
def item(self) -> MenuItem:
assert self._item is not None and isinstance(self._item, MenuItem)
return self._item
def items(self) -> list[MenuItem]:
assert self._item is not None and isinstance(self._item, list)
return self._item
def text(self) -> str:
assert self._item is not None and isinstance(self._item, str)
return self._item
@dataclass
class ViewportEntry:
text: str