mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-29 21:42:22 +00:00
expose available providers in provider interface
This commit is contained in:
@@ -18,6 +18,7 @@ from openbb_core.app.model.command_context import CommandContext
|
||||
from openbb_core.app.model.obbject import OBBject
|
||||
from openbb_core.app.model.system_settings import SystemSettings
|
||||
from openbb_core.app.model.user_settings import UserSettings
|
||||
from openbb_core.app.provider_interface import get_provider_interface
|
||||
from openbb_core.app.router import CommandMap
|
||||
from openbb_core.app.service.system_service import SystemService
|
||||
from openbb_core.app.service.user_service import UserService
|
||||
@@ -112,17 +113,24 @@ class ParametersBuilder:
|
||||
provider_choices = kwargs.get("provider_choices", None)
|
||||
if provider_choices and isinstance(provider_choices, dict):
|
||||
provider = provider_choices.get("provider", None)
|
||||
if provider is None and route in command_map.command_coverage:
|
||||
route_defaults = user_settings.defaults.routes.get(route, None)
|
||||
random_choice = command_map.command_coverage[route][0]
|
||||
provider = (
|
||||
random_choice
|
||||
if route_defaults is None
|
||||
or route_defaults.get("provider", None) is None
|
||||
else route_defaults.get("provider", random_choice)
|
||||
)
|
||||
kwargs["provider_choices"] = {"provider": provider}
|
||||
return kwargs
|
||||
if provider is None:
|
||||
if route in command_map.command_coverage:
|
||||
route_defaults = user_settings.defaults.routes.get(route, None)
|
||||
random_choice = command_map.command_coverage[route][0]
|
||||
provider = (
|
||||
random_choice
|
||||
if route_defaults is None
|
||||
or route_defaults.get("provider", None) is None
|
||||
else route_defaults.get("provider", random_choice)
|
||||
)
|
||||
kwargs["provider_choices"] = {"provider": provider}
|
||||
else:
|
||||
available_providers = get_provider_interface().available_providers
|
||||
kwargs["provider_choices"] = {
|
||||
"provider": available_providers[0]
|
||||
if available_providers
|
||||
else None
|
||||
}
|
||||
return kwargs
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Dict, Generic, List, Optional, TypeVar, Union
|
||||
from typing import Dict, Generic, List, Literal, Optional, TypeVar, Union
|
||||
|
||||
import pandas as pd
|
||||
from pydantic import Field
|
||||
@@ -14,7 +14,7 @@ from openbb_core.app.provider_interface import get_provider_interface
|
||||
from openbb_core.app.utils import basemodel_to_df
|
||||
|
||||
T = TypeVar("T")
|
||||
PROVIDERS = get_provider_interface().providers_literal
|
||||
PROVIDERS = Literal[tuple(get_provider_interface().available_providers)] # type: ignore
|
||||
|
||||
|
||||
class OBBject(GenericModel, Generic[T], Tagged):
|
||||
|
||||
@@ -60,8 +60,8 @@ class ProviderInterface:
|
||||
Dictionary of params by model.
|
||||
return_schema : Dict[str, Type[BaseModel]]
|
||||
Dictionary of return data schema by model.
|
||||
providers_literal : type
|
||||
Literal of provider names.
|
||||
providers_literal : List[str]
|
||||
List of available providers.
|
||||
provider_choices : ProviderChoices
|
||||
Dataclass with literal of provider names.
|
||||
models : List[str]
|
||||
@@ -89,10 +89,8 @@ class ProviderInterface:
|
||||
self._data = self._generate_data_dc(self._map)
|
||||
self._return_schema = self._generate_return_schema(self._data)
|
||||
|
||||
self._providers_literal = self._get_provider_literal(
|
||||
self._registry_map.available_providers
|
||||
)
|
||||
self._provider_choices = self._get_provider_choices(self._providers_literal)
|
||||
self._available_providers = self._registry_map.available_providers
|
||||
self._provider_choices = self._get_provider_choices(self._available_providers)
|
||||
|
||||
@property
|
||||
def map(self) -> MapType:
|
||||
@@ -125,9 +123,9 @@ class ProviderInterface:
|
||||
return self._return_schema
|
||||
|
||||
@property
|
||||
def providers_literal(self) -> type:
|
||||
"""Literal of provider names."""
|
||||
return self._providers_literal
|
||||
def available_providers(self) -> List[str]:
|
||||
"""List of available providers."""
|
||||
return self._available_providers
|
||||
|
||||
@property
|
||||
def provider_choices(self) -> type:
|
||||
@@ -455,13 +453,10 @@ class ProviderInterface:
|
||||
|
||||
return result
|
||||
|
||||
def _get_provider_literal(self, available_providers: List[str]) -> type:
|
||||
return Literal[tuple(available_providers)] # type: ignore
|
||||
|
||||
def _get_provider_choices(self, providers_literal: type) -> type:
|
||||
def _get_provider_choices(self, available_providers: List[str]) -> type:
|
||||
return make_dataclass(
|
||||
cls_name="ProviderChoices",
|
||||
fields=[("provider", providers_literal)],
|
||||
fields=[("provider", Literal[tuple(available_providers)])], # type: ignore
|
||||
bases=(ProviderChoices,),
|
||||
)
|
||||
|
||||
|
||||
@@ -63,12 +63,12 @@ def test_data(provider_interface):
|
||||
assert "StockEOD" in data
|
||||
|
||||
|
||||
def test_providers_literal(provider_interface):
|
||||
def test_available_providers(provider_interface):
|
||||
"""Test providers literal."""
|
||||
providers_literal = provider_interface.providers_literal
|
||||
assert isinstance(type(providers_literal), type)
|
||||
assert len(providers_literal.__args__) > 0
|
||||
assert "openbb" not in providers_literal.__args__
|
||||
available_providers = provider_interface.available_providers
|
||||
assert isinstance(available_providers, list)
|
||||
assert len(available_providers) > 0
|
||||
assert "openbb" not in available_providers
|
||||
|
||||
|
||||
def test_provider_choices(provider_interface):
|
||||
|
||||
Reference in New Issue
Block a user