From ea0a3bbc5cf092eeddb0afd6a2e92fd441a0d546 Mon Sep 17 00:00:00 2001 From: Colin Delahunty <72827203+colin99d@users.noreply.github.com> Date: Tue, 5 Apr 2022 05:34:04 -0400 Subject: [PATCH 1/3] Fixed import bug in report and dashboard notebooks (#1632) --- .../cryptocurrency/overview/coinpaprika_model.py | 6 +++++- openbb_terminal/jupyter/dashboards/vsurf.ipynb | 9 +++++---- openbb_terminal/jupyter/reports/crypto_market.ipynb | 6 +++--- openbb_terminal/jupyter/reports/dark_pool.ipynb | 6 +++--- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py b/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py index 7ff88385017..20241d13613 100644 --- a/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py +++ b/openbb_terminal/cryptocurrency/overview/coinpaprika_model.py @@ -91,7 +91,11 @@ def get_global_market() -> pd.DataFrame: for key, date in global_markets.items(): if "date" in key: try: - global_markets[key] = parser.parse(date).strftime("%Y-%m-%d %H:%M:%S") + if isinstance(date, datetime): + new_date = date + else: + new_date = parser.parse(date) + global_markets[key] = new_date.strftime("%Y-%m-%d %H:%M:%S") except (KeyError, ValueError, TypeError) as e: logger.exception(str(e)) console.print(e) diff --git a/openbb_terminal/jupyter/dashboards/vsurf.ipynb b/openbb_terminal/jupyter/dashboards/vsurf.ipynb index eff046fbefa..816c8b52128 100644 --- a/openbb_terminal/jupyter/dashboards/vsurf.ipynb +++ b/openbb_terminal/jupyter/dashboards/vsurf.ipynb @@ -15,13 +15,14 @@ "import numpy as np\n", "import pandas as pd\n", "from IPython.display import display\n", - "from openbb_terminal import api as openbb\n", "\n", "warnings.filterwarnings(\"ignore\")\n", - "module_path = os.path.abspath(os.path.join(\"../..\"))\n", + "module_path = os.path.abspath(os.path.join(\"../../..\"))\n", "\n", "if module_path not in sys.path:\n", - " sys.path.append(module_path)" + " sys.path.append(module_path)\n", + "\n", + "from openbb_terminal import api as openbb" ] }, { @@ -153,7 +154,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.8.13" } }, "nbformat": 4, diff --git a/openbb_terminal/jupyter/reports/crypto_market.ipynb b/openbb_terminal/jupyter/reports/crypto_market.ipynb index 688b9059a28..58cb12506c8 100644 --- a/openbb_terminal/jupyter/reports/crypto_market.ipynb +++ b/openbb_terminal/jupyter/reports/crypto_market.ipynb @@ -15,7 +15,7 @@ "import warnings\n", "\n", "warnings.filterwarnings(\"ignore\")\n", - "module_path = os.path.abspath(os.path.join(\"../..\"))\n", + "module_path = os.path.abspath(os.path.join(\"../../..\"))\n", "\n", "if module_path not in sys.path:\n", " sys.path.append(module_path)" @@ -254,7 +254,7 @@ "hash": "158b8ab50e95ded652d8f2b468df64cac8eaa223c5e60f12cdaaeaccc6039b6d" }, "kernelspec": { - "display_name": "Python 3.8.12 64-bit ('gst': conda)", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -268,7 +268,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.10" + "version": "3.8.13" } }, "nbformat": 4, diff --git a/openbb_terminal/jupyter/reports/dark_pool.ipynb b/openbb_terminal/jupyter/reports/dark_pool.ipynb index 782c8707a8b..0855884a3e0 100644 --- a/openbb_terminal/jupyter/reports/dark_pool.ipynb +++ b/openbb_terminal/jupyter/reports/dark_pool.ipynb @@ -231,9 +231,9 @@ "metadata": { "celltoolbar": "Tags", "kernelspec": { - "display_name": "", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -245,7 +245,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.8.13" } }, "nbformat": 4, From 6eb0fbb1a6d99879beff9260d23e4e377a51bae0 Mon Sep 17 00:00:00 2001 From: Marcelo Litovsky <12512887+marcelonyc@users.noreply.github.com> Date: Tue, 5 Apr 2022 06:27:51 -0400 Subject: [PATCH 2/3] Added check for valid Coinbase product, including delisted checking (#1633) * Added check for valid Coinbase product, including delisted checking (such as XRP) * Added check for valid Coinbase product, including delisted checking (such as XRP) Co-authored-by: Jeroen Bouma Co-authored-by: Theodore Aptekarev --- .../brokers/coinbase/coinbase_model.py | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/openbb_terminal/portfolio/brokers/coinbase/coinbase_model.py b/openbb_terminal/portfolio/brokers/coinbase/coinbase_model.py index be7d693594d..494aa4def1c 100644 --- a/openbb_terminal/portfolio/brokers/coinbase/coinbase_model.py +++ b/openbb_terminal/portfolio/brokers/coinbase/coinbase_model.py @@ -14,6 +14,7 @@ from openbb_terminal.cryptocurrency.coinbase_helpers import ( ) from openbb_terminal.decorators import log_start_end from openbb_terminal.rich_config import console +import openbb_terminal.cryptocurrency.due_diligence.coinbase_model as cbm logger = logging.getLogger(__name__) @@ -72,15 +73,32 @@ def get_accounts(add_current_price: bool = True, currency: str = "USD") -> pd.Da if add_current_price: current_prices = [] - for _, row in df.iterrows(): + for index, row in df.iterrows(): + _, pairs = cbm.show_available_pairs_for_given_symbol(row.currency) + if currency not in pairs: + df.drop(index, inplace=True) + continue + to_get = f"{row.currency}-{currency}" - current_prices.append( - float( - make_coinbase_request(f"/products/{to_get}/stats", auth=auth)[ - "last" - ] + # Check pair validity. This is needed for delisted products like XRP + try: + cb_request = make_coinbase_request( + f"/products/{to_get}/stats", auth=auth ) - ) + except Exception as e: + if "Not allowed for delisted products" in str(e): + message = f"Coinbase product is delisted {str(e)}" + logger.debug(message) + else: + message = ( + f"Coinbase does not recognize this pair {to_get}: {str(e)}" + ) + logger.debug(message) + + df.drop(index, inplace=True) + continue + + current_prices.append(float(cb_request["last"])) df["current_price"] = current_prices df[f"BalanceValue({currency})"] = df.current_price * df.balance.astype(float) From 02ebdc6bb44d0c714d0dcd475fa3892a6ede6397 Mon Sep 17 00:00:00 2001 From: Colin Delahunty <72827203+colin99d@users.noreply.github.com> Date: Tue, 5 Apr 2022 07:01:33 -0400 Subject: [PATCH 3/3] Fixinttests (#1635) * Added fix for finzin library * Fixed options and screener Co-authored-by: Theodore Aptekarev --- .../stocks/comparison_analysis/finviz_compare_model.py | 5 ++++- openbb_terminal/stocks/options/syncretism_view.py | 3 +++ openbb_terminal/stocks/screener/finviz_model.py | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/openbb_terminal/stocks/comparison_analysis/finviz_compare_model.py b/openbb_terminal/stocks/comparison_analysis/finviz_compare_model.py index 04b877bb585..267875464e3 100644 --- a/openbb_terminal/stocks/comparison_analysis/finviz_compare_model.py +++ b/openbb_terminal/stocks/comparison_analysis/finviz_compare_model.py @@ -88,5 +88,8 @@ def get_comparison_data(data_type: str, similar: List[str]): try: return screen.screener_view(verbose=0) except IndexError: - console.print("[red]Invalid data from website[red]") + console.print("[red]Invalid data from website[red]\n") + return pd.DataFrame() + except AttributeError: + console.print("[red]Invalid data from website[red]\n") return pd.DataFrame() diff --git a/openbb_terminal/stocks/options/syncretism_view.py b/openbb_terminal/stocks/options/syncretism_view.py index 422cefc847d..4d150e1a817 100644 --- a/openbb_terminal/stocks/options/syncretism_view.py +++ b/openbb_terminal/stocks/options/syncretism_view.py @@ -165,6 +165,9 @@ def view_historical_greeks( ax.set_title( f"{(greek).capitalize()} historical for {ticker.upper()} {strike} {['Call','Put'][put]}" ) + if df.empty: + console.print("[red]Data from API is not valid.[/red]\n") + return ax.set_xlim(df.index[0], df.index[-1]) ims = im1 + im2 labels = [lab.get_label() for lab in ims] diff --git a/openbb_terminal/stocks/screener/finviz_model.py b/openbb_terminal/stocks/screener/finviz_model.py index 163706c4ed6..5a5224ecf6c 100644 --- a/openbb_terminal/stocks/screener/finviz_model.py +++ b/openbb_terminal/stocks/screener/finviz_model.py @@ -105,6 +105,9 @@ def get_screener_data(preset_loaded: str, data_type: str, limit: int, ascend: bo except IndexError: console.print("[red]Invalid data provided by the website[/red]\n") return pd.DataFrame() + except AttributeError: + console.print("[red]Invalid data provided by the website[/red]\n") + return pd.DataFrame() else: preset_filter = configparser.RawConfigParser()