Changed code to support older Python versions
This commit is contained in:
parent
eb92d2d36f
commit
582458cdd0
5027 changed files with 794942 additions and 4 deletions
148
venv/lib/python3.11/site-packages/rich_toolkit/toolkit.py
Normal file
148
venv/lib/python3.11/site-packages/rich_toolkit/toolkit.py
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Dict, List, Optional, Union
|
||||
|
||||
from rich.console import Console, RenderableType
|
||||
from rich.theme import Theme
|
||||
|
||||
from .input import Input
|
||||
from .menu import Menu, Option, ReturnValue
|
||||
from .progress import Progress
|
||||
from .styles.base import BaseStyle
|
||||
|
||||
|
||||
class RichToolkitTheme:
|
||||
def __init__(self, style: BaseStyle, theme: Dict[str, str]) -> None:
|
||||
self.style = style
|
||||
self.rich_theme = Theme(theme)
|
||||
|
||||
|
||||
class RichToolkit:
|
||||
def __init__(
|
||||
self,
|
||||
style: Optional[BaseStyle] = None,
|
||||
theme: Optional[RichToolkitTheme] = None,
|
||||
handle_keyboard_interrupts: bool = True,
|
||||
) -> None:
|
||||
# TODO: deprecate this
|
||||
|
||||
self.theme = theme
|
||||
if theme is not None:
|
||||
self.style = theme.style
|
||||
self.style.theme = theme.rich_theme
|
||||
self.style.console = Console(theme=theme.rich_theme)
|
||||
else:
|
||||
assert style is not None
|
||||
|
||||
self.style = style
|
||||
|
||||
self.console = self.style.console
|
||||
|
||||
self.handle_keyboard_interrupts = handle_keyboard_interrupts
|
||||
|
||||
def __enter__(self):
|
||||
self.console.print()
|
||||
return self
|
||||
|
||||
def __exit__(
|
||||
self, exc_type: Any, exc_value: Any, traceback: Any
|
||||
) -> Union[bool, None]:
|
||||
if self.handle_keyboard_interrupts and exc_type is KeyboardInterrupt:
|
||||
# we want to handle keyboard interrupts gracefully, instead of showing a traceback
|
||||
# or any other error message
|
||||
return True
|
||||
|
||||
self.console.print()
|
||||
|
||||
return None
|
||||
|
||||
def print_title(self, title: str, **metadata: Any) -> None:
|
||||
self.console.print(self.style.render_element(title, title=True, **metadata))
|
||||
|
||||
def print(self, *renderables: RenderableType, **metadata: Any) -> None:
|
||||
self.console.print(
|
||||
*[
|
||||
self.style.render_element(renderable, **metadata)
|
||||
for renderable in renderables
|
||||
]
|
||||
)
|
||||
|
||||
def print_as_string(self, *renderables: RenderableType, **metadata: Any) -> str:
|
||||
with self.console.capture() as capture:
|
||||
self.print(*renderables, **metadata)
|
||||
|
||||
return capture.get().rstrip()
|
||||
|
||||
def print_line(self) -> None:
|
||||
self.console.print(self.style.empty_line())
|
||||
|
||||
def confirm(self, label: str, **metadata: Any) -> bool:
|
||||
return self.ask(
|
||||
label=label,
|
||||
options=[
|
||||
Option({"value": True, "name": "Yes"}),
|
||||
Option({"value": False, "name": "No"}),
|
||||
],
|
||||
inline=True,
|
||||
**metadata,
|
||||
)
|
||||
|
||||
def ask(
|
||||
self,
|
||||
label: str,
|
||||
options: List[Option[ReturnValue]],
|
||||
inline: bool = False,
|
||||
allow_filtering: bool = False,
|
||||
**metadata: Any,
|
||||
) -> ReturnValue:
|
||||
return Menu(
|
||||
label=label,
|
||||
options=options,
|
||||
console=self.console,
|
||||
style=self.style,
|
||||
inline=inline,
|
||||
allow_filtering=allow_filtering,
|
||||
**metadata,
|
||||
).ask()
|
||||
|
||||
def input(
|
||||
self,
|
||||
title: str,
|
||||
default: str = "",
|
||||
placeholder: str = "",
|
||||
password: bool = False,
|
||||
required: bool = False,
|
||||
required_message: str = "",
|
||||
inline: bool = False,
|
||||
**metadata: Any,
|
||||
) -> str:
|
||||
return Input(
|
||||
name=title,
|
||||
label=title,
|
||||
default=default,
|
||||
placeholder=placeholder,
|
||||
password=password,
|
||||
required=required,
|
||||
required_message=required_message,
|
||||
inline=inline,
|
||||
style=self.style,
|
||||
**metadata,
|
||||
).ask()
|
||||
|
||||
def progress(
|
||||
self,
|
||||
title: str,
|
||||
transient: bool = False,
|
||||
transient_on_error: bool = False,
|
||||
inline_logs: bool = False,
|
||||
lines_to_show: int = -1,
|
||||
) -> Progress:
|
||||
return Progress(
|
||||
title=title,
|
||||
console=self.console,
|
||||
style=self.style,
|
||||
transient=transient,
|
||||
transient_on_error=transient_on_error,
|
||||
inline_logs=inline_logs,
|
||||
lines_to_show=lines_to_show,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue