diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py index cc19ebdd41e..1200182c1cb 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py @@ -1,14 +1,27 @@ +from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.command_output import CommandOutput from openbb_core.app.model.results.empty import Empty +from openbb_core.app.provider_interface import ( + ExtraParams, + ProviderChoices, + StandardParams, +) +from openbb_core.app.query import Query from openbb_core.app.router import Router +from pydantic import BaseModel router = Router(prefix="/ca") -@router.command -def get() -> CommandOutput[Empty]: # type: ignore +@router.command(query="StockPeers") +def get( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> CommandOutput[BaseModel]: """Company peers.""" - return CommandOutput(results=Empty()) + return CommandOutput(results=Query(**locals()).execute()) @router.command diff --git a/openbb_sdk/providers/fmp/openbb_fmp/provider.py b/openbb_sdk/providers/fmp/openbb_fmp/provider.py index 44450c4a401..f3b949a6909 100644 --- a/openbb_sdk/providers/fmp/openbb_fmp/provider.py +++ b/openbb_sdk/providers/fmp/openbb_fmp/provider.py @@ -41,6 +41,7 @@ from .stock_eod import FMPStockEODFetcher from .stock_insider_trading import FMPStockInsiderTradingFetcher from .stock_news import FMPStockNewsFetcher from .stock_ownership import FMPStockOwnershipFetcher +from .stock_peers import FMPStockPeersFetcher from .stock_price import FMPStockPriceFetcher from .stock_splits import FMPStockSplitCalendarFetcher from .treasury_rates import FMPTreasuryRatesFetcher @@ -88,5 +89,6 @@ fmp_provider = Provider( FMPForexEODFetcher, FMPForexPriceFetcher, FMPForexPairsFetcher, + FMPStockPeersFetcher, ], ) diff --git a/openbb_sdk/providers/fmp/openbb_fmp/stock_peers.py b/openbb_sdk/providers/fmp/openbb_fmp/stock_peers.py new file mode 100644 index 00000000000..d9bd3e67c58 --- /dev/null +++ b/openbb_sdk/providers/fmp/openbb_fmp/stock_peers.py @@ -0,0 +1,57 @@ +"""FMP Stock Peers fetcher.""" + +# IMPORT STANDARD +from typing import Dict, List, Optional + +# IMPORT INTERNAL +from openbb_provider.models.stock_peers import StockPeersData, StockPeersQueryParams +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.helpers import data_transformer + +from .helpers import get_data_many + + +# FMP SPECIFIC FUNCTIONALITY CURRENTLY + + +class FMPStockPeersQueryParams(StockPeersQueryParams): + """FMP Stock Peers query. + + Source: https://site.financialmodelingprep.com/developer/docs/#Stock-Peers + + Parameter + --------- + symbol : str + The symbol of the company. + """ + + +class FMPStockPeersData(StockPeersData): + """FMP Stock Peers data.""" + + +class FMPStockPeersFetcher( + Fetcher[ + StockPeersQueryParams, + StockPeersData, + FMPStockPeersQueryParams, + FMPStockPeersData, + ] +): + @staticmethod + def transform_query( + query: StockPeersQueryParams, extra_params: Optional[Dict] = None + ) -> FMPStockPeersQueryParams: + return FMPStockPeersQueryParams(symbol=query.symbol, **extra_params or {}) + + @staticmethod + def extract_data( + query: FMPStockPeersQueryParams, api_key: str + ) -> List[FMPStockPeersData]: + base_url = "https://financialmodelingprep.com/api/v4" + url = f"{base_url}/stock_peers?symbol={query.symbol}&apikey={api_key}" + return get_data_many(url, FMPStockPeersData, "peersList") + + @staticmethod + def transform_data(data: List[FMPStockPeersData]) -> List[StockPeersData]: + return data_transformer(data, StockPeersData) diff --git a/openbb_sdk/sdk/provider/openbb_provider/models/stock_peers.py b/openbb_sdk/sdk/provider/openbb_provider/models/stock_peers.py new file mode 100644 index 00000000000..a09ac81da30 --- /dev/null +++ b/openbb_sdk/sdk/provider/openbb_provider/models/stock_peers.py @@ -0,0 +1,25 @@ +"""Stock Peers data model.""" + +from typing import List, Optional + +from openbb_provider.abstract.data import Data, QueryParams +from openbb_provider.models.base import BaseSymbol + + +class StockPeersQueryParams(QueryParams, BaseSymbol): + """Stock Peers query model. + + Parameter + --------- + symbol: str + The symbol of the company. + """ + + +class StockPeersData(Data): + """Stock Peers data. + + Returns + ------- + A list of stock peers based on sector, exchange and market cap + """