Files
OpenBB/openbb_terminal/base_helpers.py
teh_coderer 9026a41ff2 Feature / Logging (#4923)
* init

* updates

* Update loggers.py

* Update loggers.py

* sdk handling

* feature flag

* fix MOCKING_USER_PATH for windows

* Update loggers.py

* Update plotly.html

* updates

* Update parent_classes.py

* Update plotly.html

* add posthog to deps

* Update loggers.py
2023-04-28 12:43:57 +00:00

103 lines
2.8 KiB
Python

# This is for helpers that do NOT import any OpenBB Modules
import logging
import os
from typing import Any, List, Literal, Optional
from dotenv import load_dotenv
from posthog import Posthog
from rich.console import Console
from openbb_terminal.core.config.paths import (
PACKAGE_ENV_FILE,
REPOSITORY_ENV_FILE,
SETTINGS_ENV_FILE,
)
console = Console()
menus = Literal["", "featflags", "settings"]
openbb_posthog = Posthog(
"phc_vhssDAMod5qIplznQ75Kdgz4aB1qPFmeVmfEOZ4hkRw",
host="https://app.posthog.com",
)
def handle_error(name: str, default: Any, menu: menus = ""):
"""Handles the error by returning the default value and printing an
informative error message.
Parameters
----------
name: str
The name of the environment variable
default: Any
The value to return if the converter fails
menu: menus
If provided, will tell the user where to fix the setting
Returns
----------
Any
The default value
"""
base = f"[red]Invalid variable provided for variable '{name}'."
if menu:
base += f" Please change the setting in the `{menu}` menu."
base += "[/red]\n"
console.print(base)
return default
def strtobool(val):
"""Convert a string representation of truth to true (1) or false (0).
True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if
'val' is anything else.
"""
val = str(val).lower()
if val in ("y", "yes", "t", "true", "on", "1"):
output = True
elif val in ("n", "no", "f", "false", "off", "0"):
output = False
else:
raise ValueError(f"invalid truth value {val}")
return output
def load_env_files():
"""
Loads the dotenv files in the following order:
1. Repository .env file
2. Package .env file
3. User .env file
This allows the user to override the package settings with their own
settings, and the package to override the repository settings.
openbb_terminal modules are reloaded to refresh config files with new env,
otherwise they will use cache with old variables.
"""
load_dotenv(REPOSITORY_ENV_FILE, override=True)
load_dotenv(PACKAGE_ENV_FILE, override=True)
load_dotenv(SETTINGS_ENV_FILE, override=True)
def remove_log_handlers():
"""Remove the log handlers - needs to be done before reloading modules."""
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
def clear_openbb_env_vars(exceptions: Optional[List[str]] = None):
"""Clear openbb environment variables."""
for v in os.environ:
if v.startswith("OPENBB"):
if not exceptions:
os.environ.pop(v)
elif v not in exceptions:
os.environ.pop(v)