diff --git a/python/lightning_sdk/cli/legacy/clusters_menu.py b/python/lightning_sdk/cli/legacy/clusters_menu.py index 12624cdf..20ca3c07 100644 --- a/python/lightning_sdk/cli/legacy/clusters_menu.py +++ b/python/lightning_sdk/cli/legacy/clusters_menu.py @@ -2,10 +2,10 @@ from typing import List, Optional from rich.console import Console -from simple_term_menu import TerminalMenu from lightning_sdk import Teamspace from lightning_sdk.api.cloud_account_api import CloudAccountApi +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.lightning_cloud.openapi import V1ClusterType, V1ProjectClusterBinding diff --git a/python/lightning_sdk/cli/legacy/jobs_menu.py b/python/lightning_sdk/cli/legacy/jobs_menu.py index 86b4c08e..eaa19ca8 100644 --- a/python/lightning_sdk/cli/legacy/jobs_menu.py +++ b/python/lightning_sdk/cli/legacy/jobs_menu.py @@ -1,9 +1,9 @@ from typing import Dict, List, Optional from rich.console import Console -from simple_term_menu import TerminalMenu from lightning_sdk.cli.legacy.exceptions import StudioCliError +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.job import Job from lightning_sdk.teamspace import Teamspace diff --git a/python/lightning_sdk/cli/legacy/mmts_menu.py b/python/lightning_sdk/cli/legacy/mmts_menu.py index 042c8ce3..057808ff 100644 --- a/python/lightning_sdk/cli/legacy/mmts_menu.py +++ b/python/lightning_sdk/cli/legacy/mmts_menu.py @@ -1,9 +1,9 @@ from typing import Dict, List, Optional from rich.console import Console -from simple_term_menu import TerminalMenu from lightning_sdk.cli.legacy.exceptions import StudioCliError +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.mmt import MMT from lightning_sdk.teamspace import Teamspace diff --git a/python/lightning_sdk/cli/legacy/studios_menu.py b/python/lightning_sdk/cli/legacy/studios_menu.py index 609c728e..0d55d378 100644 --- a/python/lightning_sdk/cli/legacy/studios_menu.py +++ b/python/lightning_sdk/cli/legacy/studios_menu.py @@ -1,10 +1,10 @@ from typing import Dict, List, Optional from rich.console import Console -from simple_term_menu import TerminalMenu from lightning_sdk import Studio from lightning_sdk.api import OrgApi, TeamspaceApi +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.user import User diff --git a/python/lightning_sdk/cli/legacy/teamspace_menu.py b/python/lightning_sdk/cli/legacy/teamspace_menu.py index 8bc18384..81df2847 100644 --- a/python/lightning_sdk/cli/legacy/teamspace_menu.py +++ b/python/lightning_sdk/cli/legacy/teamspace_menu.py @@ -1,10 +1,10 @@ from typing import Dict, List, Optional from rich.console import Console -from simple_term_menu import TerminalMenu from lightning_sdk.api import OrgApi from lightning_sdk.cli.legacy.exceptions import StudioCliError +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.teamspace import Teamspace from lightning_sdk.user import User from lightning_sdk.utils.resolve import _get_authed_user diff --git a/python/lightning_sdk/cli/legacy/upload.py b/python/lightning_sdk/cli/legacy/upload.py index 58d67483..8731a77c 100644 --- a/python/lightning_sdk/cli/legacy/upload.py +++ b/python/lightning_sdk/cli/legacy/upload.py @@ -9,7 +9,6 @@ import rich from rich.console import Console from rich.progress import Progress, SpinnerColumn, TextColumn, TimeElapsedColumn -from simple_term_menu import TerminalMenu from tqdm import tqdm from lightning_sdk.api.lit_container_api import DockerNotRunningError, LCRAuthFailedError, LitContainerApi @@ -17,6 +16,7 @@ from lightning_sdk.cli.legacy.exceptions import StudioCliError from lightning_sdk.cli.legacy.studios_menu import _StudiosMenu from lightning_sdk.cli.utils.teamspace_selection import TeamspacesMenu +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.constants import _LIGHTNING_DEBUG from lightning_sdk.exceptions import DeprecatedCommand, DeprecatedError from lightning_sdk.models import upload_model as _upload_model diff --git a/python/lightning_sdk/cli/utils/owner_selection.py b/python/lightning_sdk/cli/utils/owner_selection.py index 3bb92805..631d9819 100644 --- a/python/lightning_sdk/cli/utils/owner_selection.py +++ b/python/lightning_sdk/cli/utils/owner_selection.py @@ -3,9 +3,9 @@ from typing import Dict, List, Optional, TypedDict import rich_click as click -from simple_term_menu import TerminalMenu from lightning_sdk.cli.legacy.exceptions import StudioCliError +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.organization import Organization from lightning_sdk.owner import Owner from lightning_sdk.user import User diff --git a/python/lightning_sdk/cli/utils/studio_selection.py b/python/lightning_sdk/cli/utils/studio_selection.py index 8efe6192..9635a0d9 100644 --- a/python/lightning_sdk/cli/utils/studio_selection.py +++ b/python/lightning_sdk/cli/utils/studio_selection.py @@ -3,9 +3,9 @@ from typing import Dict, List, Optional import rich_click as click -from simple_term_menu import TerminalMenu from lightning_sdk.cli.legacy.exceptions import StudioCliError +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.studio import Studio from lightning_sdk.teamspace import Teamspace from lightning_sdk.utils.resolve import _get_authed_user diff --git a/python/lightning_sdk/cli/utils/teamspace_selection.py b/python/lightning_sdk/cli/utils/teamspace_selection.py index 5b7b72c3..870e9c25 100644 --- a/python/lightning_sdk/cli/utils/teamspace_selection.py +++ b/python/lightning_sdk/cli/utils/teamspace_selection.py @@ -3,10 +3,10 @@ from typing import Dict, List, Optional import rich_click as click -from simple_term_menu import TerminalMenu from lightning_sdk.cli.legacy.exceptions import StudioCliError from lightning_sdk.cli.utils.resolve import resolve_teamspace_owner_name_format +from lightning_sdk.cli.utils.terminal_menu_wrapper import TerminalMenu from lightning_sdk.teamspace import Organization, Teamspace from lightning_sdk.user import Owner, User from lightning_sdk.utils.resolve import ApiException, _get_authed_user, _resolve_teamspace diff --git a/python/lightning_sdk/cli/utils/terminal_menu_wrapper.py b/python/lightning_sdk/cli/utils/terminal_menu_wrapper.py new file mode 100644 index 00000000..726b5f15 --- /dev/null +++ b/python/lightning_sdk/cli/utils/terminal_menu_wrapper.py @@ -0,0 +1,30 @@ +import os +from typing import Any, List, Optional + +if os.name == "nt": + import inquirer # import only for windows + + class TerminalMenu: + def __init__( + self, + options: List[str], + title: Optional[str] = None, + **kwargs: Any, + ) -> None: + self.options = options + self.title = title or "Please select an option:" + self.chosen_menu_index: Optional[int] = None + + def show(self) -> None: + # generate inquirer questons + questions = [inquirer.List("choice", message=self.title, choices=self.options)] + answer = inquirer.prompt(questions) + + # Keyboard Interrupt + if not answer or "choice" not in answer: + self.chosen_menu_index = None + return + + self.chosen_menu_index = self.options.index(answer["choice"]) +else: + from simple_term_menu import TerminalMenu # noqa: F401 diff --git a/python/pyproject.toml b/python/pyproject.toml index 07099853..290a5135 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -25,7 +25,8 @@ dependencies = [ # alphabetically sorted "pyyaml", # for config handling "requests", # for downloading files via urls "rich", # for nice printing - "simple-term-menu", # for CLI + "simple-term-menu; sys_platform != 'win32'", # for CLI on POSIX + "inquirer; sys_platform == 'win32'", # for CLI on Windows "six", # for lightning_cloud "tqdm", # for progressbars "urllib3<=2.5.0", # for downloading files via urls