Added stocks.ca.get to sdk

This commit is contained in:
Pratyush Shukla
2023-07-14 19:47:09 +05:30
parent 0035fc5737
commit 698dc3409f
4 changed files with 100 additions and 3 deletions

View File

@@ -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

View File

@@ -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,
],
)

View File

@@ -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)

View File

@@ -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
"""