mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-06 09:22:26 +00:00
Add support for default feature flags in packages apps
This commit is contained in:
29
build/pyinstaller/GTFF_DEFAULTS.json
vendored
Normal file
29
build/pyinstaller/GTFF_DEFAULTS.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"GTFF_PACKAGED_APPLICATION": "True",
|
||||
"GTFF_ENABLE_PREDICT": "False",
|
||||
"GTFF_ENABLE_CHECK_API": "True",
|
||||
"GTFF_ENABLE_THOUGHTS_DAY": "False",
|
||||
"GTFF_REMEMBER_CONTEXTS": "True",
|
||||
"GTFF_USE_FLAIR": ":bb",
|
||||
"GTFF_USE_WATERMARK": "True",
|
||||
"GTFF_USE_CMD_LOCATION_FIGURE": "True",
|
||||
"GTFF_USE_PROMPT_TOOLKIT": "True",
|
||||
"GTFF_USE_COLOR": "True",
|
||||
"GTFF_USE_ION": "True",
|
||||
"GTFF_USE_PLOT_AUTOSCALING": "False",
|
||||
"GTFF_ENABLE_RICH": "True",
|
||||
"GTFF_ENABLE_RICH_PANEL": "True",
|
||||
"GT_MPLSTYLE": "dark",
|
||||
"GT_MPFSTYLE": "dark",
|
||||
"GT_RICHSTYLE": "dark",
|
||||
"GT_LOGGING_VERBOSITY": "0",
|
||||
"GT_DEBUG_MODE": "False",
|
||||
"GTFF_LOG_COLLECTION": "False",
|
||||
"GTFF_ONLY_SEND_FILE_SIZE": "False",
|
||||
"GTFF_USE_TABULATE_DF": "True",
|
||||
"GTFF_USE_CLEAR_AFTER_CMD": "False",
|
||||
"GTFF_USE_DATETIME": "True",
|
||||
"GTFF_OPEN_REPORT_AS_HTML": "True",
|
||||
"GTFF_ENABLE_QUICK_EXIT": "False",
|
||||
"GTFF_ENABLE_EXIT_AUTO_HELP": "False"
|
||||
}
|
||||
@@ -1,71 +1,128 @@
|
||||
import os
|
||||
import json
|
||||
from distutils.util import strtobool
|
||||
from typing import Union
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
gtff_defaults_path = os.path.join(os.path.dirname(__file__), "GTFF_DEFAULTS.json")
|
||||
if os.path.exists(gtff_defaults_path):
|
||||
with open(gtff_defaults_path) as f:
|
||||
GTFF_DEFAULTS = json.load(f)
|
||||
else:
|
||||
GTFF_DEFAULTS = dict()
|
||||
|
||||
env_files = [f for f in os.listdir() if f.endswith(".env")]
|
||||
if env_files:
|
||||
load_dotenv(env_files[0])
|
||||
|
||||
|
||||
def assign_feature_flag(
|
||||
feature_flag: str, fallback_value: str, return_bool: bool = False
|
||||
) -> Union[str, bool, None]:
|
||||
"""Get the feature flag value in order of priority.
|
||||
|
||||
- Env variables have the highest priority
|
||||
- The GTFF_DEFAULTS dictionary has the defaults for the bundled app
|
||||
- Fallback value is used if none of the above mentioned places have feature flag settings
|
||||
|
||||
Parameters
|
||||
----------
|
||||
feature_flag : str
|
||||
Feature flag as upper-case string
|
||||
fallback_value : str
|
||||
Fallback vabue
|
||||
return_bool : bool, optional
|
||||
If a boolean should be returned vs a string, by default False
|
||||
|
||||
Returns
|
||||
-------
|
||||
Union[str, bool, None]
|
||||
The feature flag value
|
||||
"""
|
||||
if bool(os.getenv(feature_flag)):
|
||||
feature_flag_value = (
|
||||
strtobool(os.getenv(feature_flag)) # type: ignore
|
||||
if return_bool
|
||||
else os.getenv(feature_flag)
|
||||
)
|
||||
elif feature_flag in GTFF_DEFAULTS:
|
||||
feature_flag_value = (
|
||||
strtobool(GTFF_DEFAULTS[feature_flag])
|
||||
if return_bool
|
||||
else GTFF_DEFAULTS[feature_flag]
|
||||
)
|
||||
else:
|
||||
feature_flag_value = (
|
||||
strtobool(fallback_value) if return_bool else fallback_value
|
||||
)
|
||||
return feature_flag_value
|
||||
|
||||
|
||||
# Use tabulate to print dataframes
|
||||
USE_TABULATE_DF = strtobool(os.getenv("GTFF_USE_TABULATE_DF", "True"))
|
||||
USE_TABULATE_DF = assign_feature_flag("GTFF_USE_TABULATE_DF", "True", True)
|
||||
|
||||
# Use clear console after each command
|
||||
USE_CLEAR_AFTER_CMD = strtobool(os.getenv("GTFF_USE_CLEAR_AFTER_CMD", "False"))
|
||||
USE_CLEAR_AFTER_CMD = assign_feature_flag("GTFF_USE_CLEAR_AFTER_CMD", "False", True)
|
||||
|
||||
# Use coloring features
|
||||
USE_COLOR = strtobool(os.getenv("GTFF_USE_COLOR", "True"))
|
||||
USE_COLOR = assign_feature_flag("GTFF_USE_COLOR", "True", True)
|
||||
|
||||
# Select console flair (choose from config_terminal.py list)
|
||||
USE_FLAIR = os.getenv("GTFF_USE_FLAIR") or ":stars"
|
||||
USE_FLAIR = assign_feature_flag("GTFF_USE_FLAIR", ":stars")
|
||||
|
||||
# Add date and time to command line
|
||||
USE_DATETIME = strtobool(os.getenv("GTFF_USE_DATETIME", "True"))
|
||||
USE_DATETIME = assign_feature_flag("GTFF_USE_DATETIME", "True", True)
|
||||
|
||||
# Enable interactive matplotlib mode
|
||||
USE_ION = strtobool(os.getenv("GTFF_USE_ION", "True"))
|
||||
USE_ION = assign_feature_flag("GTFF_USE_ION", "True", True)
|
||||
|
||||
# Enable watermark in the figures
|
||||
USE_WATERMARK = strtobool(os.getenv("GTFF_USE_WATERMARK", "True"))
|
||||
USE_WATERMARK = assign_feature_flag("GTFF_USE_WATERMARK", "True", True)
|
||||
|
||||
# Enable command and source in the figures
|
||||
USE_CMD_LOCATION_FIGURE = strtobool(os.getenv("GTFF_USE_CMD_LOCATION_FIGURE", "True"))
|
||||
USE_CMD_LOCATION_FIGURE = assign_feature_flag(
|
||||
"GTFF_USE_CMD_LOCATION_FIGURE", "True", True
|
||||
)
|
||||
|
||||
# Enable Prompt Toolkit
|
||||
USE_PROMPT_TOOLKIT = strtobool(os.getenv("GTFF_USE_PROMPT_TOOLKIT", "True"))
|
||||
USE_PROMPT_TOOLKIT = assign_feature_flag("GTFF_USE_PROMPT_TOOLKIT", "True", True)
|
||||
|
||||
# Enable Prediction features
|
||||
ENABLE_PREDICT = strtobool(os.getenv("GTFF_ENABLE_PREDICT", "True"))
|
||||
ENABLE_PREDICT = assign_feature_flag("GTFF_ENABLE_PREDICT", "True", True)
|
||||
|
||||
# Enable plot autoscaling
|
||||
USE_PLOT_AUTOSCALING = strtobool(os.getenv("GTFF_USE_PLOT_AUTOSCALING", "False"))
|
||||
USE_PLOT_AUTOSCALING = assign_feature_flag("GTFF_USE_PLOT_AUTOSCALING", "False", True)
|
||||
|
||||
# Enable thoughts of the day
|
||||
ENABLE_THOUGHTS_DAY = strtobool(os.getenv("GTFF_ENABLE_THOUGHTS_DAY", "False"))
|
||||
ENABLE_THOUGHTS_DAY = assign_feature_flag("GTFF_ENABLE_THOUGHTS_DAY", "False", True)
|
||||
|
||||
# Quick exit for testing
|
||||
ENABLE_QUICK_EXIT = strtobool(os.getenv("GTFF_ENABLE_QUICK_EXIT", "False"))
|
||||
ENABLE_QUICK_EXIT = assign_feature_flag("GTFF_ENABLE_QUICK_EXIT", "False", True)
|
||||
|
||||
# Open report as HTML, otherwise notebook
|
||||
OPEN_REPORT_AS_HTML = strtobool(os.getenv("GTFF_OPEN_REPORT_AS_HTML", "True"))
|
||||
OPEN_REPORT_AS_HTML = assign_feature_flag("GTFF_OPEN_REPORT_AS_HTML", "True", True)
|
||||
|
||||
# Enable auto print_help when exiting menus
|
||||
ENABLE_EXIT_AUTO_HELP = strtobool(os.getenv("GTFF_ENABLE_EXIT_AUTO_HELP", "False"))
|
||||
ENABLE_EXIT_AUTO_HELP = assign_feature_flag("GTFF_ENABLE_EXIT_AUTO_HELP", "False", True)
|
||||
|
||||
# Remember contexts during session
|
||||
REMEMBER_CONTEXTS = strtobool(os.getenv("GTFF_REMEMBER_CONTEXTS", "True"))
|
||||
REMEMBER_CONTEXTS = assign_feature_flag("GTFF_REMEMBER_CONTEXTS", "True", True)
|
||||
|
||||
# Use the colorful rich terminal
|
||||
ENABLE_RICH = strtobool(os.getenv("GTFF_ENABLE_RICH", "True"))
|
||||
ENABLE_RICH = assign_feature_flag("GTFF_ENABLE_RICH", "True", True)
|
||||
|
||||
# Use the colorful rich terminal
|
||||
ENABLE_RICH_PANEL = strtobool(os.getenv("GTFF_ENABLE_RICH_PANEL", "True"))
|
||||
ENABLE_RICH_PANEL = assign_feature_flag("GTFF_ENABLE_RICH_PANEL", "True", True)
|
||||
|
||||
# Check API KEYS before running a command
|
||||
ENABLE_CHECK_API = strtobool(os.getenv("GTFF_ENABLE_CHECK_API", "True"))
|
||||
ENABLE_CHECK_API = assign_feature_flag("GTFF_ENABLE_CHECK_API", "True", True)
|
||||
|
||||
# Send logs to data lake
|
||||
LOG_COLLECTION = strtobool(os.getenv("GTFF_LOG_COLLECTION", "False"))
|
||||
LOG_COLLECTION = assign_feature_flag("GTFF_LOG_COLLECTION", "False", True)
|
||||
|
||||
# Provide export folder path. If empty that means default.
|
||||
EXPORT_FOLDER_PATH = os.getenv("GTFF_EXPORT_FOLDER_PATH", "")
|
||||
EXPORT_FOLDER_PATH = assign_feature_flag("GTFF_EXPORT_FOLDER_PATH", "")
|
||||
|
||||
# Set a flag if the application is running from a packaged bundle
|
||||
PACKAGED_APPLICATION = assign_feature_flag("GTFF_PACKAGED_APPLICATION", "False", True)
|
||||
|
||||
Reference in New Issue
Block a user