Files
OpenBB/openbb_terminal/core/session/current_user.py
montezdesousa b6b42afd71 Hub | Add colors, sources sync (#4546)
* fix show version

* update login prompt and account

* update set preference

* fix account controller

* block login/logout if not called from account

* change conditions to start terminal

* fix required args account model

* add not to login command

* pylint

* accounte controller messages

* set default user when logout

* logout then show menu

* remove unused functions

* fix logging bug

* ruff

* fix account unittests

* fix session unittests

* refactor colors preference

* no theme, no party

* add colors sync

* dynamic theme

* add comment

* add colors to settings

* ruff

* linting

* update menu desc

* adjust keys sync flag

* write to dotenv sync flag

* english

* fix pull command

* fix edge cases

* handle some errors

* small bug

* change func name

* pylint

* no light

* colors preview

* ruff

* fix login logout preferences

* ruff

* delete folder

* pylint

* default, custom, hub

* fix clear

* docstring

* add preference exceptions

* set only rich style

* request theme only if hub

* linting

* change guest msg

* add option to update chart style on the fly

* apply style

* rollback to old terminal style

* fix console theme

* remove print

* remove hub rich style

* ruff

* mypy

* black

* Hub | Add sources sync (#4565)

* Add sources model

* adapt session model

* fetch sources dict

* rename local funcs

* set sources inside current user

* set sources inside current user

* generate sources dict from hub

* fix dict generator

* send request to hub

* fix conflict

* revert datasources to develop head

* fix docstring

* avoid invalid patch types

* add default option to sources

* fix small bug on sources

* ruff

* black

* remove (

* mypy failing only on git

* ignore mypy

* pylint

* fix settings controller

* Tests: fix keys model writing to .env

* fix keys controller test writing to .env

* ruff

* Test: fix account controller

* Test: fix account controller pull

* Tests: fix launch terminal

* Test: add sources to user object

* Tests: fix clear cmd tests

* ruff

* revert core/sdk changes

* TerminalStyle docstring

* upload config docstring

* remove comment

* remove unecessary pylint disable

* revert openbb_terminal/sdk changes

* Terminal style docstring

* docstring

* remove unecessary changes

* add TODO

* add other todo

* Tests: prevent sync from being written in .env

* change clear msg

* display sources source on menu

* update settings controller

* display keys source

* black

* sync not needed for pull

* remove sync from apply configs

* change func name for consistency

* Update test_keys_model.py

* save rich style in user folder

* search recursively inside styles

* set hub theme by default

* remove debug print

* allow any plot style

* comment plotstyle sync for now

* fix sources set terminal to hub

* ruff

* rewrite cassettes

* remove repeated settings

* rewrite expected
2023-03-27 16:59:36 +00:00

146 lines
3.9 KiB
Python

# IMPORTS STANDARD
import dataclasses
from copy import deepcopy
from typing import Any, Dict, Optional
# IMPORTS INTERNAL
from openbb_terminal.core.models import (
CredentialsModel,
PreferencesModel,
ProfileModel,
SourcesModel,
UserModel,
)
from openbb_terminal.core.session.env_handler import read_env
from openbb_terminal.core.session.sources_handler import read_sources
from openbb_terminal.core.session.utils import load_dict_to_model
__env_dict = read_env()
__credentials = load_dict_to_model(__env_dict, CredentialsModel)
__preferences = load_dict_to_model(__env_dict, PreferencesModel)
__sources = SourcesModel(sources_dict=read_sources()) # type: ignore
__profile = ProfileModel()
__local_user = UserModel( # type: ignore
credentials=__credentials, # type: ignore
preferences=__preferences, # type: ignore
profile=__profile,
sources=__sources,
)
__current_user = __local_user
def get_current_user() -> UserModel:
"""Get current user."""
return deepcopy(__current_user)
def set_current_user(user: UserModel):
"""Set current user."""
global __current_user # pylint: disable=global-statement # noqa
__current_user = user
def get_env_dict() -> dict:
"""Get env dict."""
return deepcopy(__env_dict)
def is_local() -> bool:
"""Check if user is guest.
Returns
-------
bool
True if user is guest, False otherwise.
"""
return not bool(__current_user.profile.token)
def set_default_user():
"""Set default user."""
env_dict = read_env()
credentials = load_dict_to_model(env_dict, CredentialsModel)
preferences = load_dict_to_model(env_dict, PreferencesModel)
sources = SourcesModel(sources_dict=read_sources())
profile = ProfileModel()
local_user = UserModel( # type: ignore
credentials=credentials,
preferences=preferences,
profile=profile,
sources=sources,
)
set_current_user(local_user)
def copy_user(
sources: Optional[SourcesModel] = None,
credentials: Optional[CredentialsModel] = None,
preferences: Optional[PreferencesModel] = None,
profile: Optional[ProfileModel] = None,
user: Optional[UserModel] = None,
):
current_user = user or get_current_user()
sources = sources or current_user.sources
credentials = credentials or current_user.credentials
preferences = preferences or current_user.preferences
profile = profile or current_user.profile
user_copy = UserModel( # type: ignore
credentials=credentials,
preferences=preferences,
profile=profile,
sources=sources,
)
return user_copy
def set_preference(
name: str,
value: Any,
):
"""Set preference
Parameters
----------
name : str
Preference name
value : Any
Preference value
"""
current_user = get_current_user()
updated_preferences = dataclasses.replace(current_user.preferences, **{name: value}) # type: ignore
updated_user = dataclasses.replace(current_user, preferences=updated_preferences) # type: ignore
set_current_user(updated_user)
def set_credential(name: str, value: str):
"""Set credential
Parameters
----------
name : str
Credential name
value : str
Credential value
"""
current_user = get_current_user()
updated_credentials = dataclasses.replace(current_user.credentials, **{name: value}) # type: ignore
updated_user = dataclasses.replace(current_user, credentials=updated_credentials) # type: ignore
set_current_user(updated_user)
def set_sources(sources_dict: Dict):
"""Set sources
Parameters
----------
sources_dict : Dict
Sources dict
"""
current_user = get_current_user()
updated_sources = dataclasses.replace(current_user.sources, sources_dict=sources_dict) # type: ignore
updated_user = dataclasses.replace(current_user, sources=updated_sources) # type: ignore
set_current_user(updated_user)