Add files via upload
This commit is contained in:
1 parent
3de18b6719
commit
eefd56e16f
2 files changed
+321
-32
No files matched your search
+59
-32
@@ -4,7 +4,6 @@ from rich.markdown import Markdown
|
||||
from rich.padding import Padding
|
||||
from rich.panel import Panel
|
||||
from rich.text import Text
|
||||
from rich.columns import Columns
|
||||
import re
|
||||
|
||||
console = Console()
|
||||
@@ -29,12 +28,6 @@ def print_substep(text, style=""):
|
||||
console.print(text, style=style)
|
||||
|
||||
|
||||
def print_table(items):
|
||||
"""Prints items in a table."""
|
||||
|
||||
console.print(Columns([Panel(f"[yellow]{item}", expand=True) for item in items]))
|
||||
|
||||
|
||||
def handle_input(
|
||||
message: str = "",
|
||||
check_type=False,
|
||||
@@ -44,33 +37,67 @@ def handle_input(
|
||||
nmax=None,
|
||||
oob_error="",
|
||||
extra_info="",
|
||||
options: list = None,
|
||||
default=NotImplemented,
|
||||
):
|
||||
match = re.compile(match + "$")
|
||||
if default is not NotImplemented:
|
||||
console.print(
|
||||
"[green]"
|
||||
+ message
|
||||
+ '\n[blue bold]The default value is "'
|
||||
+ str(default)
|
||||
+ '"\nDo you want to use it?(y/n)'
|
||||
)
|
||||
if input().casefold().startswith("y"):
|
||||
return default
|
||||
if options is None:
|
||||
match = re.compile(match)
|
||||
console.print("[green bold]" + extra_info, no_wrap=True)
|
||||
while True:
|
||||
console.print(message, end="")
|
||||
user_input = input("").strip()
|
||||
if check_type is not False:
|
||||
try:
|
||||
user_input = check_type(user_input)
|
||||
if (nmin is not None and user_input < nmin) or (
|
||||
nmax is not None and user_input > nmax
|
||||
):
|
||||
# FAILSTATE Input out of bounds
|
||||
console.print("[red]" + oob_error)
|
||||
continue
|
||||
break # Successful type conversion and number in bounds
|
||||
except ValueError:
|
||||
# Type conversion failed
|
||||
console.print("[red]" + err_message)
|
||||
continue
|
||||
elif match != "" and re.match(match, user_input) is None:
|
||||
console.print(
|
||||
"[red]" + err_message +
|
||||
"\nAre you absolutely sure it's correct?(y/n)"
|
||||
)
|
||||
if input().casefold().startswith("y"):
|
||||
break
|
||||
continue
|
||||
else:
|
||||
# FAILSTATE Input STRING out of bounds
|
||||
if (nmin is not None and len(user_input) < nmin) or (
|
||||
nmax is not None and len(user_input) > nmax
|
||||
):
|
||||
console.print("[red bold]" + oob_error)
|
||||
continue
|
||||
break # SUCCESS Input STRING in bounds
|
||||
return user_input
|
||||
console.print(extra_info, no_wrap=True)
|
||||
while True:
|
||||
console.print(message, end="")
|
||||
user_input = input("").strip()
|
||||
if re.match(match, user_input) is not None:
|
||||
if check_type is not False:
|
||||
try:
|
||||
user_input = check_type(user_input) # this line is fine
|
||||
if nmin is not None and user_input < nmin:
|
||||
console.print("[red]" + oob_error) # Input too low failstate
|
||||
continue
|
||||
if nmax is not None and user_input > nmax:
|
||||
console.print("[red]" + oob_error) # Input too high
|
||||
continue
|
||||
break # Successful type conversion and number in bounds
|
||||
except ValueError:
|
||||
console.print("[red]" + err_message) # Type conversion failed
|
||||
continue
|
||||
if nmin is not None and len(user_input) < nmin: # Check if string is long enough
|
||||
console.print("[red]" + oob_error)
|
||||
continue
|
||||
if nmax is not None and len(user_input) > nmax: # Check if string is not too long
|
||||
console.print("[red]" + oob_error)
|
||||
continue
|
||||
break
|
||||
console.print("[red]" + err_message)
|
||||
|
||||
return user_input
|
||||
if user_input not in options:
|
||||
console.print(
|
||||
"[red bold]"
|
||||
+ err_message
|
||||
+ "\nValid options are: "
|
||||
+ ", ".join(map(str, options))
|
||||
+ "."
|
||||
)
|
||||
continue
|
||||
return user_input
|
||||
Reference in new issue
Block a user