Files
OpenBB/openbb_terminal/core/session/system_handler.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

87 lines
2.1 KiB
Python

import atexit
import json
import os
from pathlib import Path
from pydantic.json import pydantic_encoder
from openbb_terminal.core.config.paths import (
SETTINGS_DIRECTORY,
)
from openbb_terminal.core.models import SystemModel
from openbb_terminal.core.session.env_handler import read_env
from openbb_terminal.core.session.utils import load_dict_to_model
SYSTEM_FILE_PATH = SETTINGS_DIRECTORY / "system.json"
def handle_system(file_path: Path = SYSTEM_FILE_PATH) -> SystemModel:
"""
Handle the system.
Reads system data from file if it exists, else reads environment variable data.
Returns a system model built from the loaded data.
Parameters
----------
file_path (Path): The file path.
Returns
-------
SystemModel: The system model.
"""
try:
if os.path.isfile(file_path):
system_data = {}
with open(file_path) as f:
system_data = json.load(f)
if system_data:
return load_dict_to_model(system_data, SystemModel)
except Exception:
pass
__env_dict = read_env()
system = load_dict_to_model(__env_dict, SystemModel)
save_system(system=system, file_path=file_path)
subscribe_delete_system_on_exit(file_path=file_path)
return system
def save_system(system: SystemModel, file_path: Path = SYSTEM_FILE_PATH):
"""
Write system to file.
Parameters
----------
system (SystemModel): The system model.
file_path (Path): The file path.
Returns
-------
system (SystemModel): The system model.
"""
try:
with open(file_path, "w") as f:
json_content = json.dumps(system, default=pydantic_encoder)
f.write(json_content)
except Exception:
pass
def subscribe_delete_system_on_exit(file_path: Path):
"""
Deletes the system file on exiting the application.
Parameters
----------
file_path (Path): The file path.
"""
def delete_file(file_path: Path):
if os.path.isfile(file_path):
os.remove(file_path)
atexit.register(delete_file, file_path=file_path)