diff options
27 files changed, 172 insertions, 33 deletions
diff --git a/openbb_platform/core/openbb_core/app/static/package_builder.py b/openbb_platform/core/openbb_core/app/static/package_builder.py index 4e7cd9b914e..9e75ce8fc31 100644 --- a/openbb_platform/core/openbb_core/app/static/package_builder.py +++ b/openbb_platform/core/openbb_core/app/static/package_builder.py @@ -353,7 +353,7 @@ class ImportDefinition: else: code += "\nfrom typing_extensions import Annotated, deprecated" code += "\nfrom openbb_core.app.utils import df_to_basemodel" - code += "\nfrom openbb_core.app.static.utils.decorators import validate\n" + code += "\nfrom openbb_core.app.static.utils.decorators import exception_handler, validate\n" code += "\nfrom openbb_core.app.static.utils.filters import filter_inputs\n" code += "\nfrom openbb_core.provider.abstract.data import Data" code += "\nfrom openbb_core.app.deprecation import OpenBBDeprecationWarning\n" @@ -677,19 +677,23 @@ class MethodDefinition: else "" ) - msg = "" + code = "" + deprecated = "" + if MethodDefinition.is_deprecated_function(path): deprecation_message = MethodDefinition.get_deprecation_message(path) deprecation_type_class = type( deprecation_message.metadata # type: ignore ).__name__ - msg = "\n @deprecated(" - msg += f'\n "{deprecation_message}",' - msg += f"\n category={deprecation_type_class}," - msg += "\n )" + deprecated = "\n @deprecated(" + deprecated += f'\n "{deprecation_message}",' + deprecated += f"\n category={deprecation_type_class}," + deprecated += "\n )" - code = f"\n @validate{args}{msg}" + code += "\n @exception_handler" + code += f"\n @validate{args}" + code += deprecated code += f"\n def {func_name}(" code += f"\n self,\n {func_params}\n ) -> {func_returns}:\n" diff --git a/openbb_platform/core/openbb_core/app/static/utils/decorators.py b/openbb_platform/core/openbb_core/app/static/utils/decorators.py index 741af8f7975..3c20559d475 100644 --- a/openbb_platform/core/openbb_core/app/static/utils/decorators.py +++ b/openbb_platform/core/openbb_core/app/static/utils/decorators.py @@ -3,6 +3,8 @@ from functools import wraps from typing import Any, Callable, Optional, TypeVar, overload +from openbb_core.app.model.abstract.error import OpenBBError +from openbb_core.env import Env from pydantic import validate_call from typing_extensions import ParamSpec @@ -36,3 +38,20 @@ def validate( return wrapper return decorated if func is None else decorated(func) + + +def exception_handler(func: Callable[P, R]) -> Callable[P, R]: + """Handle exceptions, attempting to focus on the last call from the traceback.""" + + @wraps(func) + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception as e: + if Env().DEBUG_MODE: + raise + raise OpenBBError( + f"\nType -> {e.__class__.__name__}\n\nDetail -> {str(e)}" + ) from None + + return wrapper diff --git a/openbb_platform/openbb/package/crypto.py b/openbb_platform/openbb/package/crypto.py index 0968734fcfc..facccf894f7 100644 --- a/openbb_platform/openbb/package/crypto.py +++ b/openbb_platform/openbb/package/crypto.py @@ -5,7 +5,7 @@ from typing import Literal, Optional from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -26,6 +26,7 @@ class ROUTER_crypto(Container): return crypto_price.ROUTER_crypto_price(command_runner=self._command_runner) + @exception_handler @validate def search( self, diff --git a/openbb_platform/openbb/package/crypto_price.py b/openbb_platform/openbb/package/crypto_price.py index fcd269ea5fc..bac3afccbf7 100644 --- a/openbb_platform/openbb/package/crypto_price.py +++ b/openbb_platform/openbb/package/crypto_price.py @@ -6,7 +6,7 @@ from typing import List, Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -19,6 +19,7 @@ class ROUTER_crypto_price(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def historical( self, diff --git a/openbb_platform/openbb/package/currency.py b/openbb_platform/openbb/package/currency.py index 7f0f65a6670..c7d0bc46a58 100644 --- a/openbb_platform/openbb/package/currency.py +++ b/openbb_platform/openbb/package/currency.py @@ -4,7 +4,7 @@ from typing import Literal, Optional from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs @@ -24,6 +24,7 @@ class ROUTER_currency(Container): return currency_price.ROUTER_currency_price(command_runner=self._command_runner) + @exception_handler @validate def search( self, provider: Optional[Literal["fmp", "intrinio", "polygon"]] = None, **kwargs diff --git a/openbb_platform/openbb/package/currency_price.py b/openbb_platform/openbb/package/currency_price.py index a9c9ba46ed4..ff361795253 100644 --- a/openbb_platform/openbb/package/currency_price.py +++ b/openbb_platform/openbb/package/currency_price.py @@ -6,7 +6,7 @@ from typing import List, Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -19,6 +19,7 @@ class ROUTER_currency_price(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def historical( self, diff --git a/openbb_platform/openbb/package/derivatives_options.py b/openbb_platform/openbb/package/derivatives_options.py index 38af40e7194..d2555656026 100644 --- a/openbb_platform/openbb/package/derivatives_options.py +++ b/openbb_platform/openbb/package/derivatives_options.py @@ -5,7 +5,7 @@ from typing import Literal, Optional from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -19,6 +19,7 @@ class ROUTER_derivatives_options(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def chains( self, @@ -171,6 +172,7 @@ class ROUTER_derivatives_options(Container): ) ) + @exception_handler @validate def unusual( self, diff --git a/openbb_platform/openbb/package/economy.py b/openbb_platform/openbb/package/economy.py index 63d1d549e9c..fd51cd4fa50 100644 --- a/openbb_platform/openbb/package/economy.py +++ b/openbb_platform/openbb/package/economy.py @@ -6,7 +6,7 @@ from typing import List, Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -30,6 +30,7 @@ class ROUTER_economy(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def calendar( self, @@ -146,6 +147,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def composite_leading_indicator( self, @@ -229,6 +231,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def cpi( self, @@ -349,6 +352,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def fred_regional( self, @@ -503,6 +507,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def fred_search( self, @@ -624,6 +629,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def fred_series( self, @@ -772,6 +778,7 @@ class ROUTER_economy(Container): return economy_gdp.ROUTER_economy_gdp(command_runner=self._command_runner) + @exception_handler @validate def long_term_interest_rate( self, @@ -862,6 +869,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def money_measures( self, @@ -959,6 +967,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def risk_premium( self, provider: Optional[Literal["fmp"]] = None, **kwargs @@ -1018,6 +1027,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def short_term_interest_rate( self, @@ -1105,6 +1115,7 @@ class ROUTER_economy(Container): ) ) + @exception_handler @validate def unemployment( self, diff --git a/openbb_platform/openbb/package/economy_gdp.py b/openbb_platform/openbb/package/economy_gdp.py index 2756ca88825..56450291953 100644 --- a/openbb_platform/openbb/package/economy_gdp.py +++ b/openbb_platform/openbb/package/economy_gdp.py @@ -6,7 +6,7 @@ from typing import Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -21,6 +21,7 @@ class ROUTER_economy_gdp(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def forecast( self, @@ -117,6 +118,7 @@ class ROUTER_economy_gdp(Container): ) ) + @exception_handler @validate def nominal( self, @@ -204,6 +206,7 @@ class ROUTER_economy_gdp(Container): ) ) + @exception_handler @validate def real( self, diff --git a/openbb_platform/openbb/package/equity.py b/openbb_platform/openbb/package/equity.py index aa1f7cceacb..46eb8f0cddb 100644 --- a/openbb_platform/openbb/package/equity.py +++ b/openbb_platform/openbb/package/equity.py @@ -5,7 +5,7 @@ from typing import List, Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -72,6 +72,7 @@ class ROUTER_equity(Container): command_runner=self._command_runner ) + @exception_handler @validate def market_snapshots( self, provider: Optional[Literal["fmp", "polygon"]] = None, **kwargs @@ -221,6 +222,7 @@ class ROUTER_equity(Container): return equity_price.ROUTER_equity_price(command_runner=self._command_runner) + @exception_handler @validate def profile( self, @@ -410,9 +412,11 @@ class ROUTER_equity(Container): ) ) + @exception_handler @validate def screener(self, provider: Optional[Literal["fmp"]] = None, **kwargs) -> OBBject: - """Screen for companies meeting various criteria. These criteria include market cap, price, beta, volume, and dividend yield. + """Screen for companies meeting various criteria. These criteria include + market cap, price, beta, volume, and dividend yield. Parameters ---------- @@ -521,6 +525,7 @@ class ROUTER_equity(Container): ) ) + @exception_handler @validate def search( self, diff --git a/openbb_platform/openbb/package/equity_calendar.py b/openbb_platform/openbb/package/equity_calendar.py index b6c04002bf6..a43d5b2efc9 100644 --- a/openbb_platform/openbb/package/equity_calendar.py +++ b/openbb_platform/openbb/package/equity_calendar.py @@ -6,7 +6,7 @@ from typing import Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -22,6 +22,7 @@ class ROUTER_equity_calendar(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def dividend( self, @@ -114,6 +115,7 @@ class ROUTER_equity_calendar(Container): ) ) + @exception_handler @validate def earnings( self, @@ -210,6 +212,7 @@ class ROUTER_equity_calendar(Container): ) ) + @exception_handler @validate def ipo( self, @@ -384,6 +387,7 @@ class ROUTER_equity_calendar(Container): ) ) + @exception_handler @validate def splits( self, diff --git a/openbb_platform/openbb/package/equity_compare.py b/openbb_platform/openbb/package/equity_compare.py index e6d7b056ba9..f8647c948cb 100644 --- a/openbb_platform/openbb/package/equity_compare.py +++ b/openbb_platform/openbb/package/equity_compare.py @@ -5,7 +5,7 @@ from typing import Literal, Optional from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -18,6 +18,7 @@ class ROUTER_equity_compare(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def peers( self, diff --git a/openbb_platform/openbb/package/equity_discovery.py b/openbb_platform/openbb/package/equity_discovery.py index 407dc5692eb..05c653af9b3 100644 --- a/openbb_platform/openbb/package/equity_discovery.py +++ b/openbb_platform/openbb/package/equity_discovery.py @@ -6,7 +6,7 @@ from typing import Literal, Optional, Union from openbb_core.app.model.custom_parameter import OpenBBCustomParameter from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container -from openbb_core.app.static.utils.decorators import validate +from openbb_core.app.static.utils.decorators import exception_handler, validate from openbb_core.app.static.utils.filters import filter_inputs from typing_extensions import Annotated @@ -26,6 +26,7 @@ class ROUTER_equity_discovery(Container): def __repr__(self) -> str: return self.__doc__ or "" + @exception_handler @validate def active( self, @@ -107,6 +108,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def aggressive_small_caps( self, @@ -188,6 +190,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def filings( self, @@ -297,6 +300,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def gainers( self, @@ -378,6 +382,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def growth_tech( self, @@ -459,6 +464,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def losers( self, @@ -540,6 +546,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def undervalued_growth( self, @@ -621,6 +628,7 @@ class ROUTER_equity_discovery(Container): ) ) + @exception_handler @validate def undervalued_large_caps( self, diff --git a/openbb_platform/openbb/package/equity_estimates.py b/openbb_platform/openbb/package/equity_estimates.py index 6f0f017d5fb..34e8a908f7d 100644 --- a/openbb_platform/openbb/package/equity_estimates.py +++ b/openbb_platform/openbb/package/equity_estimates.py @@ -5,7 +5,7 @@ from typing import List, Literal, Option |