Skip to content

Commit

Permalink
[BugFix] - Remove multiple .envs (#6363)
Browse files Browse the repository at this point in the history
* Remove .envs

* Clean menu_text.py

* Remove TODO
  • Loading branch information
montezdesousa authored May 3, 2024
1 parent 18115e4 commit cd4e36e
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 164 deletions.
2 changes: 0 additions & 2 deletions cli/openbb_cli/config/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
SETTINGS_DIRECTORY = HOME_DIRECTORY / ".openbb_platform"
ASSETS_DIRECTORY = SRC_DIRECTORY / "assets"
STYLES_DIRECTORY = ASSETS_DIRECTORY / "styles"
ENV_FILE_REPOSITORY = REPOSITORY_DIRECTORY / ".env"
ENV_FILE_PROJECT = REPOSITORY_DIRECTORY / "openbb_cli" / ".env"
ENV_FILE_SETTINGS = SETTINGS_DIRECTORY / ".cli.env"
HIST_FILE_PROMPT = SETTINGS_DIRECTORY / ".cli.his"
I18N_FILE = ASSETS_DIRECTORY / "i18n"
Expand Down
194 changes: 49 additions & 145 deletions cli/openbb_cli/config/menu_text.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,6 @@
"[/help]",
]

USE_COLOR = True


def get_ordered_providers(command_path: str) -> List:
"""Return the preferred provider for the given command.
Parameters
----------
command_path: str
The command to find the provider for. E.g. "/equity/price/historical
Returns
-------
List
The list of providers for the given command.
"""
command_reference = obb.reference.get("paths", {}).get(command_path, {}) # type: ignore
if command_reference:
providers = list(command_reference["parameters"].keys())
return [provider for provider in providers if provider != "standard"]
return []


class MenuText:
"""Create menu text with rich colors to be displayed by CLI."""
Expand All @@ -58,82 +36,33 @@ class MenuText:
SECTION_SPACING = 4

def __init__(self, path: str = ""):
"""Initialize menu help.
Parameters
----------
path : str
path to the menu that is being created
column_sources : int
column width from which to start displaying sources
"""
"""Initialize menu help."""
self.menu_text = ""
self.menu_path = path
self.warnings: List[Dict[str, str]] = []

def add_raw(self, raw_text: str):
"""Append raw text (no translation) to a menu.
Parameters
----------
raw_text : str
raw text to be appended to the menu
"""
self.menu_text += raw_text

def add_custom(self, key: str):
"""Append custom text (after translation from key) to a menu.
Parameters
----------
key : str
key to get translated text and add to the menu
"""
self.menu_text += f"{i18n.t(self.menu_path + key)}"

def add_info(self, key_info: str):
"""Append info text (after translation from key) to a menu.
Parameters
----------
key_info : str
key to get translated text and add to the menu as info
"""
self.menu_text += f"[info]{i18n.t(self.menu_path + key_info)}:[/info]\n"

def add_param(self, key_param: str, value: str, col_align: int = 0):
"""Append info text (after translation from key) to a menu.
Parameters
----------
key_param : str
key to get translated text and add to the menu as parameter
value : str
value to display in front of the parameter
col_align : int
column alignment for the value. This allows for a better UX experience.
"""
parameter_translated = i18n.t(self.menu_path + key_param)
space = (
(col_align - len(parameter_translated)) * " "
if col_align > len(parameter_translated)
else ""
)
self.menu_text += f"[param]{parameter_translated}{space}:[/param] {value}\n"

def _format_cmd_name(self, name: str) -> str:
"""Adjust the length of the command if it is too long.
@staticmethod
def _get_providers(command_path: str) -> List:
"""Return the preferred provider for the given command.
Parameters
----------
name : str
command to be formatted
command_path: str
The command to find the provider for. E.g. "/equity/price/historical
Returns
-------
str
formatted command
List
The list of providers for the given command.
"""
command_reference = obb.reference.get("paths", {}).get(command_path, {}) # type: ignore
if command_reference:
providers = list(command_reference["parameters"].keys())
return [provider for provider in providers if provider != "standard"]
return []

def _format_cmd_name(self, name: str) -> str:
"""Truncate command name length if it is too long."""
if len(name) > self.CMD_NAME_LENGTH:
new_name = name[
: self.CMD_NAME_LENGTH
Expand Down Expand Up @@ -164,22 +93,7 @@ def _format_cmd_name(self, name: str) -> str:
def _format_cmd_description(
self, name: str, description: str, trim: bool = True
) -> str:
"""Handle the command description.
Parameters
----------
name : str
command to be adjusted
description : str
description of the command
trim : bool
If true, the description will be trimmed to the maximum length
Returns
-------
str
adjusted command description
"""
"""Truncate command description length if it is too long."""
if not description:
description = i18n.t(self.menu_path + name)
if description == self.menu_path + name:
Expand All @@ -190,21 +104,33 @@ def _format_cmd_description(
else description
)

def add_cmd(self, name: str, description: str = "", disable: bool = False):
"""Append command text (after translation from key) to a menu.
def add_raw(self, text: str):
"""Append raw text (without translation)."""
self.menu_text += text

