From 7bb378015ceb0d19377e13712e1a8bfd3123080f Mon Sep 17 00:00:00 2001 From: Colin Delahunty <72827203+colin99d@users.noreply.github.com> Date: Wed, 2 Feb 2022 09:56:40 -0500 Subject: [PATCH] Added fix and test (#1302) --- gamestonk_terminal/decorators.py | 30 ++++--------------- .../jupyter/reports/reports_controller.py | 9 ++++-- gamestonk_terminal/parent_classes.py | 2 -- tests/gamestonk_terminal/test_debug_mode.py | 24 +++++++++++++++ 4 files changed, 36 insertions(+), 29 deletions(-) create mode 100644 tests/gamestonk_terminal/test_debug_mode.py diff --git a/gamestonk_terminal/decorators.py b/gamestonk_terminal/decorators.py index 749062abfb3..0748e2fa939 100644 --- a/gamestonk_terminal/decorators.py +++ b/gamestonk_terminal/decorators.py @@ -9,29 +9,6 @@ from gamestonk_terminal.rich_config import console logger = logging.getLogger(__name__) -def try_except(f): - """Adds a try except block if the user is not in development mode - - Parameters - ---------- - f: function - The function to be wrapped - """ - # pylint: disable=inconsistent-return-statements - @functools.wraps(f) - def inner(*args, **kwargs): - if os.environ.get("DEBUG_MODE") == "true": - return f(*args, **kwargs) - try: - return f(*args, **kwargs) - except Exception as e: - console.print(f"[red]Error: {e}[/red]") - logger.exception("%s", type(e).__name__) - return [] - - return inner - - def log_start_end(func=None, log=None): """Wrap function to add a log entry at execution start and end. @@ -83,11 +60,16 @@ def log_start_end(func=None, log=None): else: log.info("START", extra={"func_name_override": func.__name__}) + if os.environ.get("DEBUG_MODE") == "true": + value = func(*args, **kwargs) + log.info("END", extra={"func_name_override": func.__name__}) + return value try: value = func(*args, **kwargs) log.info("END", extra={"func_name_override": func.__name__}) return value - except Exception: + except Exception as e: + console.print(f"[red]Error: {e}[/red]") log.exception("Exception", extra={"func_name_override": func.__name__}) return None diff --git a/gamestonk_terminal/jupyter/reports/reports_controller.py b/gamestonk_terminal/jupyter/reports/reports_controller.py index ad2a7b9753f..d60eb70149e 100644 --- a/gamestonk_terminal/jupyter/reports/reports_controller.py +++ b/gamestonk_terminal/jupyter/reports/reports_controller.py @@ -6,16 +6,19 @@ import os from typing import List import webbrowser from datetime import datetime +import logging from ast import literal_eval from prompt_toolkit.completion import NestedCompleter -from gamestonk_terminal.rich_config import console -from gamestonk_terminal.decorators import try_except import papermill as pm +from gamestonk_terminal.rich_config import console +from gamestonk_terminal.decorators import log_start_end from gamestonk_terminal.parent_classes import BaseController from gamestonk_terminal import feature_flags as gtff from gamestonk_terminal.menu import session +logger = logging.getLogger(__name__) + class ReportController(BaseController): """Report Controller class.""" @@ -91,7 +94,7 @@ Select one of the following reports:[/info][cmds] {self.reports_opts}[/cmds]""" console.print(text=help_text, menu="Jupyter - Reports") - @try_except + @log_start_end(log=logger) def switch(self, an_input: str): """Process and dispatch input. diff --git a/gamestonk_terminal/parent_classes.py b/gamestonk_terminal/parent_classes.py index 4b702c97a47..375c0bb0d8e 100644 --- a/gamestonk_terminal/parent_classes.py +++ b/gamestonk_terminal/parent_classes.py @@ -20,7 +20,6 @@ from gamestonk_terminal.decorators import log_start_end from gamestonk_terminal.menu import session from gamestonk_terminal import feature_flags as gtff -from gamestonk_terminal.decorators import try_except from gamestonk_terminal.helper_funcs import ( system_clear, get_flair, @@ -120,7 +119,6 @@ class BaseController(metaclass=ABCMeta): raise NotImplementedError("Must override print_help") @log_start_end(log=logger) - @try_except def switch(self, an_input: str) -> List[str]: """Process and dispatch input diff --git a/tests/gamestonk_terminal/test_debug_mode.py b/tests/gamestonk_terminal/test_debug_mode.py new file mode 100644 index 00000000000..1be33f88fcf --- /dev/null +++ b/tests/gamestonk_terminal/test_debug_mode.py @@ -0,0 +1,24 @@ +import logging +import os + +import pytest + +from gamestonk_terminal.decorators import log_start_end + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def function_that_fails(): + raise ValueError("Failure") + + +def test_debug_false(): + os.environ["DEBUG_MODE"] = "false" + function_that_fails() + + +def test_debug_true(): + os.environ["DEBUG_MODE"] = "true" + with pytest.raises(ValueError): + function_that_fails()