mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-04 00:12:29 +00:00
fill return type in the provider lib for docstrings
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
from typing import Any, Dict, List, Literal, Optional, TypeVar
|
||||
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
from openbb_provider.helpers import get_querystring
|
||||
@@ -104,6 +104,9 @@ class BenzingaGlobalNewsFetcher(
|
||||
BenzingaGlobalNewsData,
|
||||
]
|
||||
):
|
||||
T = TypeVar("T")
|
||||
generic_return_type = List[T]
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> BenzingaGlobalNewsQueryParams:
|
||||
return BenzingaGlobalNewsQueryParams(**params)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
from typing import Any, Dict, List, Literal, Optional, TypeVar
|
||||
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
from openbb_provider.helpers import get_querystring
|
||||
@@ -100,6 +100,9 @@ class BenzingaStockNewsFetcher(
|
||||
BenzingaStockNewsData,
|
||||
]
|
||||
):
|
||||
T = TypeVar("T")
|
||||
generic_return_type = List[T]
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> BenzingaStockNewsQueryParams:
|
||||
return BenzingaStockNewsQueryParams(**params)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any, Dict, List, Optional, TypeVar
|
||||
|
||||
from openbb_provider.abstract.data import Data
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
@@ -40,6 +40,9 @@ class FMPStockNewsFetcher(
|
||||
FMPStockNewsData,
|
||||
]
|
||||
):
|
||||
T = TypeVar("T")
|
||||
generic_return_type = List[T]
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> FMPStockNewsQueryParams:
|
||||
return FMPStockNewsQueryParams(**params)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
from typing import Any, Dict, List, Literal, Optional, TypeVar
|
||||
|
||||
from openbb_provider.abstract.data import Data
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
@@ -89,6 +89,9 @@ class PolygonStockNewsFetcher(
|
||||
PolygonStockNewsData,
|
||||
]
|
||||
):
|
||||
T = TypeVar("T")
|
||||
generic_return_type = Dict[str, List[T]]
|
||||
|
||||
@staticmethod
|
||||
def transform_query(params: Dict[str, Any]) -> PolygonStockNewsQueryParams:
|
||||
return PolygonStockNewsQueryParams(**params)
|
||||
|
||||
@@ -2,7 +2,6 @@ from dataclasses import dataclass, make_dataclass
|
||||
from typing import Any, Dict, List, Literal, Optional, Tuple, Type, Union
|
||||
|
||||
from fastapi import Query
|
||||
from openbb_provider.abstract.fetcher import GenericDataType
|
||||
from openbb_provider.query_executor import QueryExecutor
|
||||
from openbb_provider.registry_map import MapType, RegistryMap
|
||||
from pydantic import BaseConfig, BaseModel, Extra, Field, create_model
|
||||
@@ -85,10 +84,7 @@ class ProviderInterface:
|
||||
self._model_providers_map = self._generate_model_providers_dc(self._map)
|
||||
self._params = self._generate_params_dc(self._map)
|
||||
self._data = self._generate_data_dc(self._map)
|
||||
self._merged_return_type = self._merge_return_type(self._map)
|
||||
self._merged_return_model = self._merge_return_model(
|
||||
self._merged_return_type, self._data
|
||||
)
|
||||
self._merged_return_model = self._merge_return_model(self._map, self._data)
|
||||
|
||||
self._providers_literal = self._get_provider_literal(
|
||||
self._registry_map.available_providers
|
||||
@@ -120,11 +116,6 @@ class ProviderInterface:
|
||||
"""Dictionary of data by model."""
|
||||
return self._data
|
||||
|
||||
@property
|
||||
def merged_return_type(self) -> Dict[str, type]:
|
||||
"""Dictionary of data by model merged."""
|
||||
return self._merged_return_type
|
||||
|
||||
@property
|
||||
def merged_return_model(self) -> Dict[str, Type[BaseModel]]:
|
||||
"""Dictionary of data by model merged."""
|
||||
@@ -405,24 +396,9 @@ class ProviderInterface:
|
||||
|
||||
return result
|
||||
|
||||
def _merge_return_type(self, map_: MapType) -> Dict[str, type]:
|
||||
"""Merge return generic types."""
|
||||
returns: Dict[str, Any] = {}
|
||||
for model_name, providers in map_.items():
|
||||
types_list = []
|
||||
for info in providers.values():
|
||||
ret = info["ReturnType"]
|
||||
if ret:
|
||||
types_list.append(ret)
|
||||
|
||||
if types_list:
|
||||
returns[model_name] = Union[tuple(types_list)] # type: ignore
|
||||
|
||||
return returns
|
||||
|
||||
def _merge_return_model(
|
||||
self,
|
||||
merged_return_type: Dict[str, type],
|
||||
map_: MapType,
|
||||
data: Dict[str, Dict[str, Union[StandardData, ExtraData]]],
|
||||
) -> Dict[str, Type[BaseModel]]:
|
||||
"""Merge standard data with extra data into a single BaseModel to be injected as FastAPI dependency."""
|
||||
@@ -454,9 +430,12 @@ class ProviderInterface:
|
||||
**fields_dict, # type: ignore
|
||||
)
|
||||
|
||||
ReturnType = merged_return_type.get(model_name, GenericDataType)
|
||||
ReturnType = map_[model_name]["openbb"]["ReturnType"]
|
||||
n_params = len(getattr(ReturnType, "__parameters__", ()))
|
||||
result[model_name] = ReturnType[tuple([ReturnModel] * n_params)] # type: ignore
|
||||
if n_params:
|
||||
result[model_name] = ReturnType[tuple([ReturnModel] * n_params)] # type: ignore
|
||||
else:
|
||||
result[model_name] = ReturnModel
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
"""Abstract class for the fetcher."""
|
||||
|
||||
|
||||
from abc import abstractmethod
|
||||
from typing import Any, Dict, Generic, List, Optional, TypeVar, Union
|
||||
|
||||
from openbb_provider.abstract.data import Data
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from typing import Any, Dict, List, Literal, Optional
|
||||
from typing import Any, Dict, List, Literal, Optional, TypeVar, Union
|
||||
|
||||
from openbb_provider.abstract.fetcher import Fetcher
|
||||
from openbb_provider.registry import Registry, RegistryLoader
|
||||
@@ -73,6 +73,8 @@ class RegistryMap:
|
||||
"ReturnType": return_type,
|
||||
}
|
||||
|
||||
map_ = self.fill_standard_return_type(map_)
|
||||
|
||||
return map_
|
||||
|
||||
def _get_models(self, map_: MapType) -> List[str]:
|
||||
@@ -103,3 +105,24 @@ class RegistryMap:
|
||||
def extract_return_type(fetcher: Fetcher):
|
||||
"""Extract return info from fetcher."""
|
||||
return getattr(fetcher, "generic_return_type", None)
|
||||
|
||||
@staticmethod
|
||||
def fill_standard_return_type(map_: MapType) -> MapType:
|
||||
"""Fill standard return type."""
|
||||
|
||||
T = TypeVar("T")
|
||||
GenericDataType = Union[T, List[T], Dict[str, T]]
|
||||
|
||||
for model_name, providers in map_.items():
|
||||
types_list = []
|
||||
for info in providers.values():
|
||||
ret = info["ReturnType"]
|
||||
if ret:
|
||||
types_list.append(ret)
|
||||
|
||||
if types_list:
|
||||
map_[model_name]["openbb"]["ReturnType"] = Union[tuple(types_list)] # type: ignore
|
||||
else:
|
||||
map_[model_name]["openbb"]["ReturnType"] = GenericDataType
|
||||
|
||||
return map_
|
||||
|
||||
Reference in New Issue
Block a user