Files
OpenBB/openbb_terminal/session/session_controller.py
montezdesousa 825b8955df Set guest by default and put authentication behind environment variable (#4197)
* small bug

* small bug on routines list

* guest as default

* limit logout to users2

* simpler this way

* add logout

* move logout to account & add env var

* put authentication under env var

* fix tests

* remove login

* remove openbb vars on login

* ruff

* revert .toml

* Delete Icon

* Update .env

* fix sdk guest not loading keys

* ruff

* remove press enter & --login

* ruff

* move env load

* load env

* move dot env loading to terminal.py

* fix user sdk login mixing .env with user

* now it works

* fix reset

* fix tests

* ruff

* Login on the SDK using the OpenBB Personal Access Token (#4206)

* openbb key on keys menu

* adding sdk endpoints

* adding login via token to the sdk

* base url

* rename to personal access token

* added docstrings and examples

* openbb is special

* removing extra break line

* making keys working with the personal access token

* resolve conflicting tests

* Revert "resolve conflicting tests"

This reverts commit 2fca2c0ec3.

* using custom requests

* tests

* tests

* tests

* using process_session_response instead

* rewriting some tests

* Fix sdk guest not loading keys (#4207)

* fix sdk guest not loading keys

* ruff

* remove comment

* tests

---------

Co-authored-by: montezdesousa <79287829+montezdesousa@users.noreply.github.com>
Co-authored-by: Diogo Sousa <montezdesousa@gmail.com>
Co-authored-by: James Maslek <jmaslek11@gmail.com>

* test record mode vcr none

* remove yes from tests yml

* specify modules to reload

* try disable check api

* UPdate spec file

* Small stocks bug

* avoid reloading in test mode

* will this work?

* skip session tests

* try with env var as well

* mock sdk reload

* pylint

* bump poetry on python 3.8

* adapt to python 3.8

* adapt to python 3.8 remaining tests

* Tests : update cassettes

* Fix linting

* Makes login conditions simpler

* Tests : txt

---------

Co-authored-by: James Maslek <jmaslek11@gmail.com>
Co-authored-by: Chavithra <chavithra@gmail.com>
Co-authored-by: Henrique Joaquim <h.joaquim@campus.fct.unl.pt>
2023-02-14 09:56:03 +00:00

113 lines
2.8 KiB
Python

from typing import Tuple
from prompt_toolkit import PromptSession
import openbb_terminal.session.local_model as Local
from openbb_terminal import terminal_controller
from openbb_terminal.core.config.paths import PACKAGE_DIRECTORY
from openbb_terminal.rich_config import console
from openbb_terminal.session.hub_model import REGISTER_URL
from openbb_terminal.session.session_model import (
LoginStatus,
create_session,
login,
)
def display_welcome_message():
"""Display welcome message"""
with open(PACKAGE_DIRECTORY / "session" / "banner.txt") as f:
console.print(f"[menu]{f.read()}[/menu]\n")
console.print(f"Register : [cmds]{REGISTER_URL}[/cmds]")
console.print("Ask support : [cmds]https://openbb.co/support[/cmds]")
console.print(
"[yellow]\nWARNING: This is a pre-release version published for testing.[/yellow]"
"[yellow]\nBeware that your account will be deleted without notice.[/yellow]"
)
def get_user_input() -> Tuple[str, str, bool]:
"""Get user input
Returns
-------
Tuple[str, str, bool]
The user email, password and save login option.
"""
console.print("[info]\nPlease enter your credentials:[/info]")
s: PromptSession = PromptSession()
email = s.prompt(
message="> Email: ",
)
if not email:
return "", "", False
password = s.prompt(
message="> Password: ",
is_password=True,
)
save_str = s.prompt(message="> Remember me? (y/n): ", is_password=False).lower()
save = False
if save_str == "y":
save = True
return email, password, save
def prompt(welcome=True):
"""Prompt and launch terminal if login is successful.
Parameters
----------
welcome : bool, optional
Display welcome message, by default True
"""
if welcome:
display_welcome_message()
while True:
email, password, save = get_user_input()
if not email or not password:
continue
session = create_session(email, password, save)
if isinstance(session, dict) and session:
return login_and_launch(session=session)
def launch_terminal():
"""Launch terminal"""
terminal_controller.parse_args_and_run()
def login_and_launch(session: dict):
"""Login and launch terminal.
Parameters
----------
session : dict
The session info.
"""
status = login(session)
if status == LoginStatus.SUCCESS:
launch_terminal()
elif status == LoginStatus.FAILED:
prompt(welcome=False)
else:
prompt(welcome=True)
def main():
"""Main function"""
local_session = Local.get_session()
if not local_session:
prompt()
else:
login_and_launch(session=local_session)
if __name__ == "__main__":
main()