| """Settings module.""" |
|
|
| import sys |
| from pathlib import Path |
| from typing import Optional |
|
|
| from openbb import obb |
| from openbb_charting.core.backend import create_backend, get_backend |
| from openbb_core.app.model.abstract.singleton import SingletonMeta |
| from openbb_core.app.model.charts.charting_settings import ChartingSettings |
| from openbb_core.app.model.user_settings import UserSettings as User |
| from prompt_toolkit import PromptSession |
|
|
| from openbb_cli.argparse_translator.obbject_registry import Registry |
| from openbb_cli.config.completer import CustomFileHistory |
| from openbb_cli.config.console import Console |
| from openbb_cli.config.constants import HIST_FILE_PROMPT |
| from openbb_cli.config.style import Style |
| from openbb_cli.models.settings import Settings |
|
|
|
|
| def _get_backend(): |
| """Get the Platform charting backend.""" |
| try: |
| return get_backend() |
| except ValueError: |
| |
| charting_settings = ChartingSettings( |
| system_settings=obb.system, user_settings=obb.user |
| ) |
| create_backend(charting_settings) |
| get_backend().start(debug=charting_settings.debug_mode) |
| return get_backend() |
|
|
|
|
| class Session(metaclass=SingletonMeta): |
| """Session class.""" |
|
|
| def __init__(self): |
| """Initialize session.""" |
|
|
| self._obb = obb |
| self._settings = Settings() |
| self._style = Style( |
| style=self._settings.RICH_STYLE, |
| directory=Path(self._obb.user.preferences.user_styles_directory), |
| ) |
| self._console = Console( |
| settings=self._settings, style=self._style.console_style |
| ) |
| self._prompt_session = self._get_prompt_session() |
| self._obbject_registry = Registry() |
|
|
| self._backend = _get_backend() |
|
|
| @property |
| def user(self) -> User: |
| """Get platform user.""" |
| return self._obb.user |
|
|
| @property |
| def settings(self) -> Settings: |
| """Get CLI settings.""" |
| return self._settings |
|
|
| @property |
| def style(self) -> Style: |
| """Get CLI style.""" |
| return self._style |
|
|
| @property |
| def console(self) -> Console: |
| """Get console.""" |
| return self._console |
|
|
| @property |
| def obbject_registry(self) -> Registry: |
| """Get obbject registry.""" |
| return self._obbject_registry |
|
|
| @property |
| def prompt_session(self) -> Optional[PromptSession]: |
| """Get prompt session.""" |
| return self._prompt_session |
|
|
| def _get_prompt_session(self) -> Optional[PromptSession]: |
| """Initialize prompt session.""" |
| try: |
| if sys.stdin.isatty(): |
| prompt_session: Optional[PromptSession] = PromptSession( |
| history=CustomFileHistory(str(HIST_FILE_PROMPT)) |
| ) |
| else: |
| prompt_session = None |
| except Exception: |
| prompt_session = None |
|
|
| return prompt_session |
|
|
| def is_local(self) -> bool: |
| """Check if user is local.""" |
| return not bool(self.user.profile.hub_session) |
|
|
| def max_obbjects_exceeded(self) -> bool: |
| """Check if max obbjects exceeded.""" |
| return ( |
| len(self.obbject_registry.all) >= self.settings.N_TO_KEEP_OBBJECT_REGISTRY |
| ) |
|
|