diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/fetcher.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/fetcher.py index ddb9f4d73bf..8514c7ff0b1 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/fetcher.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/fetcher.py @@ -24,6 +24,11 @@ class Fetcher( ): """Abstract class for the fetcher.""" + @property + @abstractmethod + def model_name(self) -> str: + raise NotImplementedError + @staticmethod def transform_query(params: Dict[str, Any]) -> ProviderQueryParamsType: """Transform the params to the provider-specific query.""" @@ -54,28 +59,24 @@ class Fetcher( return data @property - @abstractmethod def query_params_type(self): """Get the type of the query.""" # pylint: disable=E1101 return self.__orig_bases__[0].__args__[0] @property - @abstractmethod def data_type(self): """Get the type of the data.""" # pylint: disable=E1101 return self.__orig_bases__[0].__args__[1] @property - @abstractmethod def provider_query_params_type(self): """Get the type of the provider query.""" # pylint: disable=E1101 return self.__orig_bases__[0].__args__[2] @property - @abstractmethod def provider_data_type(self): """Get the type of the provider data.""" # pylint: disable=E1101 diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py index 52cfb41d5c9..65a8da887e3 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py @@ -18,13 +18,21 @@ class Provider: """Initialize the provider.""" self.name = name self.description = description + self.required_credentials = required_credentials self.formatted_credentials = [] if required_credentials is not None: for rq in required_credentials: self.formatted_credentials.append(f"{self.name.lower()}_{rq}") + self.fetcher_list = fetcher_list self.fetcher_dict: Dict[str, Fetcher] = {} - self.fetcher_dict = { - str(fetcher.__name__).lower(): fetcher for fetcher in fetcher_list - } + + for fetcher in fetcher_list: + try: + model_name = fetcher().model_name + except NotImplementedError as e: + raise NotImplementedError( + f"'model_name' not explicitly declared for '{fetcher.__name__}'." + ) from e + self.fetcher_dict[model_name] = fetcher diff --git a/openbb_sdk/sdk/provider/openbb_provider/query_executor.py b/openbb_sdk/sdk/provider/openbb_provider/query_executor.py index 63b40413c45..b726275bbf1 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/query_executor.py +++ b/openbb_sdk/sdk/provider/openbb_provider/query_executor.py @@ -27,12 +27,11 @@ class QueryExecutor: def get_fetcher(self, provider: Provider, model_name: str): """Get a fetcher from a provider.""" - fetcher_name = (provider.name + model_name + "fetcher").lower() - if fetcher_name not in provider.fetcher_dict: + if model_name not in provider.fetcher_dict: raise ProviderError( f"Fetcher not found for model '{model_name}' in provider '{provider.name}'." ) - return provider.fetcher_dict[fetcher_name] + return provider.fetcher_dict[model_name] def match_credentials( self, provider: Provider, credentials: Optional[Dict[str, str]]