mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-29 13:32:08 +00:00
* 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 commit2575784a33. * Revert "Revert "sdk generation tests, trailmap fixes"" This reverts commit5cb0ce030b. * 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>
137 lines
3.4 KiB
Python
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)
|