diff --git a/.gitignore b/.gitignore index 330c21d615a..ab4a70189b6 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ gamestonk_terminal/jupyter/reports/stored/* gamestonk_terminal/portfolio/portfolios/* .ipynb_checkpoints/* *.swp +*.http # Jupyter Lab Extension build files jupyterlab/*/*.bundle.* diff --git a/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_model.py b/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_model.py index f4ea9973c3c..29aa89dfc72 100644 --- a/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_model.py +++ b/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_model.py @@ -85,4 +85,8 @@ def get_comparison_data(data_type: str, similar: List[str]): return pd.DataFrame() screen.set_filter(ticker=",".join(similar)) - return screen.ScreenerView(verbose=0) + try: + return screen.ScreenerView(verbose=0) + except IndexError: + console.print("[red]Invalid data from website[red]") + return pd.DataFrame() diff --git a/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_view.py b/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_view.py index 76c57c267b7..144e43145bb 100644 --- a/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_view.py +++ b/gamestonk_terminal/stocks/comparison_analysis/finviz_compare_view.py @@ -28,7 +28,7 @@ def screener(similar: List[str], data_type: str, export: str = ""): """ df_screen = finviz_compare_model.get_comparison_data(data_type, similar) - if df_screen.empty: + if df_screen is None or df_screen.empty: console.print("No screened data found.") else: print_rich_table( diff --git a/gamestonk_terminal/stocks/fundamental_analysis/financial_modeling_prep/fmp_view.py b/gamestonk_terminal/stocks/fundamental_analysis/financial_modeling_prep/fmp_view.py index a668ce011c3..9b8f2c43d69 100644 --- a/gamestonk_terminal/stocks/fundamental_analysis/financial_modeling_prep/fmp_view.py +++ b/gamestonk_terminal/stocks/fundamental_analysis/financial_modeling_prep/fmp_view.py @@ -57,7 +57,7 @@ def display_profile(ticker: str): console.print(f"\nDescription: {profile.loc['description'][0]}") else: logger.error("Could not get data") - console.print("[red]Unable to get data[/red]") + console.print("[red]Unable to get data[/red]\n") console.print() @@ -73,8 +73,11 @@ def display_quote(ticker: str): """ quote = fmp_model.get_quote(ticker) - print_rich_table(quote, headers=[""], title=f"{ticker} Quote", show_index=True) - console.print() + if quote.empty: + console.print("[red]Data not found[/red]\n") + else: + print_rich_table(quote, headers=[""], title=f"{ticker} Quote", show_index=True) + console.print() @log_start_end(log=logger) @@ -96,14 +99,19 @@ def display_enterprise( """ df_fa = fmp_model.get_enterprise(ticker, number, quarterly) df_fa = df_fa[df_fa.columns[::-1]] - print_rich_table( - df_fa, - headers=list(df_fa.columns), - title=f"{ticker} Enterprise", - show_index=True, - ) - console.print() - export_data(export, os.path.dirname(os.path.abspath(__file__)), "enterprise", df_fa) + if df_fa.empty: + console.print("[red]No data available[/red]\n") + else: + print_rich_table( + df_fa, + headers=list(df_fa.columns), + title=f"{ticker} Enterprise", + show_index=True, + ) + console.print() + export_data( + export, os.path.dirname(os.path.abspath(__file__)), "enterprise", df_fa + ) @log_start_end(log=logger) @@ -125,10 +133,14 @@ def display_discounted_cash_flow( """ dcf = fmp_model.get_dcf(ticker, number, quarterly) dcf = dcf[dcf.columns[::-1]] - print_rich_table(dcf, headers=[""], title="Discounted Cash Flow", show_index=True) - - console.print() - export_data(export, os.path.dirname(os.path.abspath(__file__)), "dcf", dcf) + if dcf.empty: + console.print("[red]No data available[/red]\n") + else: + print_rich_table( + dcf, headers=[""], title="Discounted Cash Flow", show_index=True + ) + console.print() + export_data(export, os.path.dirname(os.path.abspath(__file__)), "dcf", dcf) @log_start_end(log=logger) diff --git a/gamestonk_terminal/stocks/insider/openinsider_view.py b/gamestonk_terminal/stocks/insider/openinsider_view.py index a9ec1d1f8ad..6327e9b2787 100644 --- a/gamestonk_terminal/stocks/insider/openinsider_view.py +++ b/gamestonk_terminal/stocks/insider/openinsider_view.py @@ -159,8 +159,7 @@ def print_insider_data(type_insider: str, limit: int = 10, export: str = ""): res.append(row) df = pd.DataFrame(res).dropna().head(n=limit) - - df.columns = [ + columns = [ "X", "Filing Date", "Trade Date", @@ -176,6 +175,11 @@ def print_insider_data(type_insider: str, limit: int = 10, export: str = ""): "Value", ] + if df.shape[1] == 13: + df.columns = columns + else: + df.columns = columns[1:] + df["Filing Date"] = df["Filing Date"].apply( lambda x: "\n".join(textwrap.wrap(x, width=10)) if isinstance(x, str) else x ) @@ -203,11 +207,12 @@ def print_insider_data(type_insider: str, limit: int = 10, export: str = ""): export_data(export, os.path.dirname(os.path.abspath(__file__)), type_insider, df) - l_chars = [list(chars) for chars in df["X"].values] - l_uchars = np.unique(list(itertools.chain(*l_chars))) + if df.shape[1] == 13: + l_chars = [list(chars) for chars in df["X"].values] + l_uchars = np.unique(list(itertools.chain(*l_chars))) - for char in l_uchars: - console.print(d_notes[char]) + for char in l_uchars: + console.print(d_notes[char]) console.print("") diff --git a/gamestonk_terminal/stocks/screener/finviz_model.py b/gamestonk_terminal/stocks/screener/finviz_model.py index 54247dbf175..5130a902c6f 100644 --- a/gamestonk_terminal/stocks/screener/finviz_model.py +++ b/gamestonk_terminal/stocks/screener/finviz_model.py @@ -97,10 +97,14 @@ def get_screener_data(preset_loaded: str, data_type: str, limit: int, ascend: bo if preset_loaded in d_signals: screen.set_filter(signal=d_signals[preset_loaded]) - if limit > 0: - df_screen = screen.ScreenerView(limit=limit, ascend=ascend) - else: - df_screen = screen.ScreenerView(ascend=ascend) + try: + if limit > 0: + df_screen = screen.ScreenerView(limit=limit, ascend=ascend) + else: + df_screen = screen.ScreenerView(ascend=ascend) + except IndexError: + console.print("[red]Invalid data provided by the website[/red]\n") + return pd.DataFrame() else: preset_filter = configparser.RawConfigParser()