diff --git a/openbb_platform/core/openbb_core/provider/standard_models/treasury_prices.py b/openbb_platform/core/openbb_core/provider/standard_models/treasury_prices.py new file mode 100644 index 00000000000..41fc8f9c82a --- /dev/null +++ b/openbb_platform/core/openbb_core/provider/standard_models/treasury_prices.py @@ -0,0 +1,51 @@ +"""Treasury Prices Standard Model.""" + + +from datetime import date as dateType +from typing import Optional + +from pydantic import Field + +from openbb_core.provider.abstract.data import Data +from openbb_core.provider.abstract.query_params import QueryParams +from openbb_core.provider.utils.descriptions import ( + DATA_DESCRIPTIONS, + QUERY_DESCRIPTIONS, +) + + +class USTreasuryPricesQueryParams(QueryParams): + """US Treasury Prices Query.""" + + date: Optional[dateType] = Field( + description=QUERY_DESCRIPTIONS.get("date", "") + + " No date will return the current posted data.", + default=None, + ) + + +class USTreasuryPricesData(Data): + """US Treasury Prices Data.""" + + date: dateType = Field(description=DATA_DESCRIPTIONS.get("date", "")) + cusip: str = Field(description="CUSIP of the security.") + security_type: str = Field( + description="The type of US Treasury security. Bill, Note, Bond, TIPS, FRN." + ) + rate: Optional[float] = Field( + description="The annualized interest rate or coupon of the security.", + default=None, + ) + maturity_date: dateType = Field(description="The maturity date of the security.") + call_date: Optional[dateType] = Field( + description="The call date of the security.", default=None + ) + bid: Optional[float] = Field( + description="The bid price of the security.", default=None + ) + offer: Optional[float] = Field( + description="The offer price of the security.", default=None + ) + eod_price: Optional[float] = Field( + description="The end-of-day price of the security.", default=None + ) diff --git a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py index 385bd85d62d..641a9aa143c 100644 --- a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py +++ b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_api.py @@ -493,3 +493,37 @@ def test_fixedincome_government_treasury_auctions(params, headers): result = requests.get(url, headers=headers, timeout=30) assert isinstance(result, requests.Response) assert result.status_code == 200 + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "date": "2023-11-16", + "cusip": None, + "security_type": "bond", + "provider": "government_us", + } + ), + ( + { + "date": None, + "cusip": None, + "security_type": "bill", + "provider": "government_us", + } + ), + ], +) +@pytest.mark.integration +def test_fixedincome_government_treasury_prices(params, headers): + params = {p: v for p, v in params.items() if v} + + query_str = get_querystring(params, []) + url = ( + f"http://0.0.0.0:8000/api/v1/fixedincome/government/treasury_prices?{query_str}" + ) + result = requests.get(url, headers=headers, timeout=30) + assert isinstance(result, requests.Response) + assert result.status_code == 200 diff --git a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py index 5e9b7c712b2..b2c9bd0d692 100644 --- a/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py +++ b/openbb_platform/extensions/fixedincome/integration/test_fixedincome_python.py @@ -454,3 +454,34 @@ def test_fixedincome_government_treasury_auctions(params, obb): assert result assert isinstance(result, OBBject) assert len(result.results) > 0 + + +@pytest.mark.parametrize( + "params", + [ + ( + { + "date": "2023-11-16", + "cusip": None, + "security_type": "bond", + "provider": "government_us", + } + ), + ( + { + "date": None, + "cusip": None, + "security_type": "bill", + "provider": "government_us", + } + ), + ], +) +@pytest.mark.integration +def test_fixedincome_government_treasury_prices(params, obb): + params = {p: v for p, v in params.items() if v} + + result = obb.fixedincome.government.treasury_prices(**params) + assert result + assert isinstance(result, OBBject) + assert len(result.results) > 0 diff --git a/openbb_platform/extensions/fixedincome/openbb_fixedincome/government/government_router.py b/openbb_platform/extensions/fixedincome/openbb_fixedincome/government/government_router.py index 9eb927b5ecc..fe81693d094 100644 --- a/openbb_platform/extensions/fixedincome/openbb_fixedincome/government/government_router.py +++ b/openbb_platform/extensions/fixedincome/openbb_fixedincome/government/government_router.py @@ -76,3 +76,14 @@ async def treasury_auctions( ) -> OBBject[BaseModel]: """Government Treasury Auctions.""" return await OBBject.from_query(Query(**locals())) + + +@router.command(model="TreasuryPrices") +async def treasury_prices( + cc: CommandContext, + provider_choices: ProviderChoices, + standard_params: StandardParams, + extra_params: ExtraParams, +) -> OBBject[BaseModel]: + """Government Treasury Prices by date.""" + return await OBBject.from_query(Query(**locals())) diff --git a/openbb_platform/providers/government_us/openbb_government_us/__init__.py b/openbb_platform/providers/government_us/openbb_government_us/__init__.py index dd2fc6b7b2d..7d5088ad7b9 100644 --- a/openbb_platform/providers/government_us/openbb_government_us/__init__.py +++ b/openbb_platform/providers/government_us/openbb_government_us/__init__.py @@ -4,6 +4,9 @@ from openbb_core.provider.abstract.provider import Provider from openbb_government_us.models.treasury_auctions import ( GovernmentUSTreasuryAuctionsFetcher, ) +from openbb_government_us.models.treasury_prices import ( + GovernmentUSTreasuryPricesFetcher, +) government_us_provider = Provider( name="government_us", @@ -17,5 +20,6 @@ government_us_provider = Provider( ), fetcher_dict={ "TreasuryAuctions": GovernmentUSTreasuryAuctionsFetcher, + "TreasuryPrices": GovernmentUSTreasuryPricesFetcher, }, ) diff --git a/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py b/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py new file mode 100644 index 00000000000..12da0254127 --- /dev/null +++ b/openbb_platform/providers/government_us/openbb_government_us/models/treasury_prices.py @@ -0,0 +1,146 @@ +"""US Government Treasury Prices""" +import asyncio +from datetime import datetime, timedelta +from io import StringIO +from typing import Any, Dict, List, Literal, Optional + +import requests +from openbb_core.provider.abstract.fetcher import Fetcher +from openbb_core.provider.standard_models.treasury_prices import ( + USTreasuryPricesData, + USTreasuryPricesQueryParams, +) +from openbb_government_us.utils.helpers import get_random_agent +from pandas import read_csv, to_datetime +from pydantic import Field + + +class GovernmentUSTreasuryPricesQueryParams(USTreasuryPricesQueryParams): + """US Government Treasury Prices Query.""" + + cusip: Optional[str] = Field(description="Filter by CUSIP.", default=None) + security_type: Literal[None, "bill", "note", "bond", "tips", "frn"] = Field( + description="Filter by security type.", + default=None, + ) + + +class GovernmentUSTreasuryPricesData(USTreasuryPricesData): + """US Government Treasury Prices Data.""" + + +class GovernmentUSTreasuryPricesFetcher( + Fetcher[ + GovernmentUSTreasuryPricesQueryParams, + List[GovernmentUSTreasuryPricesData], + ] +): + @staticmethod + def transform_query( + params: Dict[str, Any] + ) -> GovernmentUSTreasuryPricesQueryParams: + """Transform query params.""" + + if params.get("date") is None: + _date = datetime.now().date() + else: + _date = ( + datetime.strptime(params["date"], "%Y-%m-%d").date() + if isinstance(params["date"], str) + else params["date"] + ) + if _date.weekday() > 4: + _date = _date - timedelta(days=_date.weekday() - 4) + params["date"] = _date + + return GovernmentUSTreasuryPricesQueryParams(**params) + + @staticmethod + async def extract_data( + query: GovernmentUSTreasuryPricesQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> str: + """Extract the raw data from US Treasury website.""" + + url = "https://treasurydirect.gov/GA-FI/FedInvest/securityPriceDetail" + + HEADERS = { + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", + "Accept-Language": "en-CA,en-US;q=0.7,en;q=0.3", + "Accept-Encoding": "gzip, deflate, br", + "Referer": "https://treasurydirect.gov/", + "Content-Type": "application/x-www-form-urlencoded", + "Origin": "https://treasurydirect.gov", + "User-Agent": get_random_agent(), + } + + payload = ( + f"priceDateDay={query.date.day}" # type: ignore + f"&priceDateMonth={query.date.month}" # type: ignore + f"&priceDateYear={query.date.year}" # type: ignore + "&fileType=csv" + "&csv=CSV+FORMAT" + ) + + def fetch_data() -> str: + r = requests.post(url=url, headers=HEADERS, data=payload, timeout=5) + + if r.status_code != 200: + raise RuntimeError("Error with the request: " + str(r.status_code)) + + if r.encoding != "ISO-8859-1": + raise RuntimeError( + f"Expected ISO-8859-1 encoding but got: {r.encoding}" + ) + return r.content.decode("utf-8") + + loop = asyncio.get_running_loop() + return await loop.run_in_executor(None, fetch_data) + + @staticmethod + def transform_data( + query: GovernmentUSTreasuryPricesQueryParams, + data: str, + **kwargs: Any, + ) -> List[GovernmentUSTreasuryPricesData]: + """Transform the data.""" + + try: + results = read_csv(StringIO(data), header=0) + columns = [ + "cusip", + "security_type", + "rate", + "maturity_date", + "call_date", + "bid", + "offer", + "eod_price", + ] + results.columns = columns + results["date"] = query.date.strftime("%Y-%m-%d") # type: ignore + for col in ["maturity_date", "call_date"]: + results[col] = ( + ( + to_datetime(results[col], format="%m/%d/%Y").dt.strftime( + "%Y-%m-%d" + ) + ) + .fillna("-") + .replace("-", None) + ) + + except Exception as e: + raise RuntimeError("No data was returned: " + str(e)) + + if query.security_type is not None: + results = results[ + results["security_type"].str.contains(query.security_type, case=False) + ] + if query.cusip is not None: + results = results[results["cusip"] == query.cusip] + return [ + GovernmentUSTreasuryPricesData.model_validate(d) + for d in results.to_dict("records") + ] diff --git a/openbb_platform/providers/government_us/openbb_government_us/utils/helpers.py b/openbb_platform/providers/government_us/openbb_government_us/utils/helpers.py new file mode 100644 index 00000000000..e3dde4aca4a --- /dev/null +++ b/openbb_platform/providers/government_us/openbb_government_us/utils/helpers.py @@ -0,0 +1,10 @@ +"""Government US Helpers.""" + +from random_user_agent.user_agent import UserAgent + + +def get_random_agent() -> str: + """Generate a random user agent for a request.""" + user_agent_rotator = UserAgent(limit=100) + user_agent = user_agent_rotator.get_random_user_agent() + return user_agent diff --git a/openbb_platform/providers/government_us/tests/record/http/test_government_us_fetchers/test_government_us_treasury_prices_fetcher.yaml b/openbb_platform/providers/government_us/tests/record/http/test_government_us_fetchers/test_government_us_treasury_prices_fetcher.yaml new file mode 100644 index 00000000000..89d63e1143b --- /dev/null +++ b/openbb_platform/providers/government_us/tests/record/http/test_government_us_fetchers/test_government_us_treasury_prices_fetcher.yaml @@ -0,0 +1,452 @@ +interactions: +- request: + body: priceDateDay=21&priceDateMonth=11&priceDateYear=2023&fileType=csv&csv=CSV+FORMAT + headers: + Accept: + - text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 + Accept-Encoding: + - gzip, deflate, br + Accept-Language: + - en-CA,en-US;q=0.7,en;q=0.3 + Connection: + - keep-alive + Content-Length: + - '80' + Content-Type: + - application/x-www-form-urlencoded + Origin: + - https://treasurydirect.gov + Referer: + - https://treasurydirect.gov/ + method: POST + uri: https://treasurydirect.gov/GA-FI/FedInvest/securityPriceDetail + response: + body: + string: "912797FL6,MARKET BASED BILL,0.0,11/24/2023,,0.000000,99.956000,0.000000\r\n912797HM2,MARKET + BASED BILL,0.0,11/28/2023,,99.897917,99.897722,0.000000\r\n912796ZD4,MARKET + BASED BILL,0.0,11/30/2023,,99.868875,99.868750,0.000000\r\n912797HN0,MARKET + BASED BILL,0.0,12/05/2023,,99.795444,99.795056,0.000000\r\n912797FT9,MARKET + BASED BILL,0.0,12/07/2023,,99.766222,99.765778,0.000000\r\n912797HU4,MARKET + BASED BILL,0.0,12/12/2023,,99.693167,99.692583,0.000000\r\n912797FU6,MARKET + BASED BILL,0.0,12/14/2023,,99.664583,99.663944,0.000000\r\n912797HV2,MARKET + BASED BILL,0.0,12/19/2023,,99.588944,99.588556,0.000000\r\n912797FV4,MARKET + BASED BILL,0.0,12/21/2023,,99.559583,99.559167,0.000000\r\n912797HW0,MARKET + BASED BILL,0.0,12/26/2023,,99.487153,99.486667,0.000000\r\n912796ZN2,MARKET + BASED BILL,0.0,12/28/2023,,99.455792,99.455278,0.000000\r\n912797HX8,MARKET + BASED BILL,0.0,01/02/2024,,99.385167,99.384000,0.000000\r\n912797FW2,MARKET + BASED BILL,0.0,01/04/2024,,99.355889,99.354667,0.000000\r\n912797HY6,MARKET + BASED BILL,0.0,01/09/2024,,99.284736,99.282694,0.000000\r\n912797GC5,MARKET + BASED BILL,0.0,01/11/2024,,99.256250,99.254833,0.000000\r\n912797HZ3,MARKET + BASED BILL,0.0,01/16/2024,,99.181000,99.180222,0.000000\r\n912797GD3,MARKET + BASED BILL,0.0,01/18/2024,,99.154972,99.154167,0.000000\r\n912797JA6,MARKET + BASED BILL,0.0,01/23/2024,,99.081250,99.079500,0.000000\r\n912796ZY8,MARKET + BASED BILL,0.0,01/25/2024,,99.052986,99.050278,0.000000\r\n912797JB4,MARKET + BASED BILL,0.0,01/30/2024,,98.983056,98.979167,0.000000\r\n912797GE1,MARKET + BASED BILL,0.0,02/01/2024,,98.950000,98.948000,0.000000\r\n912797JC2,MARKET + BASED BILL,0.0,02/06/2024,,98.880292,98.877083,0.000000\r\n912797GM3,MARKET + BASED BILL,0.0,02/08/2024,,98.850111,98.847917,0.000000\r\n912797JD0,MARKET + BASED BILL,0.0,02/13/2024,,98.776167,98.772667,0.000000\r\n912797GN1,MARKET + BASED BILL,0.0,02/15/2024,,98.749417,98.748222,0.000000\r\n912797JE8,MARKET + BASED BILL,0.0,02/20/2024,,98.676708,98.672917,0.000000\r\n912796Z28,MARKET + BASED BILL,0.0,02/22/2024,,98.643750,98.641167,0.000000\r\n912797JF5,MARKET + BASED BILL,0.0,02/27/2024,,98.572194,98.570833,0.000000\r\n912797GP6,MARKET + BASED BILL,0.0,02/29/2024,,98.543056,98.541667,0.000000\r\n912797JG3,MARKET + BASED BILL,0.0,03/05/2024,,98.470208,98.468750,0.000000\r\n912797GQ4,MARKET + BASED BILL,0.0,03/07/2024,,98.444042,98.439583,0.000000\r\n912797JH1,MARKET + BASED BILL,0.0,03/12/2024,,98.368222,98.366667,0.000000\r\n912797GX9,MARKET + BASED BILL,0.0,03/14/2024,,98.354917,98.350167,0.000000\r\n912797JJ7,MARKET + BASED BILL,0.0,03/19/2024,,98.266236,98.264583,0.000000\r\n912797LL9,MARKET + BASED BILL,0.0,03/21/2024,,98.243819,98.238778,0.000000\r\n912797GY7,MARKET + BASED BILL,0.0,03/28/2024,,98.145778,98.140444,0.000000\r\n912797GZ4,MARKET + BASED BILL,0.0,04/04/2024,,98.050000,98.046250,0.000000\r\n912797HF7,MARKET + BASED BILL,0.0,04/11/2024,,97.948889,97.944944,0.000000\r\n912796CX5,MARKET + BASED BILL,0.0,04/18/2024,,97.845708,97.839500,0.000000\r\n912797HG5,MARKET + BASED BILL,0.0,04/25/2024,,97.748833,97.742333,0.000000\r\n912797HH3,MARKET + BASED BILL,0.0,05/02/2024,,97.654611,97.650083,0.000000\r\n912797HQ3,MARKET + BASED BILL,0.0,05/09/2024,,97.546806,97.544444,0.000000\r\n912797FH5,MARKET + BASED BILL,0.0,05/16/2024,,97.443333,97.438417,0.000000\r\n912797FS1,MARKET + BASED BILL,0.0,06/13/2024,,97.152778,97.147083,0.000000\r\n912797GB7,MARKET + BASED BILL,0.0,07/11/2024,,96.747708,96.731528,0.000000\r\n912797GK7,MARKET + BASED BILL,0.0,08/08/2024,,96.360500,96.346000,0.000000\r\n912797GL5,MARKET + BASED BILL,0.0,09/05/2024,,95.986111,95.970056,0.000000\r\n912797GW1,MARKET + BASED BILL,0.0,10/03/2024,,95.623639,95.614833,0.000000\r\n912797HE0,MARKET + BASED BILL,0.0,10/31/2024,,95.232292,95.227500,0.000000\r\n9128285P1,MARKET + BASED NOTE,0.02875,11/30/2023,,0.000000,99.937500,0.000000\r\n912828U57,MARKET + BASED NOTE,0.02125,11/30/2023,,0.000000,99.906250,0.000000\r\n91282CDM0,MARKET + BASED NOTE,0.005,11/30/2023,,0.000000,99.906250,0.000000\r\n91282CBA8,MARKET + BASED NOTE,0.00125,12/15/2023,,0.000000,99.656250,0.000000\r\n912828V23,MARKET + BASED NOTE,0.0225,12/31/2023,,0.000000,99.625000,0.000000\r\n9128285U0,MARKET + BASED NOTE,0.02625,12/31/2023,,0.000000,99.687500,0.000000\r\n91282CDR9,MARKET + BASED NOTE,0.0075,12/31/2023,,0.000000,99.500000,0.000000\r\n91282CBE0,MARKET + BASED NOTE,0.00125,01/15/2024,,0.000000,99.218750,0.000000\r\n912828V80,MARKET + BASED NOTE,0.0225,01/31/2024,,0.000000,99.437500,0.000000\r\n9128285Z9,MARKET + BASED NOTE,0.025,01/31/2024,,0.000000,99.437500,0.000000\r\n91282CDV0,MARKET + BASED NOTE,0.00875,01/31/2024,,0.000000,99.125000,0.000000\r\n912828B66,MARKET + BASED NOTE,0.0275,02/15/2024,,0.000000,99.375000,0.000000\r\n91282CBM2,MARKET + BASED NOTE,0.00125,02/15/2024,,0.000000,98.781250,0.000000\r\n9128286G0,MARKET + BASED NOTE,0.02375,02/29/2024,,0.000000,99.218750,0.000000\r\n912828W48,MARKET + BASED NOTE,0.02125,02/29/2024,,0.000000,99.156250,0.000000\r\n91282CEA5,MARKET + BASED NOTE,0.015,02/29/2024,,0.000000,98.937500,0.000000\r\n91282CBR1,MARKET + BASED NOTE,0.0025,03/15/2024,,0.000000,98.406250,0.000000\r\n912828W71,MARKET + BASED NOTE,0.02125,03/31/2024,,0.000000,98.843750,0.000000\r\n91282CEG2,MARKET + BASED NOTE,0.0225,03/31/2024,,0.000000,98.875000,0.000000\r\n91282CBV2,MARKET + BASED NOTE,0.00375,04/15/2024,,0.000000,98.125000,0.000000\r\n912828X70,MARKET + BASED NOTE,0.02,04/30/2024,,0.000000,98.531250,0.000000\r\n9128286R6,MARKET + BASED NOTE,0.0225,04/30/2024,,0.000000,98.656250,0.000000\r\n91282CEK3,MARKET + BASED NOTE,0.025,04/30/2024,,0.000000,98.750000,0.000000\r\n91282CCC3,MARKET + BASED NOTE,0.0025,05/15/2024,,0.000000,97.562500,0.000000\r\n912828WJ5,MARKET + BASED NOTE,0.025,05/15/2024,,0.000000,98.625000,0.000000\r\n912828XT2,MARKET + BASED NOTE,0.02,05/31/2024,,98.281250,98.250000,0.000000\r\n91282CER8,MARKET + BASED NOTE,0.025,05/31/2024,,98.531250,98.500000,0.000000\r\n91282CCG4,MARKET + BASED NOTE,0.0025,06/15/2024,,97.218750,97.187500,0.000000\r\n91282CEX5,MARKET + BASED NOTE,0.03,06/30/2024,,98.593750,98.562500,0.000000\r\n912828XX3,MARKET + BASED NOTE,0.02,06/30/2024,,98.000000,97.968750,0.000000\r\n9128286Z8,MARKET + BASED NOTE,0.0175,06/30/2024,,97.859375,97.843750,0.000000\r\n91282CCL3,MARKET + BASED NOTE,0.00375,07/15/2024,,96.875000,96.843750,0.000000\r\n91282CFA4,MARKET + BASED NOTE,0.03,07/31/2024,,98.406250,98.375000,0.000000\r\n9128282N9,MARKET + BASED NOTE,0.02125,07/31/2024,,97.828125,97.781250,0.000000\r\n912828Y87,MARKET + BASED NOTE,0.0175,07/31/2024,,97.578125,97.562500,0.000000\r\n912828D56,MARKET + BASED NOTE,0.02375,08/15/2024,,97.890625,97.875000,0.000000\r\n91282CCT6,MARKET + BASED NOTE,0.00375,08/15/2024,,96.468750,96.437500,0.000000\r\n91282CFG1,MARKET + BASED NOTE,0.0325,08/31/2024,,98.421875,98.406250,0.000000\r\n9128282U3,MARKET + BASED NOTE,0.01875,08/31/2024,,97.390625,97.375000,0.000000\r\n912828YE4,MARKET + BASED NOTE,0.0125,08/31/2024,,96.921875,96.906250,0.000000\r\n91282CCX7,MARKET + BASED NOTE,0.00375,09/15/2024,,96.093750,96.062500,0.000000\r\n91282CFN6,MARKET + BASED NOTE,0.0425,09/30/2024,,99.109375,99.093750,0.000000\r\n912828YH7,MARKET + BASED NOTE,0.015,09/30/2024,,96.843750,96.812500,0.000000\r\n9128282Y5,MARKET + BASED NOTE,0.02125,09/30/2024,,97.359375,97.343750,0.000000\r\n91282CDB4,MARKET + BASED NOTE,0.00625,10/15/2024,,95.937500,95.906250,0.000000\r\n91282CFQ9,MARKET + BASED NOTE,0.04375,10/31/2024,,99.171875,99.156250,0.000000\r\n9128283D0,MARKET + BASED NOTE,0.0225,10/31/2024,,97.250000,97.218750,0.000000\r\n912828YM6,MARKET + BASED NOTE,0.015,10/31/2024,,96.562500,96.531250,0.000000\r\n912828G38,MARKET + BASED NOTE,0.0225,11/15/2024,,97.125000,97.093750,0.000000\r\n91282CDH1,MARKET + BASED NOTE,0.0075,11/15/2024,,95.718750,95.687500,0.000000\r\n91282CFX4,MARKET + BASED NOTE,0.045,11/30/2024,,99.218750,99.187500,0.000000\r\n9128283J7,MARKET + BASED NOTE,0.02125,11/30/2024,,96.890625,96.875000,0.000000\r\n912828YV6,MARKET + BASED NOTE,0.015,11/30/2024,,96.281250,96.250000,0.000000\r\n91282CDN8,MARKET + BASED NOTE,0.01,12/15/2024,,95.656250,95.625000,0.000000\r\n91282CGD7,MARKET + BASED NOTE,0.0425,12/31/2024,,98.953125,98.937500,0.000000\r\n912828YY0,MARKET + BASED NOTE,0.0175,12/31/2024,,96.296875,96.281250,0.000000\r\n9128283P3,MARKET + BASED NOTE,0.0225,12/31/2024,,96.843750,96.812500,0.000000\r\n91282CDS7,MARKET + BASED NOTE,0.01125,01/15/2025,,95.500000,95.468750,0.000000\r\n91282CGG0,MARKET + BASED NOTE,0.04125,01/31/2025,,98.781250,98.750000,0.000000\r\n9128283V0,MARKET + BASED NOTE,0.025,01/31/2025,,96.937500,96.906250,0.000000\r\n912828Z52,MARKET + BASED NOTE,0.01375,01/31/2025,,95.656250,95.625000,0.000000\r\n912828J27,MARKET + BASED NOTE,0.02,02/15/2025,,96.250000,96.218750,0.000000\r\n91282CDZ1,MARKET + BASED NOTE,0.015,02/15/2025,,95.656250,95.625000,0.000000\r\n91282CGN5,MARKET + BASED NOTE,0.04625,02/28/2025,,99.343750,99.312500,0.000000\r\n9128283Z1,MARKET + BASED NOTE,0.0275,02/28/2025,,97.062500,97.031250,0.000000\r\n912828ZC7,MARKET + BASED NOTE,0.01125,02/28/2025,,95.093750,95.062500,0.000000\r\n91282CED9,MARKET + BASED NOTE,0.0175,03/15/2025,,95.750000,95.718750,0.000000\r\n91282CGU9,MARKET + BASED NOTE,0.03875,03/31/2025,,98.390625,98.375000,0.000000\r\n912828ZF0,MARKET + BASED NOTE,0.005,03/31/2025,,94.015625,94.000000,0.000000\r\n9128284F4,MARKET + BASED NOTE,0.02625,03/31/2025,,96.781250,96.750000,0.000000\r\n91282CEH0,MARKET + BASED NOTE,0.02625,04/15/2025,,96.718750,96.687500,0.000000\r\n91282CGX3,MARKET + BASED NOTE,0.03875,04/30/2025,,98.359375,98.343750,0.000000\r\n9128284M9,MARKET + BASED NOTE,0.02875,04/30/2025,,96.968750,96.937500,0.000000\r\n912828ZL7,MARKET + BASED NOTE,0.00375,04/30/2025,,93.531250,93.500000,0.000000\r\n912828XB1,MARKET + BASED NOTE,0.02125,05/15/2025,,95.875000,95.843750,0.000000\r\n91282CEQ0,MARKET + BASED NOTE,0.0275,05/15/2025,,96.750000,96.718750,0.000000\r\n91282CHD6,MARKET + BASED NOTE,0.0425,05/31/2025,,98.859375,98.843750,0.000000\r\n912828ZT0,MARKET + BASED NOTE,0.0025,05/31/2025,,93.046875,93.031250,0.000000\r\n9128284R8,MARKET + BASED NOTE,0.02875,05/31/2025,,96.906250,96.875000,0.000000\r\n91282CEU1,MARKET + BASED NOTE,0.02875,06/15/2025,,96.796875,96.781250,0.000000\r\n91282CHL8,MARKET + BASED NOTE,0.04625,06/30/2025,,99.421875,99.406250,0.000000\r\n912828XZ8,MARKET + BASED NOTE,0.0275,06/30/2025,,96.609375,96.593750,0.000000\r\n912828ZW3,MARKET + BASED NOTE,0.0025,06/30/2025,,92.734375,92.718750,0.000000\r\n91282CEY3,MARKET + BASED NOTE,0.03,07/15/2025,,96.906250,96.875000,0.000000\r\n91282CHN4,MARKET + BASED NOTE,0.0475,07/31/2025,,99.640625,99.625000,0.000000\r\n91282CAB7,MARKET + BASED NOTE,0.0025,07/31/2025,,92.437500,92.406250,0.000000\r\n912828Y79,MARKET + BASED NOTE,0.02875,07/31/2025,,96.656250,96.625000,0.000000\r\n912828K74,MARKET + BASED NOTE,0.02,08/15/2025,,95.156250,95.125000,0.000000\r\n91282CFE6,MARKET + BASED NOTE,0.03125,08/15/2025,,97.000000,96.968750,0.000000\r\n91282CHV6,MARKET + BASED NOTE,0.05,08/31/2025,,100.078125,100.062500,0.000000\r\n9128284Z0,MARKET + BASED NOTE,0.0275,08/31/2025,,96.312500,96.281250,0.000000\r\n91282CAJ0,MARKET + BASED NOTE,0.0025,08/31/2025,,92.125000,92.093750,0.000000\r\n91282CFK2,MARKET + BASED NOTE,0.035,09/15/2025,,97.546875,97.531250,0.000000\r\n91282CJB8,MARKET + BASED NOTE,0.05,09/30/2025,,100.156250,100.156250,0.000000\r\n91282CAM3,MARKET + BASED NOTE,0.0025,09/30/2025,,91.875000,91.843750,0.000000\r\n9128285C0,MARKET + BASED NOTE,0.03,09/30/2025,,96.656250,96.625000,0.000000\r\n91282CFP1,MARKET + BASED NOTE,0.0425,10/15/2025,,98.859375,98.843750,0.000000\r\n91282CJE2,MARKET + BASED NOTE,0.05,10/31/2025,,100.250000,100.250000,0.000000\r\n9128285J5,MARKET + BASED NOTE,0.03,10/31/2025,,96.562500,96.531250,0.000000\r\n91282CAT8,MARKET + BASED NOTE,0.0025,10/31/2025,,91.546875,91.531250,0.000000\r\n912828M56,MARKET + BASED NOTE,0.0225,11/15/2025,,95.125000,95.093750,0.000000\r\n91282CFW6,MARKET + BASED NOTE,0.045,11/15/2025,,99.328125,99.312500,0.000000\r\n9128285N6,MARKET + BASED NOTE,0.02875,11/30/2025,,96.250000,96.218750,0.000000\r\n91282CAZ4,MARKET + BASED NOTE,0.00375,11/30/2025,,91.500000,91.468750,0.000000\r\n91282CGA3,MARKET + BASED NOTE,0.04,12/15/2025,,98.390625,98.375000,0.000000\r\n91282CBC4,MARKET + BASED NOTE,0.00375,12/31/2025,,91.312500,91.281250,0.000000\r\n9128285T3,MARKET + BASED NOTE,0.02625,12/31/2025,,95.687500,95.656250,0.000000\r\n91282CGE5,MARKET + BASED NOTE,0.03875,01/15/2026,,98.171875,98.156250,0.000000\r\n9128286A3,MARKET + BASED NOTE,0.02625,01/31/2026,,95.593750,95.562500,0.000000\r\n91282CBH3,MARKET + BASED NOTE,0.00375,01/31/2026,,90.968750,90.937500,0.000000\r\n912828P46,MARKET + BASED NOTE,0.01625,02/15/2026,,93.468750,93.437500,0.000000\r\n91282CGL9,MARKET + BASED NOTE,0.04,02/15/2026,,98.421875,98.406250,0.000000\r\n9128286F2,MARKET + BASED NOTE,0.025,02/28/2026,,95.218750,95.187500,0.000000\r\n91282CBQ3,MARKET + BASED NOTE,0.005,02/28/2026,,90.968750,90.937500,0.000000\r\n91282CGR6,MARKET + BASED NOTE,0.04625,03/15/2026,,99.796875,99.781250,0.000000\r\n91282CBT7,MARKET + BASED NOTE,0.0075,03/31/2026,,91.343750,91.312500,0.000000\r\n9128286L9,MARKET + BASED NOTE,0.0225,03/31/2026,,94.578125,94.531250,0.000000\r\n91282CGV7,MARKET + BASED NOTE,0.0375,04/15/2026,,97.859375,97.843750,0.000000\r\n9128286S4,MARKET + BASED NOTE,0.02375,04/30/2026,,94.750000,94.718750,0.000000\r\n91282CBW0,MARKET + BASED NOTE,0.0075,04/30/2026,,91.031250,91.000000,0.000000\r\n912828R36,MARKET + BASED NOTE,0.01625,05/15/2026,,92.906250,92.875000,0.000000\r\n91282CHB0,MARKET + BASED NOTE,0.03625,05/15/2026,,97.578125,97.562500,0.000000\r\n91282CCF6,MARKET + BASED NOTE,0.0075,05/31/2026,,90.765625,90.750000,0.000000\r\n9128286X3,MARKET + BASED NOTE,0.02125,05/31/2026,,94.000000,93.968750,0.000000\r\n91282CHH7,MARKET + BASED NOTE,0.04125,06/15/2026,,98.703125,98.687500,0.000000\r\n91282CCJ8,MARKET + BASED NOTE,0.00875,06/30/2026,,90.921875,90.906250,0.000000\r\n9128287B0,MARKET + BASED NOTE,0.01875,06/30/2026,,93.312500,93.281250,0.000000\r\n91282CHM6,MARKET + BASED NOTE,0.045,07/15/2026,,99.640625,99.625000,0.000000\r\n91282CCP4,MARKET + BASED NOTE,0.00625,07/31/2026,,89.968750,89.937500,0.000000\r\n912828Y95,MARKET + BASED NOTE,0.01875,07/31/2026,,93.062500,93.031250,0.000000\r\n9128282A7,MARKET + BASED NOTE,0.015,08/15/2026,,92.031250,92.000000,0.000000\r\n91282CHU8,MARKET + BASED NOTE,0.04375,08/15/2026,,99.328125,99.312500,0.000000\r\n91282CCW9,MARKET + BASED NOTE,0.0075,08/31/2026,,90.046875,90.031250,0.000000\r\n912828YD6,MARKET + BASED NOTE,0.01375,08/31/2026,,91.656250,91.625000,0.000000\r\n91282CHY0,MARKET + BASED NOTE,0.04625,09/15/2026,,100.031250,100.031250,0.000000\r\n91282CCZ2,MARKET + BASED NOTE,0.00875,09/30/2026,,90.234375,90.218750,0.000000\r\n912828YG9,MARKET + BASED NOTE,0.01625,09/30/2026,,92.187500,92.156250,0.000000\r\n91282CJC6,MARKET + BASED NOTE,0.04625,10/15/2026,,100.062500,100.062500,0.000000\r\n91282CDG3,MARKET + BASED NOTE,0.01125,10/31/2026,,90.593750,90.562500,0.000000\r\n912828YQ7,MARKET + BASED NOTE,0.01625,10/31/2026,,91.906250,91.875000,0.000000\r\n912828U24,MARKET + BASED NOTE,0.02,11/15/2026,,92.859375,92.843750,0.000000\r\n91282CJK8,MARKET + BASED NOTE,0.04625,11/15/2026,,100.093750,100.093750,0.000000\r\n91282CDK4,MARKET + BASED NOTE,0.0125,11/30/2026,,90.703125,90.687500,0.000000\r\n912828YU8,MARKET + BASED NOTE,0.01625,11/30/2026,,91.750000,91.718750,0.000000\r\n912828YX2,MARKET + BASED NOTE,0.0175,12/31/2026,,91.968750,91.937500,0.000000\r\n91282CDQ1,MARKET + BASED NOTE,0.0125,12/31/2026,,90.593750,90.562500,0.000000\r\n912828Z78,MARKET + BASED NOTE,0.015,01/31/2027,,91.046875,91.031250,0.000000\r\n912828V98,MARKET + BASED NOTE,0.0225,02/15/2027,,93.187500,93.156250,0.000000\r\n912828ZB9,MARKET + BASED NOTE,0.01125,02/28/2027,,89.781250,89.750000,0.000000\r\n91282CEC1,MARKET + BASED NOTE,0.01875,02/28/2027,,91.984375,91.968750,0.000000\r\n91282CEF4,MARKET + BASED NOTE,0.025,03/31/2027,,93.796875,93.781250,0.000000\r\n912828ZE3,MARKET + BASED NOTE,0.00625,03/31/2027,,87.968750,87.937500,0.000000\r\n912828ZN3,MARKET + BASED NOTE,0.005,04/30/2027,,87.312500,87.281250,0.000000\r\n91282CEN7,MARKET + BASED NOTE,0.0275,04/30/2027,,94.421875,94.406250,0.000000\r\n912828X88,MARKET + BASED NOTE,0.02375,05/15/2027,,93.140625,93.093750,0.000000\r\n912828ZS2,MARKET + BASED NOTE,0.005,05/31/2027,,87.062500,87.031250,0.000000\r\n91282CET4,MARKET + BASED NOTE,0.02625,05/31/2027,,93.890625,93.875000,0.000000\r\n91282CEW7,MARKET + BASED NOTE,0.0325,06/30/2027,,95.890625,95.875000,0.000000\r\n912828ZV5,MARKET + BASED NOTE,0.005,06/30/2027,,86.812500,86.781250,0.000000\r\n91282CAD3,MARKET + BASED NOTE,0.00375,07/31/2027,,86.125000,86.093750,0.000000\r\n91282CFB2,MARKET + BASED NOTE,0.0275,07/31/2027,,94.109375,94.093750,0.000000\r\n9128282R0,MARKET + BASED NOTE,0.0225,08/15/2027,,92.375000,92.343750,0.000000\r\n91282CAH4,MARKET + BASED NOTE,0.005,08/31/2027,,86.265625,86.250000,0.000000\r\n91282CFH9,MARKET + BASED NOTE,0.03125,08/31/2027,,95.296875,95.281250,0.000000\r\n91282CFM8,MARKET + BASED NOTE,0.04125,09/30/2027,,98.734375,98.718750,0.000000\r\n91282CAL5,MARKET + BASED NOTE,0.00375,09/30/2027,,85.578125,85.562500,0.000000\r\n91282CAU5,MARKET + BASED NOTE,0.005,10/31/2027,,85.765625,85.750000,0.000000\r\n91282CFU0,MARKET + BASED NOTE,0.04125,10/31/2027,,98.734375,98.718750,0.000000\r\n9128283F5,MARKET + BASED NOTE,0.0225,11/15/2027,,91.937500,91.906250,0.000000\r\n91282CAY7,MARKET + BASED NOTE,0.00625,11/30/2027,,85.968750,85.937500,0.000000\r\n91282CFZ9,MARKET + BASED NOTE,0.03875,11/30/2027,,97.828125,97.812500,0.000000\r\n91282CGC9,MARKET + BASED NOTE,0.03875,12/31/2027,,97.812500,97.781250,0.000000\r\n91282CBB6,MARKET + BASED NOTE,0.00625,12/31/2027,,85.734375,85.718750,0.000000\r\n91282CBJ9,MARKET + BASED NOTE,0.0075,01/31/2028,,85.968750,85.937500,0.000000\r\n91282CGH8,MARKET + BASED NOTE,0.035,01/31/2028,,96.390625,96.375000,0.000000\r\n9128283W8,MARKET + BASED NOTE,0.0275,02/15/2028,,93.453125,93.406250,0.000000\r\n91282CBP5,MARKET + BASED NOTE,0.01125,02/29/2028,,87.171875,87.156250,0.000000\r\n91282CGP0,MARKET + BASED NOTE,0.04,02/29/2028,,98.265625,98.250000,0.000000\r\n91282CGT2,MARKET + BASED NOTE,0.03625,03/31/2028,,96.796875,96.781250,0.000000\r\n91282CBS9,MARKET + BASED NOTE,0.0125,03/31/2028,,87.421875,87.406250,0.000000\r\n91282CBZ3,MARKET + BASED NOTE,0.0125,04/30/2028,,87.234375,87.218750,0.000000\r\n91282CHA2,MARKET + BASED NOTE,0.035,04/30/2028,,96.296875,96.281250,0.000000\r\n9128284N7,MARKET + BASED NOTE,0.02875,05/15/2028,,93.656250,93.625000,0.000000\r\n91282CHE4,MARKET + BASED NOTE,0.03625,05/31/2028,,96.796875,96.781250,0.000000\r\n91282CCE9,MARKET + BASED NOTE,0.0125,05/31/2028,,87.031250,87.000000,0.000000\r\n91282CCH2,MARKET + BASED NOTE,0.0125,06/30/2028,,86.828125,86.812500,0.000000\r\n91282CHK0,MARKET + BASED NOTE,0.04,06/30/2028,,98.265625,98.250000,0.000000\r\n91282CHQ7,MARKET + BASED NOTE,0.04125,07/31/2028,,98.796875,98.781250,0.000000\r\n91282CCR0,MARKET + BASED NOTE,0.01,07/31/2028,,85.562500,85.531250,0.000000\r\n9128284V9,MARKET + BASED NOTE,0.02875,08/15/2028,,93.375000,93.343750,0.000000\r\n91282CCV1,MARKET + BASED NOTE,0.01125,08/31/2028,,85.890625,85.875000,0.000000\r\n91282CHX2,MARKET + BASED NOTE,0.04375,08/31/2028,,99.890625,99.875000,0.000000\r\n91282CJA0,MARKET + BASED NOTE,0.04625,09/30/2028,,100.921875,100.906250,0.000000\r\n91282CCY5,MARKET + BASED NOTE,0.0125,09/30/2028,,86.218750,86.187500,0.000000\r\n91282CDF5,MARKET + BASED NOTE,0.01375,10/31/2028,,86.562500,86.531250,0.000000\r\n91282CJF9,MARKET + BASED NOTE,0.04875,10/31/2028,,102.078125,102.062500,0.000000\r\n9128285M8,MARKET + BASED NOTE,0.03125,11/15/2028,,94.187500,94.156250,0.000000\r\n91282CDL2,MARKET + BASED NOTE,0.015,11/30/2028,,86.906250,86.875000,0.000000\r\n91282CDP3,MARKET + BASED NOTE,0.01375,12/31/2028,,86.125000,86.093750,0.000000\r\n91282CDW8,MARKET + BASED NOTE,0.0175,01/31/2029,,87.640625,87.625000,0.000000\r\n9128286B1,MARKET + BASED NOTE,0.02625,02/15/2029,,91.578125,91.562500,0.000000\r\n91282CEB3,MARKET + BASED NOTE,0.01875,02/28/2029,,88.062500,88.031250,0.000000\r\n91282CEE7,MARKET + BASED NOTE,0.02375,03/31/2029,,90.218750,90.187500,0.000000\r\n91282CEM9,MARKET + BASED NOTE,0.02875,04/30/2029,,92.500000,92.468750,0.000000\r\n9128286T2,MARKET + BASED NOTE,0.02375,05/15/2029,,90.031250,90.000000,0.000000\r\n91282CES6,MARKET + BASED NOTE,0.0275,05/31/2029,,91.765625,91.750000,0.000000\r\n91282CEV9,MARKET + BASED NOTE,0.0325,06/30/2029,,94.078125,94.062500,0.000000\r\n91282CFC0,MARKET + BASED NOTE,0.02625,07/31/2029,,90.921875,90.906250,0.000000\r\n912828YB0,MARKET + BASED NOTE,0.01625,08/15/2029,,86.140625,86.093750,0.000000\r\n91282CFJ5,MARKET + BASED NOTE,0.03125,08/31/2029,,93.296875,93.281250,0.000000\r\n91282CFL0,MARKET + BASED NOTE,0.03875,09/30/2029,,97.015625,97.000000,0.000000\r\n91282CFT3,MARKET + BASED NOTE,0.04,10/31/2029,,97.640625,97.625000,0.000000\r\n912828YS3,MARKET + BASED NOTE,0.0175,11/15/2029,,86.328125,86.281250,0.000000\r\n91282CFY2,MARKET + BASED NOTE,0.03875,11/30/2029,,96.953125,96.937500,0.000000\r\n91282CGB1,MARKET + BASED NOTE,0.03875,12/31/2029,,96.921875,96.906250,0.000000\r\n91282CGJ4,MARKET + BASED NOTE,0.035,01/31/2030,,94.890625,94.875000,0.000000\r\n912828Z94,MARKET + BASED NOTE,0.015,02/15/2030,,84.218750,84.187500,0.000000\r\n91282CGQ8,MARKET + BASED NOTE,0.04,02/28/2030,,97.546875,97.531250,0.000000\r\n91282CGS4,MARKET + BASED NOTE,0.03625,03/31/2030,,95.468750,95.437500,0.000000\r\n91282CGZ8,MARKET + BASED NOTE,0.035,04/30/2030,,94.734375,94.718750,0.000000\r\n912828ZQ6,MARKET + BASED NOTE,0.00625,05/15/2030,,78.734375,78.687500,0.000000\r\n91282CHF1,MARKET + BASED NOTE,0.0375,05/31/2030,,96.093750,96.062500,0.000000\r\n91282CHJ3,MARKET + BASED NOTE,0.0375,06/30/2030,,96.046875,96.031250,0.000000\r\n91282CHR5,MARKET + BASED NOTE,0.04,07/31/2030,,97.453125,97.437500,0.000000\r\n91282CAE1,MARKET + BASED NOTE,0.00625,08/15/2030,,78.093750,78.031250,0.000000\r\n91282CHW4,MARKET + BASED NOTE,0.04125,08/31/2030,,98.140625,98.125000,0.000000\r\n91282CHZ7,MARKET + BASED NOTE,0.04625,09/30/2030,,101.140625,101.125000,0.000000\r\n91282CJG7,MARKET + BASED NOTE,0.04875,10/31/2030,,102.640625,102.625000,0.000000\r\n91282CAV3,MARKET + BASED NOTE,0.00875,11/15/2030,,79.140625,79.093750,0.000000\r\n91282CBL4,MARKET + BASED NOTE,0.01125,02/15/2031,,80.218750,80.187500,0.000000\r\n91282CCB5,MARKET + BASED NOTE,0.01625,05/15/2031,,82.468750,82.437500,0.000000\r\n91282CCS8,MARKET + BASED NOTE,0.0125,08/15/2031,,79.515625,79.500000,0.000000\r\n91282CDJ7,MARKET + BASED NOTE,0.01375,11/15/2031,,79.750000,79.718750,0.000000\r\n91282CDY4,MARKET + BASED NOTE,0.01875,02/15/2032,,82.562500,82.531250,0.000000\r\n91282CEP2,MARKET + BASED NOTE,0.02875,05/15/2032,,89.078125,89.062500,0.000000\r\n91282CFF3,MARKET + BASED NOTE,0.0275,08/15/2032,,87.921875,87.906250,0.000000\r\n91282CFV8,MARKET + BASED NOTE,0.04125,11/15/2032,,97.750000,97.718750,0.000000\r\n91282CGM7,MARKET + BASED NOTE,0.035,02/15/2033,,93.046875,93.031250,0.000000\r\n91282CHC8,MARKET + BASED NOTE,0.03375,05/15/2033,,91.984375,91.968750,0.000000\r\n91282CHT1,MARKET + BASED NOTE,0.03875,08/15/2033,,95.765625,95.750000,0.000000\r\n91282CJJ1,MARKET + BASED NOTE,0.045,11/15/2033,,100.812500,100.812500,0.000000\r\n912810ES3,MARKET + BASED BOND,0.075,11/15/2024,,102.421875,102.250000,0.000000\r\n912810ET1,MARKET + BASED BOND,0.07625,02/15/2025,,103.250000,103.062500,0.000000\r\n912810EV6,MARKET + BASED BOND,0.06875,08/15/2025,,103.156250,102.968750,0.000000\r\n912810EW4,MARKET + BASED BOND,0.06,02/15/2026,,102.515625,102.250000,0.000000\r\n912810EX2,MARKET + BASED BOND,0.0675,08/15/2026,,105.328125,105.093750,0.000000\r\n912810EY0,MARKET + BASED BOND,0.065,11/15/2026,,105.234375,105.093750,0.000000\r\n912810EZ7,MARKET + BASED BOND,0.06625,02/15/2027,,106.187500,106.031250,0.000000\r\n912810FA1,MARKET + BASED BOND,0.06375,08/15/2027,,106.296875,106.125000,0.000000\r\n912810FB9,MARKET + BASED BOND,0.06125,11/15/2027,,105.984375,105.875000,0.000000\r\n912810FE3,MARKET + BASED BOND,0.055,08/15/2028,,104.546875,104.437500,0.000000\r\n912810FF0,MARKET + BASED BOND,0.0525,11/15/2028,,103.609375,103.468750,0.000000\r\n912810FG8,MARKET + BASED BOND,0.0525,02/15/2029,,103.625000,103.437500,0.000000\r\n912810FJ2,MARKET + BASED BOND,0.06125,08/15/2029,,108.328125,108.218750,0.000000\r\n912810FM5,MARKET + BASED BOND,0.0625,05/15/2030,,110.093750,109.968750,0.000000\r\n912810FP8,MARKET + BASED BOND,0.05375,02/15/2031,,106.093750,105.781250,0.000000\r\n912810FT0,MARKET + BASED BOND,0.045,02/15/2036,,101.234375,101.125000,0.000000\r\n912810PT9,MARKET + BASED BOND,0.0475,02/15/2037,,103.421875,103.281250,0.000000\r\n912810PU6,MARKET + BASED BOND,0.05,05/15/2037,,105.593750,105.468750,0.000000\r\n912810PW2,MARKET + BASED BOND,0.04375,02/15/2038,,98.593750,98.468750,0.000000\r\n912810PX0,MARKET + BASED BOND,0.045,05/15/2038,,99.609375,99.468750,0.000000\r\n912810QA9,MARKET + BASED BOND,0.035,02/15/2039,,88.078125,87.937500,0.000000\r\n912810QB7,MARKET + BASED BOND,0.0425,05/15/2039,,95.968750,95.875000,0.000000\r\n912810QC5,MARKET + BASED BOND,0.045,08/15/2039,,98.562500,98.500000,0.000000\r\n912810QD3,MARKET + BASED BOND,0.04375,11/15/2039,,96.984375,96.875000,0.000000\r\n912810QE1,MARKET + BASED BOND,0.04625,02/15/2040,,99.718750,99.625000,0.000000\r\n912810QH4,MARKET + BASED BOND,0.04375,05/15/2040,,96.609375,96.531250,0.000000\r\n912810SR0,MARKET + BASED BOND,0.01125,05/15/2040,,58.875000,58.812500,0.000000\r\n912810QK7,MARKET + BASED BOND,0.03875,08/15/2040,,90.500000,90.437500,0.000000\r\n912810SQ2,MARKET + BASED BOND,0.01125,08/15/2040,,58.343750,58.281250,0.000000\r\n912810QL5,MARKET + BASED BOND,0.0425,11/15/2040,,94.781250,94.687500,0.000000\r\n912810ST6,MARKET + BASED BOND,0.01375,11/15/2040,,60.796875,60.718750,0.000000\r\n912810SW9,MARKET + BASED BOND,0.01875,02/15/2041,,66.156250,66.093750,0.000000\r\n912810QN1,MARKET + BASED BOND,0.0475,02/15/2041,,100.687500,100.625000,0.000000\r\n912810QQ4,MARKET + BASED BOND,0.04375,05/15/2041,,96.031250,95.937500,0.000000\r\n912810SY5,MARKET + BASED BOND,0.0225,05/15/2041,,70.312500,70.250000,0.000000\r\n912810TA6,MARKET + BASED BOND,0.0175,08/15/2041,,63.953125,63.906250,0.000000\r\n912810QS0,MARKET + BASED BOND,0.0375,08/15/2041,,88.390625,88.312500,0.000000\r\n912810QT8,MARKET + BASED BOND,0.03125,11/15/2041,,80.546875,80.468750,0.000000\r\n912810TC2,MARKET + BASED BOND,0.02,11/15/2041,,66.593750,66.531250,0.000000\r\n912810TF5,MARKET + BASED BOND,0.02375,02/15/2042,,70.796875,70.750000,0.000000\r\n912810QU5,MARKET + BASED BOND,0.03125,02/15/2042,,80.296875,80.218750,0.000000\r\n912810QW1,MARKET + BASED BOND,0.03,05/15/2042,,78.406250,78.343750,0.000000\r\n912810TH1,MARKET + BASED BOND,0.0325,05/15/2042,,81.359375,81.312500,0.000000\r\n912810TK4,MARKET + BASED BOND,0.03375,08/15/2042,,82.671875,82.625000,0.000000\r\n912810QX9,MARKET + BASED BOND,0.0275,08/15/2042,,75.078125,75.000000,0.000000\r\n912810QY7,MARKET + BASED BOND,0.0275,11/15/2042,,74.812500,74.750000,0.000000\r\n912810TM0,MARKET + BASED BOND,0.04,11/15/2042,,90.421875,90.375000,0.000000\r\n912810TQ1,MARKET + BASED BOND,0.03875,02/15/2043,,88.671875,88.625000,0.000000\r\n912810QZ4,MARKET + BASED BOND,0.03125,02/15/2043,,79.234375,79.156250,0.000000\r\n912810RB6,MARKET + BASED BOND,0.02875,05/15/2043,,75.890625,75.812500,0.000000\r\n912810TS7,MARKET + BASED BOND,0.03875,05/15/2043,,88.593750,88.562500,0.000000\r\n912810TU2,MARKET + BASED BOND,0.04375,08/15/2043,,94.984375,94.937500,0.000000\r\n912810RC4,MARKET + BASED BOND,0.03625,08/15/2043,,85.328125,85.250000,0.000000\r\n912810RD2,MARKET + BASED BOND,0.0375,11/15/2043,,86.765625,86.687500,0.000000\r\n912810RE0,MARKET + BASED BOND,0.03625,02/15/2044,,85.031250,84.937500,0.000000\r\n912810RG5,MARKET + BASED BOND,0.03375,05/15/2044,,81.609375,81.531250,0.000000\r\n912810RH3,MARKET + BASED BOND,0.03125,08/15/2044,,78.156250,78.093750,0.000000\r\n912810RJ9,MARKET + BASED BOND,0.03,11/15/2044,,76.343750,76.281250,0.000000\r\n912810RK6,MARKET + BASED BOND,0.025,02/15/2045,,69.562500,69.500000,0.000000\r\n912810RM2,MARKET + BASED BOND,0.03,05/15/2045,,76.015625,75.937500,0.000000\r\n912810RN0,MARKET + BASED BOND,0.02875,08/15/2045,,74.156250,74.093750,0.000000\r\n912810RP5,MARKET + BASED BOND,0.03,11/15/2045,,75.687500,75.625000,0.000000\r\n912810RQ3,MARKET + BASED BOND,0.025,02/15/2046,,68.671875,68.593750,0.000000\r\n912810RS9,MARKET + BASED BOND,0.025,05/15/2046,,68.500000,68.437500,0.000000\r\n912810RT7,MARKET + BASED BOND,0.0225,08/15/2046,,64.906250,64.843750,0.000000\r\n912810RU4,MARKET + BASED BOND,0.02875,11/15/2046,,73.406250,73.343750,0.000000\r\n912810RV2,MARKET + BASED BOND,0.03,02/15/2047,,74.968750,74.906250,0.000000\r\n912810RX8,MARKET + BASED BOND,0.03,05/15/2047,,74.875000,74.812500,0.000000\r\n912810RY6,MARKET + BASED BOND,0.0275,08/15/2047,,71.250000,71.187500,0.000000\r\n912810RZ3,MARKET + BASED BOND,0.0275,11/15/2047,,71.218750,71.156250,0.000000\r\n912810SA7,MARKET + BASED BOND,0.03,02/15/2048,,74.609375,74.562500,0.000000\r\n912810SC3,MARKET + BASED BOND,0.03125,05/15/2048,,76.359375,76.312500,0.000000\r\n912810SD1,MARKET + BASED BOND,0.03,08/15/2048,,74.515625,74.468750,0.000000\r\n912810SE9,MARKET + BASED BOND,0.03375,11/15/2048,,79.921875,79.875000,0.000000\r\n912810SF6,MARKET + BASED BOND,0.03,02/15/2049,,74.484375,74.437500,0.000000\r\n912810SH2,MARKET + BASED BOND,0.02875,05/15/2049,,72.734375,72.687500,0.000000\r\n912810SJ8,MARKET + BASED BOND,0.0225,08/15/2049,,63.578125,63.531250,0.000000\r\n912810SK5,MARKET + BASED BOND,0.02375,11/15/2049,,65.390625,65.343750,0.000000\r\n912810SL3,MARKET + BASED BOND,0.02,02/15/2050,,59.781250,59.718750,0.000000\r\n912810SN9,MARKET + BASED BOND,0.0125,05/15/2050,,48.515625,48.468750,0.000000\r\n912810SP4,MARKET + BASED BOND,0.01375,08/15/2050,,50.203125,50.156250,0.000000\r\n912810SS8,MARKET + BASED BOND,0.01625,11/15/2050,,53.843750,53.781250,0.000000\r\n912810SU3,MARKET + BASED BOND,0.01875,02/15/2051,,57.546875,57.500000,0.000000\r\n912810SX7,MARKET + BASED BOND,0.02375,05/15/2051,,65.031250,64.968750,0.000000\r\n912810SZ2,MARKET + BASED BOND,0.02,08/15/2051,,59.234375,59.187500,0.000000\r\n912810TB4,MARKET + BASED BOND,0.01875,11/15/2051,,57.265625,57.218750,0.000000\r\n912810TD0,MARKET + BASED BOND,0.0225,02/15/2052,,62.984375,62.937500,0.000000\r\n912810TG3,MARKET + BASED BOND,0.02875,05/15/2052,,72.671875,72.625000,0.000000\r\n912810TJ7,MARKET + BASED BOND,0.03,08/15/2052,,74.640625,74.593750,0.000000\r\n912810TL2,MARKET + BASED BOND,0.04,11/15/2052,,90.562500,90.531250,0.000000\r\n912810TN8,MARKET + BASED BOND,0.03625,02/15/2053,,84.562500,84.531250,0.000000\r\n912810TR9,MARKET + BASED BOND,0.03625,05/15/2053,,84.625000,84.593750,0.000000\r\n912810TT5,MARKET + BASED BOND,0.04125,08/15/2053,,92.656250,92.625000,0.000000\r\n912810TV0,MARKET + BASED BOND,0.0475,11/15/2053,,103.015625,103.000000,0.000000\r\n912828B25,TIPS,0.00625,01/15/2024,,0.000000,99.187500,0.000000\r\n9128286N5,TIPS,0.005,04/15/2024,,0.000000,98.375000,0.000000\r\n912828WU0,TIPS,0.00125,07/15/2024,,97.906250,97.875000,0.000000\r\n912828YL8,TIPS,0.00125,10/15/2024,,97.281250,97.250000,0.000000\r\n912828H45,TIPS,0.0025,01/15/2025,,96.468750,96.437500,0.000000\r\n912810FR4,TIPS,0.02375,01/15/2025,,98.843750,98.812500,0.000000\r\n912828ZJ2,TIPS,0.00125,04/15/2025,,95.718750,95.687500,0.000000\r\n912828XL9,TIPS,0.00375,07/15/2025,,96.125000,96.093750,0.000000\r\n91282CAQ4,TIPS,0.00125,10/15/2025,,95.234375,95.218750,0.000000\r\n912828N71,TIPS,0.00625,01/15/2026,,95.562500,95.531250,0.000000\r\n912810FS2,TIPS,0.02,01/15/2026,,98.375000,98.343750,0.000000\r\n91282CCA7,TIPS,0.00125,04/15/2026,,94.031250,94.000000,0.000000\r\n912828S50,TIPS,0.00125,07/15/2026,,94.062500,94.031250,0.000000\r\n91282CDC2,TIPS,0.00125,10/15/2026,,93.593750,93.562500,0.000000\r\n912828V49,TIPS,0.00375,01/15/2027,,93.640625,93.625000,0.000000\r\n912810PS1,TIPS,0.02375,01/15/2027,,99.640625,99.593750,0.000000\r\n91282CEJ6,TIPS,0.00125,04/15/2027,,92.406250,92.375000,0.000000\r\n9128282L3,TIPS,0.00375,07/15/2027,,93.375000,93.343750,0.000000\r\n91282CFR7,TIPS,0.01625,10/15/2027,,97.546875,97.531250,0.000000\r\n9128283R9,TIPS,0.005,01/15/2028,,92.812500,92.781250,0.000000\r\n912810PV4,TIPS,0.0175,01/15/2028,,97.671875,97.625000,0.000000\r\n912810FD5,TIPS,0.03625,04/15/2028,,105.390625,105.312500,0.000000\r\n91282CGW5,TIPS,0.0125,04/15/2028,,95.578125,95.562500,0.000000\r\n912828Y38,TIPS,0.0075,07/15/2028,,93.687500,93.656250,0.000000\r\n91282CJH5,TIPS,0.02375,10/15/2028,,100.890625,100.875000,0.000000\r\n9128285W6,TIPS,0.00875,01/15/2029,,93.453125,93.406250,0.000000\r\n912810PZ5,TIPS,0.025,01/15/2029,,101.218750,101.156250,0.000000\r\n912810FH6,TIPS,0.03875,04/15/2029,,108.046875,107.968750,0.000000\r\n9128287D6,TIPS,0.0025,07/15/2029,,90.046875,90.000000,0.000000\r\n912828Z37,TIPS,0.00125,01/15/2030,,88.125000,88.093750,0.000000\r\n912828ZZ6,TIPS,0.00125,07/15/2030,,87.687500,87.656250,0.000000\r\n91282CBF7,TIPS,0.00125,01/15/2031,,86.515625,86.468750,0.000000\r\n91282CCM1,TIPS,0.00125,07/15/2031,,86.031250,86.000000,0.000000\r\n91282CDX6,TIPS,0.00125,01/15/2032,,84.875000,84.843750,0.000000\r\n912810FQ6,TIPS,0.03375,04/15/2032,,108.609375,108.500000,0.000000\r\n91282CEZ0,TIPS,0.00625,07/15/2032,,88.187500,88.156250,0.000000\r\n91282CGK1,TIPS,0.01125,01/15/2033,,91.281250,91.250000,0.000000\r\n91282CHP9,TIPS,0.01375,07/15/2033,,93.390625,93.375000,0.000000\r\n912810QF8,TIPS,0.02125,02/15/2040,,98.250000,98.125000,0.000000\r\n912810QP6,TIPS,0.02125,02/15/2041,,98.093750,97.968750,0.000000\r\n912810QV3,TIPS,0.0075,02/15/2042,,76.796875,76.656250,0.000000\r\n912810RA8,TIPS,0.00625,02/15/2043,,73.703125,73.593750,0.000000\r\n912810RF7,TIPS,0.01375,02/15/2044,,84.578125,84.468750,0.000000\r\n912810RL4,TIPS,0.0075,02/15/2045,,73.625000,73.531250,0.000000\r\n912810RR1,TIPS,0.01,02/15/2046,,77.062500,76.968750,0.000000\r\n912810RW0,TIPS,0.00875,02/15/2047,,73.968750,73.875000,0.000000\r\n912810SB5,TIPS,0.01,02/15/2048,,75.687500,75.593750,0.000000\r\n912810SG4,TIPS,0.01,02/15/2049,,75.312500,75.218750,0.000000\r\n912810SM1,TIPS,0.0025,02/15/2050,,60.359375,60.281250,0.000000\r\n912810SV1,TIPS,0.00125,02/15/2051,,57.281250,57.187500,0.000000\r\n912810TE8,TIPS,0.00125,02/15/2052,,56.703125,56.625000,0.000000\r\n912810TP3,TIPS,0.015,02/15/2053,,84.578125,84.531250,0.000000\r\n91282CDU2,MARKET + BASED FRN,0.053993227250000005,01/31/2024,,0.000000,99.983616,0.000000\r\n91282CEL1,MARKET + BASED FRN,0.0533848927,04/30/2024,,99.961746,99.946447,0.000000\r\n91282CFD8,MARKET + BASED FRN,0.05452044785,07/31/2024,,100.021875,99.997949,0.000000\r\n91282CFS5,MARKET + BASED FRN,0.055564752999999995,10/31/2024,,100.093707,100.075171,0.000000\r\n91282CGF2,MARKET + BASED FRN,0.05617308755,01/31/2025,,100.150811,100.115813,0.000000\r\n91282CGY1,MARKET + BASED FRN,0.0558587824,04/30/2025,,100.082128,100.050755,0.000000\r\n91282CHS3,MARKET + BASED FRN,0.05541266845,07/31/2025,,99.937542,99.911133,0.000000\r\n91282CJD4,MARKET + BASED FRN,0.056033175750000004,10/31/2025,,99.970905,99.950046,0.000000\r\n" + headers: + Cache-Control: + - max-age=0 + Connection: + - keep-alive + Content-Disposition: + - attachment; filename="securityprice.csv" + Content-Language: + - en-CA + Content-Type: + - application/csv;charset=ISO-8859-1 + Date: + - Wed, 22 Nov 2023 05:30:36 GMT + Keep-Alive: + - timeout=60 + Pragma: + - public + Referrer-Policy: + - strict-origin + Set-Cookie: + - JSESSIONID=696472CBA12CF27BBDE1553BBE58EE76; Path=/GA-FI/FedInvest; Secure; + HttpOnly + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-XSS-Protection: + - 1; mode=block + status: + code: 200 + message: '' +version: 1 diff --git a/openbb_platform/providers/government_us/tests/test_government_us_fetchers.py b/openbb_platform/providers/government_us/tests/test_government_us_fetchers.py index 38063a1289c..6a03ef74c8c 100644 --- a/openbb_platform/providers/government_us/tests/test_government_us_fetchers.py +++ b/openbb_platform/providers/government_us/tests/test_government_us_fetchers.py @@ -7,6 +7,9 @@ from openbb_core.app.service.user_service import UserService from openbb_government_us.models.treasury_auctions import ( GovernmentUSTreasuryAuctionsFetcher, ) +from openbb_government_us.models.treasury_prices import ( + GovernmentUSTreasuryPricesFetcher, +) test_credentials = UserService().default_user_settings.credentials.model_dump( mode="json" @@ -35,3 +38,13 @@ def test_government_us_treasury_auctions_fetcher(credentials=test_credentials): fetcher = GovernmentUSTreasuryAuctionsFetcher() result = fetcher.test(params, credentials) assert result is None + + +@pytest.mark.record_http +def test_government_us_treasury_prices_fetcher(credentials=test_credentials): + """Test GovernmentUSTreasuryAuctionsFetcher.""" + params = {} + + fetcher = GovernmentUSTreasuryPricesFetcher() + result = fetcher.test(params, credentials) + assert result is None