massive 2.4.0__tar.gz → 2.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. {massive-2.4.0 → massive-2.5.0}/PKG-INFO +1 -1
  2. {massive-2.4.0 → massive-2.5.0}/massive/rest/economy.py +102 -0
  3. massive-2.5.0/massive/rest/models/economy.py +229 -0
  4. {massive-2.4.0 → massive-2.5.0}/pyproject.toml +1 -1
  5. massive-2.4.0/massive/rest/models/economy.py +0 -106
  6. {massive-2.4.0 → massive-2.5.0}/LICENSE +0 -0
  7. {massive-2.4.0 → massive-2.5.0}/massive/__init__.py +0 -0
  8. {massive-2.4.0 → massive-2.5.0}/massive/exceptions.py +0 -0
  9. {massive-2.4.0 → massive-2.5.0}/massive/logging.py +0 -0
  10. {massive-2.4.0 → massive-2.5.0}/massive/modelclass.py +0 -0
  11. {massive-2.4.0 → massive-2.5.0}/massive/rest/__init__.py +0 -0
  12. {massive-2.4.0 → massive-2.5.0}/massive/rest/aggs.py +0 -0
  13. {massive-2.4.0 → massive-2.5.0}/massive/rest/base.py +0 -0
  14. {massive-2.4.0 → massive-2.5.0}/massive/rest/benzinga.py +0 -0
  15. {massive-2.4.0 → massive-2.5.0}/massive/rest/etf_global.py +0 -0
  16. {massive-2.4.0 → massive-2.5.0}/massive/rest/financials.py +0 -0
  17. {massive-2.4.0 → massive-2.5.0}/massive/rest/futures.py +0 -0
  18. {massive-2.4.0 → massive-2.5.0}/massive/rest/indicators.py +0 -0
  19. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/__init__.py +0 -0
  20. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/aggs.py +0 -0
  21. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/benzinga.py +0 -0
  22. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/common.py +0 -0
  23. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/conditions.py +0 -0
  24. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/contracts.py +0 -0
  25. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/dividends.py +0 -0
  26. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/etf_global.py +0 -0
  27. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/exchanges.py +0 -0
  28. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/financials.py +0 -0
  29. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/futures.py +0 -0
  30. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/indicators.py +0 -0
  31. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/markets.py +0 -0
  32. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/quotes.py +0 -0
  33. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/request.py +0 -0
  34. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/snapshot.py +0 -0
  35. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/splits.py +0 -0
  36. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/summaries.py +0 -0
  37. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/tickers.py +0 -0
  38. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/tmx.py +0 -0
  39. {massive-2.4.0 → massive-2.5.0}/massive/rest/models/trades.py +0 -0
  40. {massive-2.4.0 → massive-2.5.0}/massive/rest/quotes.py +0 -0
  41. {massive-2.4.0 → massive-2.5.0}/massive/rest/reference.py +0 -0
  42. {massive-2.4.0 → massive-2.5.0}/massive/rest/snapshot.py +0 -0
  43. {massive-2.4.0 → massive-2.5.0}/massive/rest/summaries.py +0 -0
  44. {massive-2.4.0 → massive-2.5.0}/massive/rest/tmx.py +0 -0
  45. {massive-2.4.0 → massive-2.5.0}/massive/rest/trades.py +0 -0
  46. {massive-2.4.0 → massive-2.5.0}/massive/rest/vX.py +0 -0
  47. {massive-2.4.0 → massive-2.5.0}/massive/websocket/__init__.py +0 -0
  48. {massive-2.4.0 → massive-2.5.0}/massive/websocket/models/__init__.py +0 -0
  49. {massive-2.4.0 → massive-2.5.0}/massive/websocket/models/common.py +0 -0
  50. {massive-2.4.0 → massive-2.5.0}/massive/websocket/models/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: massive
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: Official Massive (formerly Polygon.io) REST and Websocket client.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -8,6 +8,8 @@ from .models.economy import (
8
8
  TreasuryYield,
9
9
  FedInflationExpectations,
10
10
  FedLaborMarket,
11
+ EUMerchantAggregate,
12
+ EUMerchantHierarchy,
11
13
  )
12
14
  from .models.common import Sort, Order
13
15
  from .models.request import RequestOptionBuilder
@@ -168,3 +170,103 @@ class EconomyClient(BaseClient):
168
170
  raw=raw,
169
171
  options=options,
170
172
  )
