From 738dbe85d605dd171250cdb7540a18455ecf47e2 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Wed, 2 Aug 2023 16:16:28 +0530 Subject: [PATCH] refactored `TreasuryRates` for `fixedincome.treasury` --- .../fmp/openbb_fmp/models/treasury_rates.py | 61 +++++++------ .../openbb_provider/models/treasury_rates.py | 90 ++++++------------- 2 files changed, 59 insertions(+), 92 deletions(-) diff --git a/openbb_sdk/providers/fmp/openbb_fmp/models/treasury_rates.py b/openbb_sdk/providers/fmp/openbb_fmp/models/treasury_rates.py index 312b4fa9a0d..6b4c0baca8a 100644 --- a/openbb_sdk/providers/fmp/openbb_fmp/models/treasury_rates.py +++ b/openbb_sdk/providers/fmp/openbb_fmp/models/treasury_rates.py @@ -1,49 +1,51 @@ """FMP Treasury Rates fetcher.""" -from datetime import date as dateType +from datetime import datetime, timedelta from typing import Any, Dict, List, Optional -from openbb_provider.abstract.data import Data from openbb_provider.abstract.fetcher import Fetcher -from openbb_provider.helpers import get_querystring from openbb_provider.models.treasury_rates import ( TreasuryRatesData, TreasuryRatesQueryParams, ) -from pydantic import Field -from openbb_fmp.utils.helpers import get_data_many +from openbb_fmp.utils.helpers import get_querystring, get_data_many + +from pydantic import validator class FMPTreasuryRatesQueryParams(TreasuryRatesQueryParams): - """FMP Stock News query. + """FMP Stock News Query. Source: https://site.financialmodelingprep.com/developer/docs/treasury-rates-api/ - Parameter - --------- - start_date : str - The start date of the data. - end_date : str - The end date of the data. Default is today. + Maximum time interval can be 3 months. """ -class FMPTreasuryRatesData(Data): - date: dateType - month1: float = Field(alias="month_1") - month2: float = Field(alias="month_2") - month3: float = Field(alias="month_3") - month6: float = Field(alias="month_6") - year1: float = Field(alias="year_1") - year2: float = Field(alias="year_2") - year3: float = Field(alias="year_3") - year5: float = Field(alias="year_5") - year7: float = Field(alias="year_7") - year10: float = Field(alias="year_10") - year20: float = Field(alias="year_20") - year30: float = Field(alias="year_30") +class FMPTreasuryRatesData(TreasuryRatesData): + """FMP Treasury Rates Data.""" + + class Config: + fields = { + "month_1": "month1", + "month_2": "month2", + "month_3": "month3", + "month_6": "month6", + "year_1": "year1", + "year_2": "year2", + "year_3": "year3", + "year_5": "year5", + "year_7": "year7", + "year_10": "year10", + "year_20": "year20", + "year_30": "year30", + } + + @validator("date", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%d") class FMPTreasuryRatesFetcher( @@ -64,10 +66,15 @@ class FMPTreasuryRatesFetcher( ) -> List[FMPTreasuryRatesData]: api_key = credentials.get("fmp_api_key") if credentials else "" + query.start_date = (datetime.now() - timedelta(91)).date() + query.end_date = (datetime.now() - timedelta(1)).date() + base_url = "https://financialmodelingprep.com/api/v4/" - query_str = get_querystring(query.dict(by_alias=True), []) + # query_str = get_querystring(query.dict(by_alias=True), []) + query_str = get_querystring(query.dict(), []) query_str = query_str.replace("start_date", "from").replace("end_date", "to") url = f"{base_url}treasury?{query_str}&apikey={api_key}" + return get_data_many(url, FMPTreasuryRatesData) @staticmethod diff --git a/openbb_sdk/sdk/provider/openbb_provider/models/treasury_rates.py b/openbb_sdk/sdk/provider/openbb_provider/models/treasury_rates.py index c45d78d14cc..93a1ea11ef9 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/models/treasury_rates.py +++ b/openbb_sdk/sdk/provider/openbb_provider/models/treasury_rates.py @@ -1,82 +1,42 @@ """Treasury Rates Data Model.""" -from datetime import ( - date as dateType, - datetime, -) +from datetime import date as dateType from typing import Optional -from pydantic import Field - from openbb_provider.abstract.data import Data from openbb_provider.abstract.query_params import QueryParams -from openbb_provider.descriptions import QUERY_DESCRIPTIONS +from openbb_provider.descriptions import QUERY_DESCRIPTIONS, DATA_DESCRIPTIONS + +from pydantic import Field class TreasuryRatesQueryParams(QueryParams): - """Treasury Rates query. + """Treasury Rates Query.""" - Parameter - --------- - start_date : Optional[str] - Start date of the data, default is None. - end_date : Optional[str] - End date of the data, default is today. - """ - - start_date: Optional[str] = Field( - default=None, description=QUERY_DESCRIPTIONS["start_date"] + start_date: Optional[dateType] = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("start_date", ""), ) - end_date: Optional[str] = Field( - default=datetime.today().strftime("%Y-%m-%d"), - description=QUERY_DESCRIPTIONS["end_date"], + end_date: Optional[dateType] = Field( + default=None, + description=QUERY_DESCRIPTIONS.get("end_date", ""), ) class TreasuryRatesData(Data): - """Return Treasury Rates Data. + """Return Treasury Rates Data.""" - Returns - ------- - date : dateType - The date of the treasury rates. - month_1 : float - The 1 month treasury rate. - month_2 : float - The 2 month treasury rate. - month_3 : float - The 3 month treasury rate. - month_6 : float - The 6 month treasury rate. - year_1 : float - The 1 year treasury rate. - year_2 : float - The 2 year treasury rate. - year_3 : float - The 3 year treasury rate. - year_5 : float - The 5 year treasury rate. - year_7 : float - The 7 year treasury rate. - year_10 : float - The 10 year treasury rate. - year_20 : float - The 20 year treasury rate. - year_30 : float - The 30 year treasury rate. - """ - - date: dateType - month_1: float - month_2: float - month_3: float - month_6: float - year_1: float - year_2: float - year_3: float - year_5: float - year_7: float - year_10: float - year_20: float - year_30: float + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + month_1: float = Field(description="The 1 month treasury rate.") + month_2: float = Field(description="The 2 month treasury rate.") + month_3: float = Field(description="The 3 month treasury rate.") + month_6: float = Field(description="The 6 month treasury rate.") + year_1: float = Field(description="The 1 year treasury rate.") + year_2: float = Field(description="The 2 year treasury rate.") + year_3: float = Field(description="The 3 year treasury rate.") + year_5: float = Field(description="The 5 year treasury rate.") + year_7: float = Field(description="The 7 year treasury rate.") + year_10: float = Field(description="The 10 year treasury rate.") + year_20: float = Field(description="The 20 year treasury rate.") + year_30: float = Field(description="The 30 year treasury rate.")