From 484f738e244162880c2d8d1d7ea9a95fa65a72f5 Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Thu, 24 Aug 2023 18:09:19 +0100 Subject: [PATCH] use singleton for provider interface: same functionality (#5372) * use singleton for provider interface: same functionality * ruff --- .../sdk/core/openbb_core/app/command_runner.py | 4 ++-- .../sdk/core/openbb_core/app/model/credentials.py | 4 ++-- openbb_sdk/sdk/core/openbb_core/app/model/obbject.py | 4 ++-- .../sdk/core/openbb_core/app/provider_interface.py | 12 +++--------- openbb_sdk/sdk/core/openbb_core/app/query.py | 4 ++-- openbb_sdk/sdk/core/openbb_core/app/router.py | 8 ++++---- .../core/openbb_core/app/static/package_builder.py | 8 ++++---- .../sdk/core/tests/app/model/test_credentials.py | 2 +- .../sdk/core/tests/app/test_provider_interface.py | 6 ------ openbb_sdk/sdk/core/tests/app/test_query.py | 2 +- openbb_sdk/sdk/core/tests/test_query.py | 2 +- 11 files changed, 22 insertions(+), 34 deletions(-) diff --git a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py index fd0209ef0e0..81c40c4d219 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py +++ b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py @@ -18,7 +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.provider_interface import ProviderInterface 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 @@ -125,7 +125,7 @@ class ParametersBuilder: ) kwargs["provider_choices"] = {"provider": provider} else: - available_providers = get_provider_interface().available_providers + available_providers = ProviderInterface().available_providers kwargs["provider_choices"] = { "provider": available_providers[0] if available_providers diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/credentials.py b/openbb_sdk/sdk/core/openbb_core/app/model/credentials.py index c2527bbdfec..3673a199e14 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/credentials.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/credentials.py @@ -2,7 +2,7 @@ from typing import Dict, List, Optional, Tuple from pydantic import create_model -from openbb_core.app.provider_interface import get_provider_interface +from openbb_core.app.provider_interface import ProviderInterface # Here we create the BaseModel from the provider required credentials. # This means that if a new provider extension is installed, the required @@ -28,7 +28,7 @@ def format_map( Credentials = create_model( # type: ignore "Credentials", __config__=Config, - **format_map(get_provider_interface().required_credentials), + **format_map(ProviderInterface().required_credentials), ) diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py index feeb7d1a192..5aefd3e1878 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py @@ -10,11 +10,11 @@ from openbb_core.app.model.abstract.tagged import Tagged from openbb_core.app.model.abstract.warning import Warning_ from openbb_core.app.model.charts.chart import Chart from openbb_core.app.model.metadata import Metadata -from openbb_core.app.provider_interface import get_provider_interface +from openbb_core.app.provider_interface import ProviderInterface from openbb_core.app.utils import basemodel_to_df T = TypeVar("T") -PROVIDERS = Literal[tuple(get_provider_interface().available_providers)] # type: ignore +PROVIDERS = Literal[tuple(ProviderInterface().available_providers)] # type: ignore class OBBject(GenericModel, Generic[T], Tagged): diff --git a/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py b/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py index 389f38318d4..3aef27a9e89 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py +++ b/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py @@ -8,6 +8,8 @@ from openbb_provider.utils.helpers import to_snake_case from pydantic import BaseConfig, BaseModel, Extra, Field, create_model from pydantic.fields import ModelField +from openbb_core.app.model.abstract.singleton import SingletonMeta + TupleFieldType = Tuple[str, type, Any] @@ -45,7 +47,7 @@ class ProviderChoices: provider: Literal # type: ignore -class ProviderInterface: +class ProviderInterface(metaclass=SingletonMeta): """Provider interface class. Provides access to 'openbb_provider' package information. Properties @@ -459,11 +461,3 @@ class ProviderInterface: fields=[("provider", Literal[tuple(available_providers)])], # type: ignore bases=(ProviderChoices,), ) - - -__provider_interface = ProviderInterface() - - -def get_provider_interface() -> ProviderInterface: - """Get the provider interface, this only needs to be created once.""" - return __provider_interface diff --git a/openbb_sdk/sdk/core/openbb_core/app/query.py b/openbb_sdk/sdk/core/openbb_core/app/query.py index bf915b1ed09..02a9c28dc34 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/query.py +++ b/openbb_sdk/sdk/core/openbb_core/app/query.py @@ -9,8 +9,8 @@ from openbb_core.app.model.command_context import CommandContext from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, + ProviderInterface, StandardParams, - get_provider_interface, ) @@ -30,7 +30,7 @@ class Query: self.standard_params = standard_params self.extra_params = extra_params self.name = self.standard_params.__class__.__name__ - self.provider_interface = get_provider_interface() + self.provider_interface = ProviderInterface() def filter_extra_params( self, diff --git a/openbb_sdk/sdk/core/openbb_core/app/router.py b/openbb_sdk/sdk/core/openbb_core/app/router.py index 1400b57f98e..957488d6a91 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/router.py +++ b/openbb_sdk/sdk/core/openbb_core/app/router.py @@ -29,8 +29,8 @@ from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, + ProviderInterface, StandardParams, - get_provider_interface, ) P = ParamSpec("P") @@ -223,7 +223,7 @@ class SignatureInspector: cls, func: Callable[P, OBBject], model: str ) -> Optional[Callable[P, OBBject]]: """Complete function signature.""" - provider_interface = get_provider_interface() + provider_interface = ProviderInterface() return_type = func.__annotations__["return"] is_list = False @@ -375,7 +375,7 @@ class CommandMap: ) -> Dict[str, List[str]]: api_router = router.api_router - mapping = get_provider_interface().map + mapping = ProviderInterface().map coverage_map: Dict[Any, Any] = {} for route in api_router.routes: @@ -405,7 +405,7 @@ class CommandMap: ) -> Dict[str, List[str]]: api_router = router.api_router - mapping = get_provider_interface().map + mapping = ProviderInterface().map coverage_map: Dict[Any, Any] = {} for route in api_router.routes: diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py index c2294f8bfc3..fa7d97ee618 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py @@ -29,7 +29,7 @@ from typing_extensions import Annotated, _AnnotatedAlias from openbb_core.app.env import Env from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.provider_interface import get_provider_interface +from openbb_core.app.provider_interface import ProviderInterface from openbb_core.app.router import RouterLoader @@ -268,7 +268,7 @@ class ClassDefinition: class DocstringGenerator: """Dynamically generate docstrings for the commands.""" - provider_interface = get_provider_interface() + provider_interface = ProviderInterface() @staticmethod def get_OBBject_description(model_name: str, providers: Optional[str]) -> str: @@ -532,7 +532,7 @@ class MethodDefinition: """Add the field description to the param signature.""" if model_name: available_fields = ( - get_provider_interface() + ProviderInterface() .map[model_name]["openbb"]["QueryParams"]["fields"] .keys() ) @@ -542,7 +542,7 @@ class MethodDefinition: continue description = ( - get_provider_interface() + ProviderInterface() .map[model_name]["openbb"]["QueryParams"]["fields"][param] .field_info.description ) diff --git a/openbb_sdk/sdk/core/tests/app/model/test_credentials.py b/openbb_sdk/sdk/core/tests/app/model/test_credentials.py index 099142989d7..bf128cf2d91 100644 --- a/openbb_sdk/sdk/core/tests/app/model/test_credentials.py +++ b/openbb_sdk/sdk/core/tests/app/model/test_credentials.py @@ -4,7 +4,7 @@ from unittest.mock import patch def test_credentials(): with patch( - target="openbb_core.app.model.credentials.get_provider_interface" + target="openbb_core.app.model.credentials.ProviderInterface" ) as mock_provider_interface: mock_provider_interface.required_credentials = { "benzinga_api_key": (typing.Optional[str], None), diff --git a/openbb_sdk/sdk/core/tests/app/test_provider_interface.py b/openbb_sdk/sdk/core/tests/app/test_provider_interface.py index dd3a655d0ea..0e11fbf5a92 100644 --- a/openbb_sdk/sdk/core/tests/app/test_provider_interface.py +++ b/openbb_sdk/sdk/core/tests/app/test_provider_interface.py @@ -5,7 +5,6 @@ import pytest from openbb_core.app.provider_interface import ( ProviderChoices, ProviderInterface, - get_provider_interface, ) @@ -20,11 +19,6 @@ def test_init(provider_interface): assert provider_interface -def test_get_provider_interface(): - """Test get provider interface.""" - assert isinstance(get_provider_interface(), ProviderInterface) - - def test_map(provider_interface): """Test map.""" provider_interface_map = provider_interface.map diff --git a/openbb_sdk/sdk/core/tests/app/test_query.py b/openbb_sdk/sdk/core/tests/app/test_query.py index e8253a28e36..ef32c0b048a 100644 --- a/openbb_sdk/sdk/core/tests/app/test_query.py +++ b/openbb_sdk/sdk/core/tests/app/test_query.py @@ -84,7 +84,7 @@ def test_filter_extra_params_wrong_param(query): def mock_registry(): """Mock registry.""" with patch( - "openbb_core.app.provider_interface.get_provider_interface" + "openbb_core.app.provider_interface.ProviderInterface" ) as mock_get_provider_interface: mock_registry = MagicMock() mock_get_provider_interface.return_value.build_registry.return_value = ( diff --git a/openbb_sdk/sdk/core/tests/test_query.py b/openbb_sdk/sdk/core/tests/test_query.py index e8253a28e36..ef32c0b048a 100644 --- a/openbb_sdk/sdk/core/tests/test_query.py +++ b/openbb_sdk/sdk/core/tests/test_query.py @@ -84,7 +84,7 @@ def test_filter_extra_params_wrong_param(query): def mock_registry(): """Mock registry.""" with patch( - "openbb_core.app.provider_interface.get_provider_interface" + "openbb_core.app.provider_interface.ProviderInterface" ) as mock_get_provider_interface: mock_registry = MagicMock() mock_get_provider_interface.return_value.build_registry.return_value = (