diff --git a/openbb_terminal/menu.py b/openbb_terminal/menu.py index 9b4909ac894..413540c177e 100644 --- a/openbb_terminal/menu.py +++ b/openbb_terminal/menu.py @@ -1,13 +1,14 @@ import sys from typing import Optional import logging -import os from matplotlib import pyplot from prompt_toolkit import PromptSession from prompt_toolkit.eventloop.inputhook import set_eventloop_with_inputhook from prompt_toolkit.history import FileHistory +from openbb_terminal.core.config.paths import HIST_FILE_PATH + logger = logging.getLogger(__name__) @@ -47,12 +48,10 @@ def inputhook(inputhook_context): return False -history_file = os.path.join(os.path.expanduser("~"), ".openbb_terminal.his") - try: if not is_jupyter() and not is_papermill(): session: Optional[PromptSession] = PromptSession( - history=FileHistory(history_file) + history=FileHistory(HIST_FILE_PATH) ) set_eventloop_with_inputhook(inputhook) else: diff --git a/openbb_terminal/rich_config.py b/openbb_terminal/rich_config.py index 2e75fac3b4e..3a01ea849e7 100644 --- a/openbb_terminal/rich_config.py +++ b/openbb_terminal/rich_config.py @@ -1,7 +1,6 @@ """Rich Module""" __docformat__ = "numpy" -import getpass import os import json from pathlib import Path @@ -315,13 +314,9 @@ class ConsoleAndPanel: else: print(*args, **kwargs) - def input(self, *args, **kwargs): - self.print(*args, **kwargs, end="") - return input() - - def getpass(self, *args, **kwargs): - self.print(*args, **kwargs, end="") - return getpass.getpass("") + # def input(self, *args, **kwargs): + # self.print(*args, **kwargs, end="") + # return input() console = ConsoleAndPanel() diff --git a/openbb_terminal/session/session_controller.py b/openbb_terminal/session/session_controller.py index 288c4b78289..c70ef770aa6 100644 --- a/openbb_terminal/session/session_controller.py +++ b/openbb_terminal/session/session_controller.py @@ -1,14 +1,20 @@ from typing import Tuple +from prompt_toolkit import PromptSession +from prompt_toolkit.output.color_depth import ColorDepth from openbb_terminal import terminal_controller import openbb_terminal.session.local_model as Local from openbb_terminal.session.session_model import ( LoginStatus, + color_message, create_session, + get_color, login, ) from openbb_terminal.core.config.paths import PACKAGE_DIRECTORY from openbb_terminal.rich_config import console +# pylint: disable=consider-using-f-string + def display_welcome_message(): """Display welcome message""" @@ -25,9 +31,20 @@ def get_user_input() -> Tuple[str, str, bool]: The user email, password and save login option. """ console.print("\nPlease enter your credentials:", style="info") - email = console.input("> Email: ", style="menu") - password = console.getpass("> Password: ", style="menu") - save_str = console.input("> Remember me? (y/n): ", style="menu").lower() + + s: PromptSession = PromptSession(color_depth=ColorDepth.TRUE_COLOR) + color = get_color() + + email = s.prompt( + message=color_message("> Email: ", color), + ) + password = s.prompt( + message=color_message("> Password: ", color), + is_password=True, + ) + save_str = s.prompt( + message=color_message("> Remember me? (y/n): ", color), is_password=False + ).lower() save = False if save_str == "y": save = True diff --git a/openbb_terminal/session/session_model.py b/openbb_terminal/session/session_model.py index fe82b99fa72..7789b69d996 100644 --- a/openbb_terminal/session/session_model.py +++ b/openbb_terminal/session/session_model.py @@ -5,11 +5,13 @@ import sys import json from enum import Enum import matplotlib.pyplot as plt +from prompt_toolkit import HTML import openbb_terminal.session.local_model as Local import openbb_terminal.session.hub_model as Hub from openbb_terminal.session.user import User from openbb_terminal.helper_funcs import system_clear from openbb_terminal.rich_config import console +from openbb_terminal.rich_config import CUSTOM_THEME class LoginStatus(Enum): @@ -89,3 +91,39 @@ def logout(cls: bool = False): Local.remove_cli_history_file() plt.close("all") console.print("[green]\nLogout successful.[/green]") + + +def get_color() -> str: + """Get prompt session + + Returns + ------- + str + The hex color. + """ + hex_color = "#ffffff" + c = CUSTOM_THEME.styles["menu"].color + if c: + rgb = c.triplet + if rgb: + hex_color = "#%02x%02x%02x" % (rgb.red, rgb.green, rgb.blue) + + return hex_color + + +def color_message(msg: str, color: str) -> HTML: + """Get colorized message + + Parameters + ---------- + msg : str + The message. + color : str + The hex color. + + Returns + ------- + HTML + The HTML message. + """ + return HTML(f'')