From 1171b91ffd92b4896054b3abda27f5e7ddfe8a92 Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Mon, 27 Mar 2023 23:07:30 +0100 Subject: [PATCH] Update settings logger (#4597) * update settings loggers * change to python version * update sdk helper * pylint --- .../core/log/generation/settings_logger.py | 113 +++--------------- openbb_terminal/core/models/base_model.py | 9 ++ openbb_terminal/core/models/system_model.py | 11 +- openbb_terminal/core/sdk/sdk_helpers.py | 6 +- 4 files changed, 39 insertions(+), 100 deletions(-) diff --git a/openbb_terminal/core/log/generation/settings_logger.py b/openbb_terminal/core/log/generation/settings_logger.py index cc3b4caa541..ee5ec8ed135 100644 --- a/openbb_terminal/core/log/generation/settings_logger.py +++ b/openbb_terminal/core/log/generation/settings_logger.py @@ -1,17 +1,11 @@ # IMPORTATION STANDARD import json import logging -import platform -from types import FunctionType, ModuleType -# IMPORTATION THIRDPARTY # IMPORTATION INTERNAL -from openbb_terminal import config_terminal as cfg from openbb_terminal.core.log.generation.common import do_rollover -from openbb_terminal.core.models.credentials_model import CredentialsModel -from openbb_terminal.core.models.user_model import UserModel +from openbb_terminal.core.session.current_system import get_current_system from openbb_terminal.core.session.current_user import get_current_user -from openbb_terminal.terminal_helper import is_installer SENSITIVE_WORDS = [ "API", @@ -30,103 +24,21 @@ logger = logging.getLogger(__name__) def log_all_settings(with_rollover: bool = True) -> None: """Log all settings""" - log_settings() - log_config_terminal() - log_feature_flags() - log_keys() + log_system() + log_credentials() + log_preferences() if with_rollover: do_rollover() -def log_settings() -> None: - """Log settings""" - current_user = get_current_user() - settings_dict = {} - settings_dict["tab"] = ( - "True" if current_user.preferences.USE_TABULATE_DF else "False" - ) - settings_dict["cls"] = ( - "True" if current_user.preferences.USE_CLEAR_AFTER_CMD else "False" - ) - settings_dict["color"] = "True" if current_user.preferences.USE_COLOR else "False" - settings_dict["promptkit"] = ( - "True" if current_user.preferences.USE_PROMPT_TOOLKIT else "False" - ) - settings_dict["thoughts"] = ( - "True" if current_user.preferences.ENABLE_THOUGHTS_DAY else "False" - ) - settings_dict["reporthtml"] = ( - "True" if current_user.preferences.OPEN_REPORT_AS_HTML else "False" - ) - settings_dict["exithelp"] = ( - "True" if current_user.preferences.ENABLE_EXIT_AUTO_HELP else "False" - ) - settings_dict["rcontext"] = ( - "True" if current_user.preferences.REMEMBER_CONTEXTS else "False" - ) - settings_dict["rich"] = "True" if current_user.preferences.ENABLE_RICH else "False" - settings_dict["richpanel"] = ( - "True" if current_user.preferences.ENABLE_RICH_PANEL else "False" - ) - settings_dict["ion"] = "True" if current_user.preferences.USE_ION else "False" - settings_dict["watermark"] = ( - "True" if current_user.preferences.USE_WATERMARK else "False" - ) - settings_dict["autoscaling"] = ( - "True" if current_user.preferences.USE_PLOT_AUTOSCALING else "False" - ) - settings_dict["dt"] = "True" if current_user.preferences.USE_DATETIME else "False" - settings_dict["packaged"] = "True" if is_installer() else "False" - settings_dict["python"] = str(platform.python_version()) - settings_dict["os"] = str(platform.system()) - - logger.info("SETTINGS: %s ", json.dumps(settings_dict)) +def log_system() -> None: + """Log system""" + logger.info("SYSTEM: %s ", json.dumps(get_current_system().to_dict())) -def log_config_terminal() -> None: - """Log config_terminal""" - - config_terminal_dict = {} - - for item in dir(cfg): - prop = getattr(cfg, item) - # pylint: disable=too-many-boolean-expressions - if ( - not item.startswith("__") - and not isinstance(prop, FunctionType) - and not isinstance(prop, ModuleType) - and not isinstance(prop, UserModel) - and not isinstance(prop, CredentialsModel) - and not any(substring in item for substring in SENSITIVE_WORDS) - ): - config_terminal_dict[item] = str(prop) - - logger.info("CONFIG_TERMINAL: %s ", json.dumps(config_terminal_dict)) - - -def log_feature_flags() -> None: - """Log feature flags""" - - current_user = get_current_user() - feature_flags_dict = {} - - for item in dir(current_user.preferences): - prop = getattr(current_user.preferences, item) - if ( - not item.startswith("__") - and not isinstance(prop, FunctionType) - and not isinstance(prop, ModuleType) - and not isinstance(prop, UserModel) - and not isinstance(prop, CredentialsModel) - ): - feature_flags_dict[item] = str(prop) - - logger.info("FEATURE_FLAGS: %s ", json.dumps(feature_flags_dict)) - - -def log_keys() -> None: - """Log keys""" +def log_credentials() -> None: + """Log credentials""" current_user = get_current_user() @@ -143,3 +55,10 @@ def log_keys() -> None: current_keys[cfg_var_name] = "not_defined" logger.info("KEYS: %s ", json.dumps(current_keys)) + + +def log_preferences() -> None: + """Log preferences""" + logger.info( + "PREFERENCES: %s ", json.dumps(get_current_user().preferences.to_dict()) + ) diff --git a/openbb_terminal/core/models/base_model.py b/openbb_terminal/core/models/base_model.py index 6f78cffb7e2..7da8f54949c 100644 --- a/openbb_terminal/core/models/base_model.py +++ b/openbb_terminal/core/models/base_model.py @@ -28,6 +28,15 @@ class BaseModel: return getattr(self, field) return None + def to_dict(self) -> dict[str, Any]: + """Convert model to dict.""" + d = self.__dict__.copy() + keys = list(d.keys()) + for key in keys: + if key.startswith("_"): + del d[key] + return d + def get_default(self, field: str) -> Optional[Any]: """Get default field value.""" if hasattr(self, field): diff --git a/openbb_terminal/core/models/system_model.py b/openbb_terminal/core/models/system_model.py index 7c7df79a8a3..f5ea9de6e19 100644 --- a/openbb_terminal/core/models/system_model.py +++ b/openbb_terminal/core/models/system_model.py @@ -1,16 +1,25 @@ +import platform +import sys from typing import Literal from pydantic.dataclasses import dataclass from openbb_terminal.core.models import BaseModel +# pylint: disable=too-many-instance-attributes + @dataclass(config=dict(validate_assignment=True, frozen=True)) class SystemModel(BaseModel): """Data model for system variables and configurations.""" - # System version + # System section + OS: str = str(platform.system()) + PYTHON_VERSION: str = str(platform.python_version()) + + # OpenBB section VERSION = "3.0.0rc1" + PACKAGED: bool = getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS") # Logging section LOGGING_APP_NAME: str = "gst" diff --git a/openbb_terminal/core/sdk/sdk_helpers.py b/openbb_terminal/core/sdk/sdk_helpers.py index 862efc7c75b..b96932b9724 100644 --- a/openbb_terminal/core/sdk/sdk_helpers.py +++ b/openbb_terminal/core/sdk/sdk_helpers.py @@ -264,11 +264,13 @@ class OperationLogger: if func_module == "openbb_terminal.keys_model": # pylint: disable=C0415 - from openbb_terminal.core.log.generation.settings_logger import log_keys + from openbb_terminal.core.log.generation.settings_logger import ( + log_credentials, + ) # remove key if defined function_args.pop("key", None) - log_keys() + log_credentials() return function_args def log_after_call(