diff --git a/massive/rest/economy.py b/massive/rest/economy.py index f92afad5..032791c1 100644 --- a/massive/rest/economy.py +++ b/massive/rest/economy.py @@ -6,6 +6,7 @@ from .models.economy import ( FedInflation, TreasuryYield, + FedInflationExpectations, ) from .models.common import Sort, Order from .models.request import RequestOptionBuilder @@ -85,3 +86,44 @@ def list_inflation( deserializer=FedInflation.from_dict, options=options, ) + + def list_inflation_expectations( + self, + date: Optional[Union[str, date]] = None, + date_any_of: Optional[str] = None, + date_gt: Optional[Union[str, date]] = None, + date_gte: Optional[Union[str, date]] = None, + date_lt: Optional[Union[str, date]] = None, + date_lte: Optional[Union[str, date]] = None, + limit: Optional[int] = None, + sort: Optional[Union[str, Sort]] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[Iterator[FedInflationExpectations], HTTPResponse]: + """ + A table tracking inflation expectations from both market-based and economic model perspectives across different time horizons. + + :param date: Calendar date of the observation (YYYY-MM-DD). + :param date_any_of: Filter equal to any of the values. Multiple values can be specified by using a comma separated list. + :param date_gt: Filter greater than the value. + :param date_gte: Filter greater than or equal to the value. + :param date_lt: Filter less than the value. + :param date_lte: Filter less than or equal to the value. + :param limit: Limit the maximum number of results returned. Defaults to '100' if not specified. The maximum allowed limit is '50000'. + :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. + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return Iterator[FedInflationExpectations]. + :param options: RequestOptionBuilder for additional headers or params. + :return: An iterator of FedInflationExpectations objects or HTTPResponse if raw=True. + """ + url = "/fed/v1/inflation-expectations" + + return self._paginate( + path=url, + params=self._get_params(self.list_inflation_expectations, locals()), + deserializer=FedInflationExpectations.from_dict, + raw=raw, + result_key="results", + options=options, + ) diff --git a/massive/rest/futures.py b/massive/rest/futures.py index c232e1e3..69d82c38 100644 --- a/massive/rest/futures.py +++ b/massive/rest/futures.py @@ -12,6 +12,7 @@ FuturesSchedule, FuturesMarketStatus, FuturesSnapshot, + FuturesExchange, ) from .models.common import Sort from .models.request import RequestOptionBuilder @@ -332,3 +333,24 @@ def get_futures_snapshot( deserializer=FuturesSnapshot.from_dict, options=options, ) + + def list_futures_exchanges( + self, + limit: Optional[int] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[Iterator[FuturesExchange], HTTPResponse]: + """ + Endpoint: GET /futures/vX/exchanges + + 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. + """ + url = "/futures/vX/exchanges" + return self._paginate( + path=url, + params=self._get_params(self.list_futures_exchanges, locals()), + raw=raw, + deserializer=FuturesExchange.from_dict, + options=options, + ) diff --git a/massive/rest/models/economy.py b/massive/rest/models/economy.py index 8793462a..83070e78 100644 --- a/massive/rest/models/economy.py +++ b/massive/rest/models/economy.py @@ -60,3 +60,28 @@ def from_dict(d): pce_core=d.get("pce_core"), pce_spending=d.get("pce_spending"), ) + + +@modelclass +class FedInflationExpectations: + date: Optional[str] = None + forward_years_5_to_10: Optional[float] = None + market_10_year: Optional[float] = None + market_5_year: Optional[float] = None + model_10_year: Optional[float] = None + model_1_year: Optional[float] = None + model_30_year: Optional[float] = None + model_5_year: Optional[float] = None + + @staticmethod + def from_dict(d): + return FedInflationExpectations( + date=d.get("date"), + forward_years_5_to_10=d.get("forward_years_5_to_10"), + market_10_year=d.get("market_10_year"), + market_5_year=d.get("market_5_year"), + model_10_year=d.get("model_10_year"), + model_1_year=d.get("model_1_year"), + model_30_year=d.get("model_30_year"), + model_5_year=d.get("model_5_year"), + ) diff --git a/massive/rest/models/futures.py b/massive/rest/models/futures.py index fdc814f3..b9bd3c0b 100644 --- a/massive/rest/models/futures.py +++ b/massive/rest/models/futures.py @@ -391,3 +391,33 @@ def from_dict(d): else None ), ) + + +@modelclass +class FuturesExchange: + """ + Represents a futures exchange or trading venue. + Corresponds to /futures/vX/exchanges endpoint. + """ + + acronym: Optional[str] = None + id: Optional[str] = None + locale: Optional[str] = None + mic: Optional[str] = None + name: Optional[str] = None + operating_mic: Optional[str] = None + type: Optional[str] = None + url: Optional[str] = None + + @staticmethod + def from_dict(d): + return FuturesExchange( + acronym=d.get("acronym"), + id=d.get("id"), + locale=d.get("locale"), + mic=d.get("mic"), + name=d.get("name"), + operating_mic=d.get("operating_mic"), + type=d.get("type"), + url=d.get("url"), + )