173
+
174
+ def list_eu_merchant_aggregates(
175
+ self,
176
+ transaction_date: Optional[Union[str, date]] = None,
177
+ transaction_date_gt: Optional[Union[str, date]] = None,
178
+ transaction_date_gte: Optional[Union[str, date]] = None,
179
+ transaction_date_lt: Optional[Union[str, date]] = None,
180
+ transaction_date_lte: Optional[Union[str, date]] = None,
181
+ name: Optional[str] = None,
182
+ name_any_of: Optional[str] = None,
183
+ name_gt: Optional[str] = None,
184
+ name_gte: Optional[str] = None,
185
+ name_lt: Optional[str] = None,
186
+ name_lte: Optional[str] = None,
187
+ user_country: Optional[str] = None,
188
+ user_country_any_of: Optional[str] = None,
189
+ channel: Optional[str] = None,
190
+ channel_any_of: Optional[str] = None,
191
+ consumer_type: Optional[str] = None,
192
+ consumer_type_any_of: Optional[str] = None,
193
+ parent_name: Optional[str] = None,
194
+ parent_name_any_of: Optional[str] = None,
195
+ parent_name_gt: Optional[str] = None,
196
+ parent_name_gte: Optional[str] = None,
197
+ parent_name_lt: Optional[str] = None,
198
+ parent_name_lte: Optional[str] = None,
199
+ limit: Optional[int] = None,
200
+ sort: Optional[Union[str, Sort]] = None,
201
+ params: Optional[Dict[str, Any]] = None,
202
+ raw: bool = False,
203
+ options: Optional[RequestOptionBuilder] = None,
204
+ ) -> Union[Iterator[EUMerchantAggregate], HTTPResponse]:
205
+ """
206
+ Aggregated consumer transactions from European credit card panels (UK, DE, FR, IT, ES, AT).
207
+ Each row represents daily credit card, debit card, or open banking transactions
208
+ (7-day lag from transaction date) at a tagged merchant or payment processor.
209
+
210
+ Includes ticker (Bloomberg) and industry mapping for ~250 US public companies.
211
+ User counts provided across 8- and 28-day windows for normalization.
212
+ """
213
+ url = "/consumer-spending/eu/v1/merchant-aggregates"
214
+
215
+ return self._paginate(
216
+ path=url,
217
+ params=self._get_params(self.list_eu_merchant_aggregates, locals()),
218
+ deserializer=EUMerchantAggregate.from_dict,
219
+ raw=raw,
220
+ result_key="results",
221
+ options=options,
222
+ )
223
+
224
+ def list_eu_merchant_hierarchy(
225
+ self,
226
+ lookup_name: Optional[str] = None,
227
+ lookup_name_any_of: Optional[str] = None,
228
+ lookup_name_gt: Optional[str] = None,
229
+ lookup_name_gte: Optional[str] = None,
230
+ lookup_name_lt: Optional[str] = None,
231
+ lookup_name_lte: Optional[str] = None,
232
+ ticker: Optional[str] = None,
233
+ ticker_any_of: Optional[str] = None,
234
+ ticker_gt: Optional[str] = None,
235
+ ticker_gte: Optional[str] = None,
236
+ ticker_lt: Optional[str] = None,
237
+ ticker_lte: Optional[str] = None,
238
+ listing_status: Optional[str] = None,
239
+ listing_status_any_of: Optional[str] = None,
240
+ active_from: Optional[Union[str, date]] = None,
241
+ active_from_gt: Optional[Union[str, date]] = None,
242
+ active_from_gte: Optional[Union[str, date]] = None,
243
+ active_from_lt: Optional[Union[str, date]] = None,
244
+ active_from_lte: Optional[Union[str, date]] = None,
245
+ active_to: Optional[Union[str, date]] = None,
246
+ active_to_gt: Optional[Union[str, date]] = None,
247
+ active_to_gte: Optional[Union[str, date]] = None,
248
+ active_to_lt: Optional[Union[str, date]] = None,
249
+ active_to_lte: Optional[Union[str, date]] = None,
250
+ limit: Optional[int] = None,
251
+ sort: Optional[Union[str, Sort]] = None,
252
+ params: Optional[Dict[str, Any]] = None,
253
+ raw: bool = False,
254
+ options: Optional[RequestOptionBuilder] = None,
255
+ ) -> Union[Iterator[EUMerchantHierarchy], HTTPResponse]:
256
+ """
257
+ Reference data mapping merchants to parent companies, tickers, sectors,
258
+ and industries across Fable's European consumer transaction panel.
259
+
260
+ Use lookup_name + active_from/active_to to join with merchant-aggregates
261
+ for point-in-time queries.
262
+ """
263
+ url = "/consumer-spending/eu/v1/merchant-hierarchy"
264
+
265
+ return self._paginate(
266
+ path=url,
267
+ params=self._get_params(self.list_eu_merchant_hierarchy, locals()),
268
+ deserializer=EUMerchantHierarchy.from_dict,
269
+ raw=raw,
270
+ result_key="results",
271
+ options=options,
272
+ )
@@ -0,0 +1,229 @@
1
+ from typing import Optional
2
+ from ...modelclass import modelclass
3
+
4
+
5
+ @modelclass
6
+ class TreasuryYield:
7
+ """
8
+ Treasury yield data for a specific date.
9
+ """
10
+
11
+ date: Optional[str] = None
12
+ yield_1_month: Optional[float] = None
13
+ yield_3_month: Optional[float] = None
14
+ yield_6_month: Optional[float] = None
15
+ yield_1_year: Optional[float] = None
16
+ yield_2_year: Optional[float] = None
17
+ yield_3_year: Optional[float] = None
18
+ yield_5_year: Optional[float] = None
19
+ yield_7_year: Optional[float] = None
20
+ yield_10_year: Optional[float] = None
21
+ yield_20_year: Optional[float] = None
22
+ yield_30_year: Optional[float] = None
23
+
24
+ @staticmethod
25
+ def from_dict(d):
26
+ return TreasuryYield(
27
+ date=d.get("date"),
28
+ yield_1_month=d.get("yield_1_month"),
29
+ yield_3_month=d.get("yield_3_month"),
30
+ yield_6_month=d.get("yield_6_month"),
31
+ yield_1_year=d.get("yield_1_year"),
32
+ yield_2_year=d.get("yield_2_year"),
33
+ yield_3_year=d.get("yield_3_year"),
34
+ yield_5_year=d.get("yield_5_year"),
35
+ yield_7_year=d.get("yield_7_year"),
36
+ yield_10_year=d.get("yield_10_year"),
37
+ yield_20_year=d.get("yield_20_year"),
38
+ yield_30_year=d.get("yield_30_year"),
39
+ )
40
+
41
+
42
+ @modelclass
43
+ class FedInflation:
44
+ cpi: Optional[float] = None
45
+ cpi_core: Optional[float] = None
46
+ cpi_year_over_year: Optional[float] = None
47
+ date: Optional[str] = None
48
+ pce: Optional[float] = None
49
+ pce_core: Optional[float] = None
50
+ pce_spending: Optional[float] = None
51
+
52
+ @staticmethod
53
+ def from_dict(d):
54
+ return FedInflation(
55
+ cpi=d.get("cpi"),
56
+ cpi_core=d.get("cpi_core"),
57
+ cpi_year_over_year=d.get("cpi_year_over_year"),
58
+ date=d.get("date"),
59
+ pce=d.get("pce"),
60
+ pce_core=d.get("pce_core"),
61
+ pce_spending=d.get("pce_spending"),
62
+ )
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
+ )
88
+
89
+
90
+ @modelclass
91
+ class FedLaborMarket:
92
+ avg_hourly_earnings: Optional[float] = None
93
+ date: Optional[str] = None
94
+ job_openings: Optional[float] = None
95
+ labor_force_participation_rate: Optional[float] = None
96
+ unemployment_rate: Optional[float] = None
97
+
98
+ @staticmethod
99
+ def from_dict(d):
100
+ return FedLaborMarket(
101
+ avg_hourly_earnings=d.get("avg_hourly_earnings"),
102
+ date=d.get("date"),
103
+ job_openings=d.get("job_openings"),
104
+ labor_force_participation_rate=d.get("labor_force_participation_rate"),
105
+ unemployment_rate=d.get("unemployment_rate"),
106
+ )
107
+
108
+
109
+ @modelclass
110
+ class EUMerchantAggregate:
111
+ """
112
+ Aggregated consumer transactions from European credit card panels.
113
+ Each row represents daily credit card, debit card, or open banking transactions
114
+ (7-day lag) at a tagged merchant or payment processor.
115
+ """
116
+
117
+ channel: Optional[str] = None
118
+ consumer_type: Optional[str] = None
119
+ eight_day_rolling_category_accounts: Optional[int] = None
120
+ eight_day_rolling_total_accounts: Optional[int] = None
121
+ mcc_group: Optional[str] = None
122
+ merchant_industry: Optional[str] = None
123
+ merchant_ticker: Optional[str] = None
124
+ name: Optional[str] = None
125
+ parent_name: Optional[str] = None
126
+ published_date: Optional[str] = None
127
+ spend_in_distinct_account_key_count: Optional[int] = None
128
+ spend_in_spend: Optional[float] = None
129
+ spend_in_transaction_count: Optional[int] = None
130
+ spend_out_distinct_account_key_count: Optional[int] = None
131
+ spend_out_spend: Optional[float] = None
132
+ spend_out_transaction_count: Optional[int] = None
133
+ total_accounts: Optional[int] = None
134
+ total_spend: Optional[float] = None
135
+ total_transactions: Optional[int] = None
136
+ transaction_currency: Optional[str] = None
137
+ transaction_date: Optional[str] = None
138
+ twenty_eight_day_rolling_category_accounts: Optional[int] = None
139
+ twenty_eight_day_rolling_total_accounts: Optional[int] = None
140
+ type: Optional[str] = None
141
+ user_country: Optional[str] = None
142
+
143
+ @staticmethod
144
+ def from_dict(d):
145
+ return EUMerchantAggregate(
146
+ channel=d.get("channel"),
147
+ consumer_type=d.get("consumer_type"),
148
+ eight_day_rolling_category_accounts=d.get(
149
+ "eight_day_rolling_category_accounts"
150
+ ),
151
+ eight_day_rolling_total_accounts=d.get("eight_day_rolling_total_accounts"),
152
+ mcc_group=d.get("mcc_group"),
153
+ merchant_industry=d.get("merchant_industry"),
154
+ merchant_ticker=d.get("merchant_ticker"),
155
+ name=d.get("name"),
156
+ parent_name=d.get("parent_name"),
157
+ published_date=d.get("published_date"),
158
+ spend_in_distinct_account_key_count=d.get(
159
+ "spend_in_distinct_account_key_count"
160
+ ),
161
+ spend_in_spend=d.get("spend_in_spend"),
162
+ spend_in_transaction_count=d.get("spend_in_transaction_count"),
163
+ spend_out_distinct_account_key_count=d.get(
164
+ "spend_out_distinct_account_key_count"
165
+ ),
166
+ spend_out_spend=d.get("spend_out_spend"),
167
+ spend_out_transaction_count=d.get("spend_out_transaction_count"),
168
+ total_accounts=d.get("total_accounts"),
169
+ total_spend=d.get("total_spend"),
170
+ total_transactions=d.get("total_transactions"),
171
+ transaction_currency=d.get("transaction_currency"),
172
+ transaction_date=d.get("transaction_date"),
173
+ twenty_eight_day_rolling_category_accounts=d.get(
174
+ "twenty_eight_day_rolling_category_accounts"
175
+ ),
176
+ twenty_eight_day_rolling_total_accounts=d.get(
177
+ "twenty_eight_day_rolling_total_accounts"
178
+ ),
179
+ type=d.get("type"),
180
+ user_country=d.get("user_country"),
181
+ )
182
+
183
+
184
+ @modelclass
185
+ class EUMerchantHierarchy:
186
+ """
187
+ Reference data mapping merchants to parent companies, tickers, sectors,
188
+ and industries across Fable's European consumer transaction panel.
189
+ """
190
+
191
+ active_from: Optional[str] = None
192
+ active_to: Optional[str] = None
193
+ category: Optional[str] = None
194
+ grandparent_name: Optional[str] = None
195
+ grandparent_ticker: Optional[str] = None
196
+ great_grandparent_name: Optional[str] = None
197
+ great_grandparent_ticker: Optional[str] = None
198
+ industry: Optional[str] = None
199
+ industry_group: Optional[str] = None
200
+ listing_status: Optional[str] = None
201
+ lookup_name: Optional[str] = None
202
+ normalized_name: Optional[str] = None
203
+ parent_name: Optional[str] = None
204
+ parent_ticker: Optional[str] = None
205
+ sector: Optional[str] = None
206
+ sub_industry: Optional[str] = None
207
+ ticker: Optional[str] = None
208
+
209
+ @staticmethod
210
+ def from_dict(d):
211
+ return EUMerchantHierarchy(
212
+ active_from=d.get("active_from"),
213
+ active_to=d.get("active_to"),
214
+ category=d.get("category"),
215
+ grandparent_name=d.get("grandparent_name"),
216
+ grandparent_ticker=d.get("grandparent_ticker"),
217
+ great_grandparent_name=d.get("great_grandparent_name"),
218
+ great_grandparent_ticker=d.get("great_grandparent_ticker"),
219
+ industry=d.get("industry"),
220
+ industry_group=d.get("industry_group"),
221
+ listing_status=d.get("listing_status"),
222
+ lookup_name=d.get("lookup_name"),
223
+ normalized_name=d.get("normalized_name"),
224
+ parent_name=d.get("parent_name"),
225
+ parent_ticker=d.get("parent_ticker"),
226
+ sector=d.get("sector"),
227
+ sub_industry=d.get("sub_industry"),
228
+ ticker=d.get("ticker"),
229
+ )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "massive"
3
- version = "2.4.0"
3
+ version = "2.5.0"
4
4
  description = "Official Massive (formerly Polygon.io) REST and Websocket client."
