refactored TreasuryRates for fixedincome.treasury

This commit is contained in:
Pratyush Shukla
2023-08-02 16:16:28 +05:30
parent 9dda6b75de
commit 738dbe85d6
2 changed files with 59 additions and 92 deletions

View File

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

View File

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