Feature/us-treasury-prices: Adds Treasury Prices to Fixed Income (#5776)

* add treasury prices endpoint to fixed income router

* adds tests

* black

* ruff

* import statements

* standard model imports

* black

* some cleanup

* black

* async router

* make async

* str outpuot

* bytes object not string

* docstring typo

* multi-line f-string

* encoding

* duplicated conditional

* black

---------

Co-authored-by: James Maslek <jmaslek11@gmail.com>
This commit is contained in:
Danglewood
2023-12-06 17:34:15 -08:00
committed by GitHub
parent d951dc0401
commit 18a5c392e8
9 changed files with 752 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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