added comsplit as stock split calendar from fmp

This commit is contained in:
Pratyush Shukla
2023-07-09 17:32:39 +05:30
parent 3c6461baad
commit fb0cde0f76
4 changed files with 139 additions and 0 deletions

View File

@@ -47,6 +47,7 @@ from builtin_providers.fmp.stock_insider_trading import FMPStockInsiderTradingFe
from builtin_providers.fmp.stock_news import FMPStockNewsFetcher
from builtin_providers.fmp.stock_ownership import FMPStockOwnershipFetcher
from builtin_providers.fmp.stock_price import FMPStockPriceFetcher
from builtin_providers.fmp.stock_splits import FMPStockSplitCalendarFetcher
from builtin_providers.fmp.treasury_rates import FMPTreasuryRatesFetcher
# mypy: disable-error-code="list-item"
@@ -80,6 +81,7 @@ fmp_provider = Provider(
FMPEarningsCalendarFetcher,
FMPEarningsCallTranscriptFetcher,
FMPHistoricalStockSplitsFetcher,
FMPStockSplitCalendarFetcher,
FMPHistoricalDividendsFetcher,
FMPKeyMetricsFetcher,
FMPSECFilingsFetcher,

View File

@@ -0,0 +1,69 @@
"""FMP Stock Splits Calendar fetcher."""
# IMPORT STANDARD
from datetime import date
from typing import Dict, List, Optional
# IMPORT INTERNAL
from openbb_provider.model.data.stock_splits import (
StockSplitCalendarData,
StockSplitCalendarQueryParams,
)
from openbb_provider.provider.abstract.fetcher import Fetcher
from openbb_provider.provider.provider_helpers import data_transformer
# IMPORT THIRD-PARTY
from builtin_providers.fmp.helpers import create_url, get_data_many
class FMPStockSplitCalendarQueryParams(StockSplitCalendarQueryParams):
"""FMP Stock Split Calendar query.
Source: https://site.financialmodelingprep.com/developer/docs/stock-split-calendar-api/
Parameter
---------
start_date : date
The start date of the stock splits from which to retrieve the data.
end_date : date
The end date of the stock splits up to which to retrieve the data.
"""
start_date: date
end_date: date
class FMPStockSplitCalendarData(StockSplitCalendarData):
"""FMP Stock Split Calendar data."""
class FMPStockSplitCalendarFetcher(
Fetcher[
StockSplitCalendarQueryParams,
StockSplitCalendarData,
FMPStockSplitCalendarQueryParams,
FMPStockSplitCalendarData,
]
):
@staticmethod
def transform_query(
query: StockSplitCalendarQueryParams, extra_params: Optional[Dict] = None
) -> FMPStockSplitCalendarQueryParams:
return FMPStockSplitCalendarQueryParams(
start_date=query.start_date,
end_date=query.end_date,
)
@staticmethod
def extract_data(
query: FMPStockSplitCalendarQueryParams, api_key: str
) -> List[FMPStockSplitCalendarData]:
query_str = f"from={query.start_date}&to={query.end_date}"
url = create_url(3, f"stock_split_calendar?{query_str}", api_key)
return get_data_many(url, FMPStockSplitCalendarData)
@staticmethod
def transform_data(
data: List[FMPStockSplitCalendarData],
) -> List[StockSplitCalendarData]:
return data_transformer(data, StockSplitCalendarData)

View File

@@ -0,0 +1,56 @@
"""Stock Split Calendar data model."""
from datetime import date as dateType, datetime, timedelta
from typing import Optional
from pydantic import Field
from openbb_provider.metadata import DESCRIPTIONS
from openbb_provider.model.abstract.data import Data, QueryParams
class StockSplitCalendarQueryParams(QueryParams):
"""Stock Split Calendar query model.
Parameter
---------
start_date : date
The start date of the stock splits from which to retrieve the data.
end_date : date
The end date of the stock splits up to which to retrieve the data.
"""
start_date: dateType = Field(
description=DESCRIPTIONS.get("start_date", ""),
default=(datetime.now() - timedelta(days=90)).date(),
)
end_date: dateType = Field(
description=DESCRIPTIONS.get("end_date", ""),
default=datetime.now().date(),
)
class StockSplitCalendarData(Data):
"""Stock Split Calendar data.
Returns
-------
date : date
The date of the stock splits.
label : str
The label of the stock splits.
symbol : str
The symbol of the company.
numerator : float
The numerator of the stock splits.
denominator : float
The denominator of the stock splits.
"""
date: dateType
label: str
symbol: str
numerator: float
denominator: float

View File

@@ -251,6 +251,18 @@ def cal(
)
@router.command(query="StockSplitCalendar")
def comsplit(
cc: CommandContext,
provider_choices: ProviderChoices,
standard_params: StandardParams,
) -> CommandOutput[BaseModel]:
"""Stock Split Calendar."""
return CommandOutput(
results=Query(**locals()).execute(), provider=provider_choices.provider
)
@router.command
def customer() -> CommandOutput[Empty]: # type: ignore
"""List of customers of the company."""