Files
OpenBB/openbb_terminal/core/session/current_user.py
teh_coderer 0e0069eb97 Feature/In-Chart Volume, Streamlit TA Indicators (#4467)
* init

* rename `add_stock_volume`  to `add_inchart_volume` in OpenBBFigure class

* ruff

* poetry lock, req txt files

* fix: ma indicator not in list, connectgaps=true for subtickers

* improved forecasting streamlit

* added past_cov_legend next to explainability plot

* Update base.py

* updates

* Remove deprecated currencies dashboard and it's dependency

* Revert import statement deletion

* Lint docstrings and delete unused assets

* Fix forecast voila dashboard

* Fix futures voila dashboard

* Remove broken crypto prices dashboard

* Remove vsurf dashboard because of over-verbose yfinance error messages

* Fix chains dashboard chart title positioning

* Remove i18n entries for deleted dashboards

* streamlit cmdline fix for macs/conda

* Update reddit_model.py

* mypy, fixed removed `load_dotenv_and_reload_configs` in `website\controller_doc_classes.py`

* readded rust install on CLI for linux in case cache gets cleared

* Update forex_helper.py

* Update test_load[60-YahooFinance].csv

* Update test_call_func[call_sec-marketwatch_view.sec_filings-other_args37-called_with37].yaml

* deps

* sdk generation tests, trailmap fixes

* Revert "sdk generation tests, trailmap fixes"

This reverts commit 2575784a33.

* Revert "Revert "sdk generation tests, trailmap fixes""

This reverts commit 5cb0ce030b.

* improve ta-multi, add title/legends to fred_view

* Update ta_controller.py

* ruff

* Update helper_funcs.py

* Update yfinance_view.py

* Update helper_funcs.py

* change executable parent paths to REPOSITORY_DIRECTORY

* fix distorted candlestick plots when freq is weekly/month, fix demark

* fix yaxis click handler

* Update popups.js

* Update popups.js

* Update popups.js

* Update volatility_plugin.py

---------

Co-authored-by: Theodore Aptekarev <aptekarev@gmail.com>
2023-03-21 21:47:29 +00:00

137 lines
3.4 KiB
Python

# IMPORTS STANDARD
import dataclasses
from copy import deepcopy
from pathlib import Path
from typing import Optional, Union
# IMPORTS INTERNAL
from openbb_terminal.core.models import (
CredentialsModel,
PreferencesModel,
ProfileModel,
UserModel,
)
from openbb_terminal.core.session.env_handler import (
load_env_to_model,
reading_env,
)
__env_dict = reading_env()
__credentials = load_env_to_model(__env_dict, CredentialsModel)
__preferences = load_env_to_model(__env_dict, PreferencesModel)
__profile = ProfileModel()
__local_user = UserModel( # type: ignore
credentials=__credentials, # type: ignore
preferences=__preferences, # type: ignore
profile=__profile,
)
__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_local_user() -> UserModel:
"""Get local user."""
return deepcopy(__local_user)
def get_env_dict() -> dict:
"""Get env dict."""
return deepcopy(__env_dict)
def get_local_preferences() -> PreferencesModel:
"""Get preferences."""
return deepcopy(__preferences) # type: ignore
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 = reading_env()
credentials = load_env_to_model(env_dict, CredentialsModel)
preferences = load_env_to_model(env_dict, PreferencesModel)
profile = ProfileModel()
local_user = UserModel( # type: ignore
credentials=credentials,
preferences=preferences,
profile=profile,
)
set_current_user(local_user)
def copy_user(
credentials: Optional[CredentialsModel] = None,
preferences: Optional[PreferencesModel] = None,
profile: Optional[ProfileModel] = None,
user: Optional[UserModel] = None,
):
current_user = user or get_current_user()
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,
)
return user_copy
def set_preference(
name: str,
value: Union[bool, Path, str],
):
"""Set preference
Parameters
----------
name : str
Preference name
value : Union[bool, Path, str]
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)