Parameters
----------
name : str
key command to be executed by user. It is also used as a key to get description of command.
description : str
description of the command
disable : bool
If disable is true, the command line is greyed out.
"""
def add_custom(self, name: str):
"""Append custom text (after translation)."""
self.menu_text += f"{i18n.t(self.menu_path + name)}"

def add_info(self, text: str):
"""Append information text (after translation)."""
self.menu_text += f"[info]{i18n.t(self.menu_path + text)}:[/info]\n"

def add_param(self, name: str, value: str, col_align: int = 0):
"""Append parameter (after translation)."""
parameter_translated = i18n.t(self.menu_path + name)
space = (
(col_align - len(parameter_translated)) * " "
if col_align > len(parameter_translated)
else ""
)
self.menu_text += f"[param]{parameter_translated}{space}:[/param] {value}\n"

def add_cmd(self, name: str, description: str = "", disable: bool = False):
"""Append command text (after translation)."""
formatted_name = self._format_cmd_name(name)
name_padding = (self.CMD_NAME_LENGTH - len(formatted_name)) * " "
providers = get_ordered_providers(f"{self.menu_path}{name}")
providers = self._get_providers(f"{self.menu_path}{name}")
formatted_description = self._format_cmd_description(
formatted_name,
description,
Expand All @@ -231,43 +157,21 @@ def add_menu(
description: str = "",
disable: bool = False,
):
"""Append menu text (after translation from key) to a menu.
Parameters
----------
name : str
key menu to be executed by user. It is also used as a key to get description of menu.
disable : bool
If disable is true, the menu line is greyed out.
"""
"""Append menu text (after translation)."""
spacing = (self.CMD_NAME_LENGTH - len(name) + self.SECTION_SPACING) * " "

if description:
menu = f"{name}{spacing}{description}"
else:
if not description:
description = i18n.t(self.menu_path + name)
if description == self.menu_path + name:
description = ""
menu = f"{name}{spacing}{description}"

if disable:
self.menu_text += f"[unvl]> {menu}[/unvl]\n"
else:
self.menu_text += f"[menu]> {menu}[/menu]\n"
menu = f"{name}{spacing}{description}"
tag = "unvl" if disable else "menu"
self.menu_text += f"[{tag}]> {menu}[/{tag}]\n"

def add_setting(self, name: str, status: bool = True):
"""Append menu text (after translation from key) to a menu.
Parameters
----------
name : str
key setting to be set by user. It is also used as a key to get description of the setting.
status : bool
status of the current setting. If true the line will be green, otherwise red.
"""
"""Append menu text (after translation)."""
spacing = (self.CMD_NAME_LENGTH - len(name) + self.SECTION_SPACING) * " "
indentation = self.SECTION_SPACING * " "
if status:
self.menu_text += f"[green]{indentation}{name}{spacing}{i18n.t(self.menu_path + name)}[/green]\n"
else:
self.menu_text += f"[red]{indentation}{name}{spacing}{i18n.t(self.menu_path + name)}[/red]\n"
color = "green" if status else "red"
self.menu_text += f"[{color}]{indentation}{name}{spacing}{i18n.t(self.menu_path + name)}[/{color}]\n"
18 changes: 2 additions & 16 deletions cli/openbb_cli/models/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@
from typing import Any

from dotenv import dotenv_values, set_key
from openbb_cli.config.constants import (
ENV_FILE_PROJECT,
ENV_FILE_REPOSITORY,
ENV_FILE_SETTINGS,
)
from openbb_cli.config.constants import ENV_FILE_SETTINGS
from pydantic import BaseModel, ConfigDict, model_validator


Expand Down Expand Up @@ -62,24 +58,14 @@ def __repr__(self) -> str:
@model_validator(mode="before")
@classmethod
def from_env(cls, values: dict) -> dict:
"""Load .env files.
Loads the dotenv files in the following order:
1. Repository .env file
2. Package .env file
3. User .env file
"""
"""Load settings from .env."""
settings = {}
settings.update(dotenv_values(ENV_FILE_REPOSITORY))
settings.update(dotenv_values(ENV_FILE_PROJECT))
settings.update(dotenv_values(ENV_FILE_SETTINGS))
settings.update(values)
filtered = {k.replace("OPENBB_", ""): v for k, v in settings.items()}
return filtered

def set_item(self, key: str, value: Any) -> None:
"""Set an item in the model and save to .env."""
# TODO: Check if this is ok, we are just saving into the settings .env
# Same behavior as before...
setattr(self, key, value)
set_key(str(ENV_FILE_SETTINGS), "OPENBB_" + key, str(value))
1 change: 0 additions & 1 deletion cli/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ description = "Investment Research for Everyone, Anywhere."
license = "MIT"
authors = ["OpenBB <[email protected]>"]
packages = [{ include = "openbb_cli" }]
include = ["cli/.env"]
readme = "README.md"
homepage = "https://openbb.co"
repository = "https://github.com/OpenBB-finance/OpenBBTerminal"
Expand Down

0 comments on commit cd4e36e

Please sign in to comment.