Skip to content

Commit d4ac4bd

Browse files
Adds support for inflation expectations and futures exchanges endpoints (#963)
1 parent 479b05c commit d4ac4bd

File tree

4 files changed

+119
-0
lines changed

4 files changed

+119
-0
lines changed

massive/rest/economy.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from .models.economy import (
77
FedInflation,
88
TreasuryYield,
9+
FedInflationExpectations,
910
)
1011
from .models.common import Sort, Order
1112
from .models.request import RequestOptionBuilder
@@ -85,3 +86,44 @@ def list_inflation(
8586
deserializer=FedInflation.from_dict,
8687
options=options,
8788
)
89+
90+
def list_inflation_expectations(
91+
self,
92+
date: Optional[Union[str, date]] = None,
93+
date_any_of: Optional[str] = None,
94+
date_gt: Optional[Union[str, date]] = None,
95+
date_gte: Optional[Union[str, date]] = None,
96+
date_lt: Optional[Union[str, date]] = None,
97+
date_lte: Optional[Union[str, date]] = None,
98+
limit: Optional[int] = None,
99+
sort: Optional[Union[str, Sort]] = None,
100+
params: Optional[Dict[str, Any]] = None,
101+
raw: bool = False,
102+
options: Optional[RequestOptionBuilder] = None,
103+
) -> Union[Iterator[FedInflationExpectations], HTTPResponse]:
104+
"""
105+
A table tracking inflation expectations from both market-based and economic model perspectives across different time horizons.
106+
107+
:param date: Calendar date of the observation (YYYY-MM-DD).
108+
:param date_any_of: Filter equal to any of the values. Multiple values can be specified by using a comma separated list.
109+
:param date_gt: Filter greater than the value.
110+
:param date_gte: Filter greater than or equal to the value.
111+
:param date_lt: Filter less than the value.
112+
:param date_lte: Filter less than or equal to the value.
113+
:param limit: Limit the maximum number of results returned. Defaults to '100' if not specified. The maximum allowed limit is '50000'.
114+
:param sort: A comma separated list of sort columns. For each column, append '.asc' or '.desc' to specify the sort direction. The sort column defaults to 'date' if not specified. The sort order defaults to 'asc' if not specified.
115+
:param params: Additional query parameters.
116+
:param raw: Return raw HTTPResponse object if True, else return Iterator[FedInflationExpectations].
117+
:param options: RequestOptionBuilder for additional headers or params.
118+
:return: An iterator of FedInflationExpectations objects or HTTPResponse if raw=True.
119+
"""
120+
url = "/fed/v1/inflation-expectations"
121+
122+
return self._paginate(
123+
path=url,
124+
params=self._get_params(self.list_inflation_expectations, locals()),
125+
deserializer=FedInflationExpectations.from_dict,
126+
raw=raw,
127+
result_key="results",
128+
options=options,
129+
)

massive/rest/futures.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
FuturesSchedule,
1313
FuturesMarketStatus,
1414
FuturesSnapshot,
15+
FuturesExchange,
1516
)
1617
from .models.common import Sort
1718
from .models.request import RequestOptionBuilder
@@ -332,3 +333,24 @@ def get_futures_snapshot(
332333
deserializer=FuturesSnapshot.from_dict,
333334
options=options,
334335
)
336+
337+
def list_futures_exchanges(
338+
self,
339+
limit: Optional[int] = None,
340+
params: Optional[Dict[str, Any]] = None,
341+
raw: bool = False,
342+
options: Optional[RequestOptionBuilder] = None,
343+
) -> Union[Iterator[FuturesExchange], HTTPResponse]:
344+
"""
345+
Endpoint: GET /futures/vX/exchanges
346+
347+
US futures exchanges and trading venues including major derivatives exchanges (CME, CBOT, NYMEX, COMEX) and other futures market infrastructure for commodity, financial, and other derivative contract trading.
348+
"""
349+
url = "/futures/vX/exchanges"
350+
return self._paginate(
351+
path=url,
352+
params=self._get_params(self.list_futures_exchanges, locals()),
353+
raw=raw,
354+
deserializer=FuturesExchange.from_dict,
355+
options=options,
356+
)

massive/rest/models/economy.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,28 @@ def from_dict(d):
6060
pce_core=d.get("pce_core"),
6161
pce_spending=d.get("pce_spending"),
6262
)
63+
64+
65+
@modelclass
66+
class FedInflationExpectations:
67+
date: Optional[str] = None
68+
forward_years_5_to_10: Optional[float] = None
69+
market_10_year: Optional[float] = None
70+
market_5_year: Optional[float] = None
71+
model_10_year: Optional[float] = None
72+
model_1_year: Optional[float] = None
73+
model_30_year: Optional[float] = None
74+
model_5_year: Optional[float] = None
75+
76+
@staticmethod
77+
def from_dict(d):
78+
return FedInflationExpectations(
79+
date=d.get("date"),
80+
forward_years_5_to_10=d.get("forward_years_5_to_10"),
81+
market_10_year=d.get("market_10_year"),
82+
market_5_year=d.get("market_5_year"),
83+
model_10_year=d.get("model_10_year"),
84+
model_1_year=d.get("model_1_year"),
85+
model_30_year=d.get("model_30_year"),
86+
model_5_year=d.get("model_5_year"),
87+
)

massive/rest/models/futures.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,3 +391,33 @@ def from_dict(d):
391391
else None
392392
),
393393
)
394+
395+
396+
@modelclass
397+
class FuturesExchange:
398+
"""
399+
Represents a futures exchange or trading venue.
400+
Corresponds to /futures/vX/exchanges endpoint.
401+
"""
402+
403+
acronym: Optional[str] = None
404+
id: Optional[str] = None
405+
locale: Optional[str] = None
406+
mic: Optional[str] = None
407+
name: Optional[str] = None
408+
operating_mic: Optional[str] = None
409+
type: Optional[str] = None
410+
url: Optional[str] = None
411+
412+
@staticmethod
413+
def from_dict(d):
414+
return FuturesExchange(
415+
acronym=d.get("acronym"),
416+
id=d.get("id"),
417+
locale=d.get("locale"),
418+
mic=d.get("mic"),
419+
name=d.get("name"),
420+
operating_mic=d.get("operating_mic"),
421+
type=d.get("type"),
422+
url=d.get("url"),
423+
)

0 commit comments

Comments
 (0)