#!/usr/bin/env python
"""Main Terminal Module"""
__docformat__ = "numpy"
import argparse
import difflib
import logging
import os
import platform
import sys
import webbrowser
from typing import List
import dotenv
from prompt_toolkit import PromptSession
from prompt_toolkit.completion import NestedCompleter
from prompt_toolkit.styles import Style
from prompt_toolkit.formatted_text import HTML
from openbb_terminal.common import feedparser_view
from openbb_terminal.core.config.make_paths import create_paths
from openbb_terminal.core.config.paths import (
REPO_DIRECTORY,
USER_ENV_FILE,
ENV_FILE_REPOSITORY,
HOME_DIRECTORY,
)
from openbb_terminal.core.log.generation.path_tracking_file_handler import (
PathTrackingFileHandler,
)
from openbb_terminal import feature_flags as obbff
from openbb_terminal.helper_funcs import (
check_positive,
get_flair,
parse_simple_args,
EXPORT_ONLY_RAW_DATA_ALLOWED,
)
from openbb_terminal.loggers import setup_logging
from openbb_terminal.menu import session
from openbb_terminal.parent_classes import BaseController
from openbb_terminal.rich_config import console, MenuText, translate
from openbb_terminal.terminal_helper import (
bootup,
check_for_updates,
is_reset,
print_goodbye,
reset,
suppress_stdout,
update_terminal,
welcome_message,
)
from openbb_terminal.helper_funcs import parse_and_split_input
# pylint: disable=too-many-public-methods,import-outside-toplevel,too-many-branches,no-member,C0302
logger = logging.getLogger(__name__)
env_file = str(USER_ENV_FILE)
create_paths()
class TerminalController(BaseController):
"""Terminal Controller class"""
CHOICES_COMMANDS = [
"keys",
"settings",
"survey",
"update",
"featflags",
"exe",
"guess",
"news",
]
CHOICES_MENUS = [
"stocks",
"economy",
"crypto",
"portfolio",
"forex",
"etf",
"reports",
"dashboards",
"funds",
"alternative",
"econometrics",
"sources",
]
PATH = "/"
ROUTINE_CHOICES = {
file: None
for file in os.listdir(
os.path.join(os.path.abspath(os.path.dirname(__file__)), "routines")
)
if file.endswith(".openbb")
}
GUESS_TOTAL_TRIES = 0
GUESS_NUMBER_TRIES_LEFT = 0
GUESS_SUM_SCORE = 0.0
GUESS_CORRECTLY = 0
def __init__(self, jobs_cmds: List[str] = None):
"""Constructor"""
super().__init__(jobs_cmds)
if session and obbff.USE_PROMPT_TOOLKIT:
choices: dict = {c: {} for c in self.controller_choices}
choices["support"] = self.SUPPORT_CHOICES
choices["exe"] = self.ROUTINE_CHOICES
self.completer = NestedCompleter.from_nested_dict(choices)
self.queue: List[str] = list()
if jobs_cmds:
self.queue = parse_and_split_input(
an_input=" ".join(jobs_cmds), cus