Added error handling (#2922)

* Added error handling

* Added fixes
This commit is contained in:
Colin Delahunty
2022-10-19 17:09:44 +02:00
committed by GitHub
parent 2c41a7b642
commit 6fa85372c6
2 changed files with 64 additions and 18 deletions

View File

@@ -8,6 +8,7 @@ from typing import Tuple
import investpy
import investiny
import pandas as pd
from requests.exceptions import RequestException
from openbb_terminal.decorators import log_start_end
from openbb_terminal.rich_config import console
@@ -36,6 +37,12 @@ def search_funds(by: str = "name", value: str = "") -> pd.DataFrame:
except RuntimeError as e:
logger.exception(str(e))
return pd.DataFrame()
except RequestException:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame()
except ConnectionError:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame()
@log_start_end(log=logger)
@@ -54,9 +61,16 @@ def get_overview(country: str = "united states", limit: int = 20) -> pd.DataFram
pd.DataFrame
Dataframe containing overview
"""
return investpy.funds.get_funds_overview(
country=country, as_json=False, n_results=limit
)
try:
return investpy.funds.get_funds_overview(
country=country, as_json=False, n_results=limit
)
except RequestException:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame()
except ConnectionError:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame()
@log_start_end(log=logger)
@@ -75,7 +89,14 @@ def get_fund_symbol_from_name(name: str) -> Tuple[str, str]:
str
Country in which matching symbol was found
"""
name_search_results = investpy.search_funds(by="name", value=name)
try:
name_search_results = investpy.search_funds(by="name", value=name)
except RequestException:
console.print("[red]The request to the website failed[/red]\n")
return "", ""
except ConnectionError:
console.print("[red]The request to the website failed[/red]\n")
return "", ""
if name_search_results.empty:
return "", ""
symbol = name_search_results.loc[:, "symbol"][0]
@@ -102,7 +123,14 @@ def get_fund_name_from_symbol(symbol: str) -> Tuple[str, str]:
str
Country matching symbol
"""
symbol_search_results = investpy.search_funds(by="symbol", value=symbol)
try:
symbol_search_results = investpy.search_funds(by="symbol", value=symbol)
except RequestException:
console.print("[red]The request to the website failed[/red]\n")
return "", ""
except ConnectionError:
console.print("[red]The request to the website failed[/red]\n")
return "", ""
if symbol_search_results.empty:
return "", ""
name = symbol_search_results.loc[:, "name"][0]
@@ -129,7 +157,14 @@ def get_fund_info(name: str, country: str = "united states") -> pd.DataFrame:
pd.DataFrame
Dataframe of fund information
"""
return investpy.funds.get_fund_information(name, country).T
try:
return investpy.funds.get_fund_information(name, country).T
except RequestException:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame()
except ConnectionError:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame()
@log_start_end(log=logger)
@@ -166,20 +201,23 @@ def get_fund_historical(
str:
Country that matches search results
"""
if by_name:
fund_name = name
try:
try:
if by_name:
fund_name = name
fund_symbol, matching_country = get_fund_symbol_from_name(name)
except RuntimeError as e:
logger.exception(str(e))
return pd.DataFrame(), name, "", country
else:
fund_symbol = name
try:
else:
fund_symbol = name
fund_name, matching_country = get_fund_name_from_symbol(name)
except RuntimeError as e:
logger.exception(str(e))
return pd.DataFrame(), "", name, country
except RuntimeError as e:
logger.exception(str(e))
return pd.DataFrame(), name, "", country
except RequestException:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame(), "", "", ""
except ConnectionError:
console.print("[red]The request to the website failed[/red]\n")
return pd.DataFrame(), "", "", ""
# Note that dates for investpy need to be in the format mm/dd/yyyy
from_date = start_date.strftime("%m/%d/%Y")
@@ -202,6 +240,10 @@ def get_fund_historical(
console.print("[red]Error connecting to the data source.[/red]\n")
logger.exception(str(e))
return pd.DataFrame(), fund_name, fund_symbol, search_country
except RequestException as e:
console.print("[red]Error connecting to the data source.[/red]\n")
logger.exception(str(e))
return pd.DataFrame(), fund_name, fund_symbol, search_country
except ConnectionError as e:
console.print("[red]Error connecting to the data source.[/red]\n")
logger.exception(str(e))

View File

@@ -84,6 +84,8 @@ def display_overview(country: str = "united states", limit: int = 10, export: st
Format to export data
"""
overview = investpy_model.get_overview(country=country, limit=limit)
if overview.empty:
return
overview["Assets (1B)"] = overview.total_assets / 1_000_000_000
overview = overview.drop(columns=["country", "total_assets"])
print_rich_table(
@@ -115,6 +117,8 @@ def display_fund_info(name: str, country: str = "united states"):
.applymap(lambda x: np.nan if not x else x)
.dropna()
)
if info.empty:
return
# redact inception date if it appears castable to a float
try: