summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPratyush Shukla <ps4534@nyu.edu>2024-02-23 00:36:57 +0530
committerGitHub <noreply@github.com>2024-02-22 19:06:57 +0000
commit274a027bf55104c64c86b35b457c66e6fad85943 (patch)
tree0ea685aba14ab6f1c7c9c702100fea645ed40ff8
parent6095c4314f915defd4fe5b0b30ed73b5c4b1aafb (diff)
[Feature] - Add `exception_handler` decorator to static (#6112)
* add exception handler decorator * add exception handler decorator code * updated static * rebuild to fix docstring indentation --------- Co-authored-by: Diogo Sousa <montezdesousa@gmail.com>
-rw-r--r--openbb_platform/core/openbb_core/app/static/package_builder.py18
-rw-r--r--openbb_platform/core/openbb_core/app/static/utils/decorators.py19
-rw-r--r--openbb_platform/openbb/package/crypto.py3
-rw-r--r--openbb_platform/openbb/package/crypto_price.py3
-rw-r--r--openbb_platform/openbb/package/currency.py3
-rw-r--r--openbb_platform/openbb/package/currency_price.py3
-rw-r--r--openbb_platform/openbb/package/derivatives_options.py4
-rw-r--r--openbb_platform/openbb/package/economy.py13
-rw-r--r--openbb_platform/openbb/package/economy_gdp.py5
-rw-r--r--openbb_platform/openbb/package/equity.py9
-rw-r--r--openbb_platform/openbb/package/equity_calendar.py6
-rw-r--r--openbb_platform/openbb/package/equity_compare.py3
-rw-r--r--openbb_platform/openbb/package/equity_discovery.py10
-rw-r--r--openbb_platform/openbb/package/equity_estimates.py6
-rw-r--r--openbb_platform/openbb/package/equity_fundamental.py27
-rw-r--r--openbb_platform/openbb/package/equity_ownership.py6
-rw-r--r--openbb_platform/openbb/package/equity_price.py6
-rw-r--r--openbb_platform/openbb/package/equity_shorts.py3
-rw-r--r--openbb_platform/openbb/package/etf.py12
-rw-r--r--openbb_platform/openbb/package/fixedincome.py3
-rw-r--r--openbb_platform/openbb/package/fixedincome_corporate.py7
-rw-r--r--openbb_platform/openbb/package/fixedincome_government.py4
-rw-r--r--openbb_platform/openbb/package/fixedincome_rate.py10
-rw-r--r--openbb_platform/openbb/package/fixedincome_spreads.py5
-rw-r--r--openbb_platform/openbb/package/index.py5
-rw-r--r--openbb_platform/openbb/package/news.py4
-rw-r--r--openbb_platform/openbb/package/regulators_sec.py8
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, 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_equity_estimates(Container):
def __repr__(self) -> str:
return self.__doc__ or ""
+ @exception_handler
@validate
def analyst_search(
self,
@@ -191,6 +192,7 @@ class ROUTER_equity_estimates(Container):
)
)
+ @exception_handler
@validate
def consensus(
self,
@@ -275,6 +277,7 @@ class ROUTER_equity_estimates(Container):
)
)
+ @exception_handler
@validate
def historical(