5
5
  authors = ["massive.com"]
6
6
  license = "MIT"
@@ -1,106 +0,0 @@
1
- from typing import Optional
2
- from ...modelclass import modelclass
3
-
4
-
5
- @modelclass
6
- class TreasuryYield:
7
- """
8
- Treasury yield data for a specific date.
9
- """
10
-
11
- date: Optional[str] = None
12
- yield_1_month: Optional[float] = None
13
- yield_3_month: Optional[float] = None
14
- yield_6_month: Optional[float] = None
15
- yield_1_year: Optional[float] = None
16
- yield_2_year: Optional[float] = None
17
- yield_3_year: Optional[float] = None
18
- yield_5_year: Optional[float] = None
19
- yield_7_year: Optional[float] = None
20
- yield_10_year: Optional[float] = None
21
- yield_20_year: Optional[float] = None
22
- yield_30_year: Optional[float] = None
23
-
24
- @staticmethod
25
- def from_dict(d):
26
- return TreasuryYield(
27
- date=d.get("date"),
28
- yield_1_month=d.get("yield_1_month"),
29
- yield_3_month=d.get("yield_3_month"),
30
- yield_6_month=d.get("yield_6_month"),
31
- yield_1_year=d.get("yield_1_year"),
32
- yield_2_year=d.get("yield_2_year"),
33
- yield_3_year=d.get("yield_3_year"),
34
- yield_5_year=d.get("yield_5_year"),
35
- yield_7_year=d.get("yield_7_year"),
36
- yield_10_year=d.get("yield_10_year"),
37
- yield_20_year=d.get("yield_20_year"),
38
- yield_30_year=d.get("yield_30_year"),
39
- )
40
-
41
-
42
- @modelclass
43
- class FedInflation:
44
- cpi: Optional[float] = None
45
- cpi_core: Optional[float] = None
46
- cpi_year_over_year: Optional[float] = None
47
- date: Optional[str] = None
48
- pce: Optional[float] = None
49
- pce_core: Optional[float] = None
50
- pce_spending: Optional[float] = None
51
-
52
- @staticmethod
53
- def from_dict(d):
54
- return FedInflation(
55
- cpi=d.get("cpi"),
56
- cpi_core=d.get("cpi_core"),
57
- cpi_year_over_year=d.get("cpi_year_over_year"),
58
- date=d.get("date"),
59
- pce=d.get("pce"),
60
- pce_core=d.get("pce_core"),
61
- pce_spending=d.get("pce_spending"),
62
- )
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
- )
88
-
89
-
90
- @modelclass
91
- class FedLaborMarket:
92
- avg_hourly_earnings: Optional[float] = None
93
- date: Optional[str] = None
94
- job_openings: Optional[float] = None
95
- labor_force_participation_rate: Optional[float] = None
96
- unemployment_rate: Optional[float] = None
97
-
98
- @staticmethod
99
- def from_dict(d):
100
- return FedLaborMarket(
101
- avg_hourly_earnings=d.get("avg_hourly_earnings"),
102
- date=d.get("date"),
103
- job_openings=d.get("job_openings"),
104
- labor_force_participation_rate=d.get("labor_force_participation_rate"),
105
- unemployment_rate=d.get("unemployment_rate"),
106
- )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes