mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-27 20:42:26 +00:00
remove ProviderName
This commit is contained in:
@@ -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],
|
||||
|
||||
@@ -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=[
|
||||
|
||||
@@ -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],
|
||||
|
||||
@@ -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=[
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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"] = {}
|
||||
|
||||
Reference in New Issue
Block a user