From cc2e2c9cbc889e5d7519842daf67f9b30653ed7e Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 24 Jul 2023 15:55:06 +0100 Subject: [PATCH] remove ProviderName --- .../benzinga/openbb_benzinga/provider.py | 4 +- .../providers/fmp/openbb_fmp/provider.py | 4 +- .../providers/fred/openbb_fred/provider.py | 4 +- .../polygon/openbb_polygon/provider.py | 4 +- .../openbb_provider/abstract/provider.py | 62 +++---------------- .../sdk/provider/openbb_provider/registry.py | 15 ++--- 6 files changed, 23 insertions(+), 70 deletions(-) diff --git a/openbb_sdk/providers/benzinga/openbb_benzinga/provider.py b/openbb_sdk/providers/benzinga/openbb_benzinga/provider.py index b5f50fc3276..2eea97cc4a2 100644 --- a/openbb_sdk/providers/benzinga/openbb_benzinga/provider.py +++ b/openbb_sdk/providers/benzinga/openbb_benzinga/provider.py @@ -5,7 +5,7 @@ # IMPORT THIRD-PARTY # IMPORT INTERNAL -from openbb_provider.abstract.provider import Provider, ProviderNameType +from openbb_provider.abstract.provider import Provider from openbb_benzinga.global_news import BenzingaGlobalNewsFetcher from openbb_benzinga.stock_news import BenzingaStockNewsFetcher @@ -14,7 +14,7 @@ from openbb_benzinga.stock_news import BenzingaStockNewsFetcher benzinga_provider = Provider( - name=ProviderNameType("benzinga"), + name="benzinga", description="Provider for Benzinga.", required_credentials=["api_key"], fetcher_list=[BenzingaGlobalNewsFetcher, BenzingaStockNewsFetcher], diff --git a/openbb_sdk/providers/fmp/openbb_fmp/provider.py b/openbb_sdk/providers/fmp/openbb_fmp/provider.py index adb620fb9bd..135318f7c2c 100644 --- a/openbb_sdk/providers/fmp/openbb_fmp/provider.py +++ b/openbb_sdk/providers/fmp/openbb_fmp/provider.py @@ -5,7 +5,7 @@ # IMPORT THIRD-PARTY # IMPORT INTERNAL -from openbb_provider.abstract.provider import Provider, ProviderNameType +from openbb_provider.abstract.provider import Provider from .analyst_estimates import FMPAnalystEstimatesFetcher from .available_indices import FMPAvailableIndicesFetcher @@ -55,7 +55,7 @@ from .treasury_rates import FMPTreasuryRatesFetcher # mypy: disable-error-code="list-item" fmp_provider = Provider( - name=ProviderNameType("fmp"), + name="fmp", description="Provider for FMP.", required_credentials=["api_key"], fetcher_list=[ diff --git a/openbb_sdk/providers/fred/openbb_fred/provider.py b/openbb_sdk/providers/fred/openbb_fred/provider.py index fc02d3fe9b7..2c8e60bb69a 100644 --- a/openbb_sdk/providers/fred/openbb_fred/provider.py +++ b/openbb_sdk/providers/fred/openbb_fred/provider.py @@ -3,14 +3,14 @@ # IMPORT STANDARD # IMPORT THIRD-PARTY # IMPORT INTERNAL -from openbb_provider.abstract.provider import Provider, ProviderNameType +from openbb_provider.abstract.provider import Provider from openbb_fred.cpi import FREDCPIFetcher # mypy: disable-error-code="list-item" fred_provider = Provider( - name=ProviderNameType("fred"), + name="fred", description="Provider for FRED.", required_credentials=["api_key"], fetcher_list=[FREDCPIFetcher], diff --git a/openbb_sdk/providers/polygon/openbb_polygon/provider.py b/openbb_sdk/providers/polygon/openbb_polygon/provider.py index 04245a0b9f2..32c29b8e9ea 100644 --- a/openbb_sdk/providers/polygon/openbb_polygon/provider.py +++ b/openbb_sdk/providers/polygon/openbb_polygon/provider.py @@ -3,7 +3,7 @@ # IMPORT STANDARD # IMPORT INTERNAL -from openbb_provider.abstract.provider import Provider, ProviderNameType +from openbb_provider.abstract.provider import Provider from openbb_polygon.balance_sheet import PolygonBalanceSheetFetcher from openbb_polygon.cash_flow import PolygonCashFlowStatementFetcher @@ -22,7 +22,7 @@ from openbb_polygon.stock_price import PolygonStockPriceFetcher # mypy: disable-error-code="list-item" polygon_provider = Provider( - name=ProviderNameType("polygon"), + name="polygon", description="Provider for Polygon.", required_credentials=["api_key"], fetcher_list=[ diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py index 1628aff946f..9a9b4a3cb97 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py @@ -1,56 +1,8 @@ """Abstract class for providers.""" +from typing import Any, Dict, List, Optional -from typing import Any, Dict, List, Literal, Optional - -import pkg_resources - - -def build_provider_name(): - """Build the provider name Literal from the entry points.""" - extension_names = [] - - for entry_point in pkg_resources.iter_entry_points("openbb_provider_extension"): - extension_names.append(entry_point.name) - - literal_values = () - for extension_name in extension_names: - literal_values += (extension_name,) - - provider_name = Literal[literal_values] # type: ignore - - return provider_name - - -ProviderName = build_provider_name() - - -class ProviderNameType(type): - """Metaclass for ProviderName.""" - - __args__ = ProviderName.__args__ - __str__ = ProviderName.__str__ - - def __new__(mcs, value): - """Override __new__ to check if value is a valid provider name.""" - return value - - def __init__(cls, value): - if value not in ProviderName.__args__: - raise ValueError(f"{value} is not a valid provider name.") - cls.value = value - - def __getstate__(cls): - """Override __getstate__ to return the value of the provider name.""" - return cls.value - - def __setstate__(cls, state): - """Override __setstate__ to set the value of the provider name.""" - cls.value = state - - def __repr__(cls): - """Override __repr__ to return the value of the provider name.""" - return f"ProviderName({cls.value})" +from openbb_provider.abstract.fetcher import Fetcher class Provider: @@ -60,20 +12,20 @@ class Provider: def __init__( self, - name: ProviderNameType, + name: str, description: str, - fetcher_list: List[Any], + fetcher_list: List[Fetcher], required_credentials: Optional[List[str]], ) -> None: """Initialize the provider. Parameters ---------- - name : ProviderNameType - The name of the provider that will define the typing and usage of the provider. + name : str + The name of the provider. description : str The description of the provider. - fetcher_list : List[Any] + fetcher_list : List[Fetcher] The list of fetchers that the provider supports. required_credentials : Optional[List[str]] The list of required credentials for the provider. diff --git a/openbb_sdk/sdk/provider/openbb_provider/registry.py b/openbb_sdk/sdk/provider/openbb_provider/registry.py index 703aba2b35b..81201996dbd 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/registry.py +++ b/openbb_sdk/sdk/provider/openbb_provider/registry.py @@ -7,7 +7,7 @@ import pkg_resources from openbb_provider.abstract.data import QueryParams from openbb_provider.abstract.fetcher import Fetcher -from openbb_provider.abstract.provider import Provider, ProviderNameType +from openbb_provider.abstract.provider import Provider class ProviderError(Exception): @@ -18,10 +18,10 @@ class ProviderRegistry: """A Provider Registry is the central executor for dynamically retrieving data.""" def __init__(self) -> None: - self.providers: Dict[ProviderNameType, Provider] = {} - self.credentials: Dict[ProviderNameType, Dict[str, None]] = {} + self.providers: Dict[str, Provider] = {} + self.credentials: Dict[str, Dict[str, None]] = {} - def get_provider(self, provider_name: ProviderNameType) -> Provider: + def get_provider(self, provider_name: str) -> Provider: """Get a provider from the registry.""" if not self.providers: raise ValueError("No providers found, please confirm they are loaded.") @@ -38,7 +38,7 @@ class ProviderRegistry: def filter_credentials( self, - provider_name: ProviderNameType, + provider_name: str, credentials: Optional[Dict[str, str]] = None, ) -> Dict[str, str]: required_credentials = self.credentials.get(provider_name) @@ -68,13 +68,13 @@ class ProviderRegistry: if fetcher is None: raise ProviderError( f"This query is not supported by the '{provider.name}' provider. " - f"Please try another provider: '{ProviderNameType.__args__}'" + f"Please try another provider: '{list(self.providers.keys())}'" ) return fetcher def fetch( self, - provider_name: ProviderNameType, + provider_name: str, query_params: QueryParams, extra_params: Optional[Dict] = None, credentials: Optional[Dict[str, str]] = None, @@ -94,6 +94,7 @@ def load_extensions(entry_point_group: str = "openbb_provider_extension") -> Any """Load extensions from entry points and their API keys from settings.""" # TODO: Figure actual type for dict values Union[Provider, Dict[str, Dict[str, None]]] + # Can we try to load the extensions directly into the ProviderRegistry? Let's try it. extensions_dict: Dict[str, Dict[str, Any]] = {} extensions_dict["providers"] = {}