AmmarFahmy
adding all files
105b369
from rich.console import Console
from rich.style import Style
from phi.utils.log import logger
console = Console()
######################################################
## Styles
# Standard Colors: https://rich.readthedocs.io/en/stable/appendix/colors.html#appendix-colors
######################################################
heading_style = Style(
color="green",
bold=True,
underline=True,
)
subheading_style = Style(
color="chartreuse3",
bold=True,
)
success_style = Style(color="chartreuse3")
fail_style = Style(color="red")
error_style = Style(color="red")
info_style = Style()
warn_style = Style(color="magenta")
######################################################
## Print functions
######################################################
def print_heading(msg: str) -> None:
console.print(msg, style=heading_style)
def print_subheading(msg: str) -> None:
console.print(msg, style=subheading_style)
def print_horizontal_line() -> None:
console.rule()
def print_info(msg: str) -> None:
console.print(msg, style=info_style)
def log_config_not_available_msg() -> None:
logger.error("phi not initialized, please run `phi init`")
def log_active_workspace_not_available() -> None:
logger.error("No active workspace. You can:")
logger.error("- Run `phi ws create` to create a new workspace")
logger.error("- OR Run `phi ws setup` from an existing directory to setup the workspace")
logger.error("- OR Set an existing workspace as active using `phi set [ws_name]`")
def print_available_workspaces(avl_ws_list) -> None:
avl_ws_names = [w.ws_root_path.stem for w in avl_ws_list] if avl_ws_list else []
print_info("Available Workspaces:\n - {}".format("\n - ".join(avl_ws_names)))
def log_phi_init_failed_msg() -> None:
logger.error("phi initialization failed, please try again")
def confirm_yes_no(question, default: str = "yes") -> bool:
"""Ask a yes/no question via raw_input().
"question" is a string that is presented to the user.
"default" is the presumed answer if the user just hits <Enter>.
It must be "yes" (the default), "no" or None (meaning
an answer is required of the user).
The "answer" return value is True for "yes" or False for "no".
"""
inp_to_result_map = {"yes": True, "y": True, "ye": True, "no": False, "n": False}
if default is None:
prompt = " [y/n]: "
elif default == "yes":
prompt = " [Y/n]: "
elif default == "no":
prompt = " [y/N]: "
else:
raise ValueError(f"Invalid default answer: {default}")
choice = console.input(prompt=(question + prompt)).lower()
if default is not None and choice == "":
return inp_to_result_map[default]
elif choice in inp_to_result_map:
return inp_to_result_map[choice]
else:
logger.error(f"{choice} invalid")
return False