massive 2.5.0__tar.gz → 2.7.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.
- {massive-2.5.0 → massive-2.7.0}/PKG-INFO +1 -1
- {massive-2.5.0 → massive-2.7.0}/massive/rest/futures.py +17 -17
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/financials.py +254 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/futures.py +7 -7
- {massive-2.5.0 → massive-2.7.0}/massive/rest/reference.py +131 -0
- {massive-2.5.0 → massive-2.7.0}/pyproject.toml +1 -1
- {massive-2.5.0 → massive-2.7.0}/LICENSE +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/__init__.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/exceptions.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/logging.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/modelclass.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/__init__.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/aggs.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/base.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/benzinga.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/economy.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/etf_global.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/financials.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/indicators.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/__init__.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/aggs.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/benzinga.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/common.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/conditions.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/contracts.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/dividends.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/economy.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/etf_global.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/exchanges.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/indicators.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/markets.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/quotes.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/request.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/snapshot.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/splits.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/summaries.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/tickers.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/tmx.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/models/trades.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/quotes.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/snapshot.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/summaries.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/tmx.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/trades.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/rest/vX.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/websocket/__init__.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/websocket/models/__init__.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/websocket/models/common.py +0 -0
- {massive-2.5.0 → massive-2.7.0}/massive/websocket/models/models.py +0 -0
|
@@ -21,7 +21,7 @@ from .models.request import RequestOptionBuilder
|
|
|
21
21
|
class FuturesClient(BaseClient):
|
|
22
22
|
"""
|
|
23
23
|
Client for the Futures REST Endpoints
|
|
24
|
-
(aligned with the paths from /futures/
|
|
24
|
+
(aligned with the paths from /futures/v1/...)
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
def list_futures_aggregates(
|
|
@@ -40,7 +40,7 @@ class FuturesClient(BaseClient):
|
|
|
40
40
|
options: Optional[RequestOptionBuilder] = None,
|
|
41
41
|
) -> Union[Iterator[FuturesAgg], HTTPResponse]:
|
|
42
42
|
"""
|
|
43
|
-
Endpoint: GET /futures/
|
|
43
|
+
Endpoint: GET /futures/v1/aggs/{ticker}
|
|
44
44
|
|
|
45
45
|
Get aggregates for a futures contract in a given time range.
|
|
46
46
|
This endpoint returns data that includes:
|
|
@@ -48,7 +48,7 @@ class FuturesClient(BaseClient):
|
|
|
48
48
|
- volume, dollar_volume, etc.
|
|
49
49
|
If `next_url` is present, it will be paginated.
|
|
50
50
|
"""
|
|
51
|
-
url = f"/futures/
|
|
51
|
+
url = f"/futures/v1/aggs/{ticker}"
|
|
52
52
|
return self._paginate(
|
|
53
53
|
path=url,
|
|
54
54
|
params=self._get_params(self.list_futures_aggregates, locals()),
|
|
@@ -96,11 +96,11 @@ class FuturesClient(BaseClient):
|
|
|
96
96
|
options: Optional[RequestOptionBuilder] = None,
|
|
97
97
|
) -> Union[Iterator[FuturesContract], HTTPResponse]:
|
|
98
98
|
"""
|
|
99
|
-
Endpoint: GET /futures/
|
|
99
|
+
Endpoint: GET /futures/v1/contracts
|
|
100
100
|
|
|
101
101
|
The Contracts endpoint returns a paginated list of futures contracts.
|
|
102
102
|
"""
|
|
103
|
-
url = "/futures/
|
|
103
|
+
url = "/futures/v1/contracts"
|
|
104
104
|
return self._paginate(
|
|
105
105
|
path=url,
|
|
106
106
|
params=self._get_params(self.list_futures_contracts, locals()),
|
|
@@ -151,11 +151,11 @@ class FuturesClient(BaseClient):
|
|
|
151
151
|
options: Optional[RequestOptionBuilder] = None,
|
|
152
152
|
) -> Union[Iterator[FuturesProduct], HTTPResponse]:
|
|
153
153
|
"""
|
|
154
|
-
Endpoint: GET /futures/
|
|
154
|
+
Endpoint: GET /futures/v1/products
|
|
155
155
|
|
|
156
156
|
Returns a list of futures products (including combos).
|
|
157
157
|
"""
|
|
158
|
-
url = "/futures/
|
|
158
|
+
url = "/futures/v1/products"
|
|
159
159
|
return self._paginate(
|
|
160
160
|
path=url,
|
|
161
161
|
params=self._get_params(self.list_futures_products, locals()),
|
|
@@ -184,11 +184,11 @@ class FuturesClient(BaseClient):
|
|
|
184
184
|
options: Optional[RequestOptionBuilder] = None,
|
|
185
185
|
) -> Union[Iterator[FuturesQuote], HTTPResponse]:
|
|
186
186
|
"""
|
|
187
|
-
Endpoint: GET /futures/
|
|
187
|
+
Endpoint: GET /futures/v1/quotes/{ticker}
|
|
188
188
|
|
|
189
189
|
Get quotes for a contract in a given time range (paginated).
|
|
190
190
|
"""
|
|
191
|
-
url = f"/futures/
|
|
191
|
+
url = f"/futures/v1/quotes/{ticker}"
|
|
192
192
|
return self._paginate(
|
|
193
193
|
path=url,
|
|
194
194
|
params=self._get_params(self.list_futures_quotes, locals()),
|
|
@@ -217,11 +217,11 @@ class FuturesClient(BaseClient):
|
|
|
217
217
|
options: Optional[RequestOptionBuilder] = None,
|
|
218
218
|
) -> Union[Iterator[FuturesTrade], HTTPResponse]:
|
|
219
219
|
"""
|
|
220
|
-
Endpoint: GET /futures/
|
|
220
|
+
Endpoint: GET /futures/v1/trades/{ticker}
|
|
221
221
|
|
|
222
222
|
Get trades for a contract in a given time range (paginated).
|
|
223
223
|
"""
|
|
224
|
-
url = f"/futures/
|
|
224
|
+
url = f"/futures/v1/trades/{ticker}"
|
|
225
225
|
return self._paginate(
|
|
226
226
|
path=url,
|
|
227
227
|
params=self._get_params(self.list_futures_trades, locals()),
|
|
@@ -257,12 +257,12 @@ class FuturesClient(BaseClient):
|
|
|
257
257
|
options: Optional[RequestOptionBuilder] = None,
|
|
258
258
|
) -> Union[Iterator[FuturesSchedule], HTTPResponse]:
|
|
259
259
|
"""
|
|
260
|
-
Endpoint: GET /futures/
|
|
260
|
+
Endpoint: GET /futures/v1/schedules
|
|
261
261
|
|
|
262
262
|
Returns a list of trading schedules for multiple futures products on a specific date.
|
|
263
263
|
If `next_url` is present, this is paginated.
|
|
264
264
|
"""
|
|
265
|
-
url = "/futures/
|
|
265
|
+
url = "/futures/v1/schedules"
|
|
266
266
|
return self._paginate(
|
|
267
267
|
path=url,
|
|
268
268
|
params=self._get_params(self.list_futures_schedules, locals()),
|
|
@@ -284,7 +284,7 @@ class FuturesClient(BaseClient):
|
|
|
284
284
|
raw: bool = False,
|
|
285
285
|
options: Optional[RequestOptionBuilder] = None,
|
|
286
286
|
) -> Union[Iterator[FuturesMarketStatus], HTTPResponse]:
|
|
287
|
-
url = "/futures/
|
|
287
|
+
url = "/futures/v1/market-status"
|
|
288
288
|
return self._paginate(
|
|
289
289
|
path=url,
|
|
290
290
|
params=self._get_params(self.list_futures_market_statuses, locals()),
|
|
@@ -313,7 +313,7 @@ class FuturesClient(BaseClient):
|
|
|
313
313
|
raw: bool = False,
|
|
314
314
|
options: Optional[RequestOptionBuilder] = None,
|
|
315
315
|
) -> Union[Iterator[FuturesSnapshot], HTTPResponse]:
|
|
316
|
-
url = "/futures/
|
|
316
|
+
url = "/futures/v1/snapshot"
|
|
317
317
|
return self._paginate(
|
|
318
318
|
path=url,
|
|
319
319
|
params=self._get_params(self.get_futures_snapshot, locals()),
|
|
@@ -330,11 +330,11 @@ class FuturesClient(BaseClient):
|
|
|
330
330
|
options: Optional[RequestOptionBuilder] = None,
|
|
331
331
|
) -> Union[Iterator[FuturesExchange], HTTPResponse]:
|
|
332
332
|
"""
|
|
333
|
-
Endpoint: GET /futures/
|
|
333
|
+
Endpoint: GET /futures/v1/exchanges
|
|
334
334
|
|
|
335
335
|
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.
|
|
336
336
|
"""
|
|
337
|
-
url = "/futures/
|
|
337
|
+
url = "/futures/v1/exchanges"
|
|
338
338
|
return self._paginate(
|
|
339
339
|
path=url,
|
|
340
340
|
params=self._get_params(self.list_futures_exchanges, locals()),
|
|
@@ -922,6 +922,60 @@ class RiskFactorTaxonomy:
|
|
|
922
922
|
)
|
|
923
923
|
|
|
924
924
|
|
|
925
|
+
@modelclass
|
|
926
|
+
@dataclass
|
|
927
|
+
class Filing13F:
|
|
928
|
+
"""SEC Form 13F filings data showing institutional investment manager holdings."""
|
|
929
|
+
|
|
930
|
+
accession_number: Optional[str] = None
|
|
931
|
+
cusip: Optional[str] = None
|
|
932
|
+
file_number: Optional[str] = None
|
|
933
|
+
filer_cik: Optional[str] = None
|
|
934
|
+
filing_date: Optional[str] = None
|
|
935
|
+
filing_url: Optional[str] = None
|
|
936
|
+
film_number: Optional[str] = None
|
|
937
|
+
form_type: Optional[str] = None
|
|
938
|
+
investment_discretion: Optional[str] = None
|
|
939
|
+
issuer_name: Optional[str] = None
|
|
940
|
+
market_value: Optional[int] = None
|
|
941
|
+
other_managers: Optional[List[str]] = None
|
|
942
|
+
period: Optional[str] = None
|
|
943
|
+
put_call: Optional[str] = None
|
|
944
|
+
shares_or_principal_amount: Optional[int] = None
|
|
945
|
+
shares_or_principal_type: Optional[str] = None
|
|
946
|
+
title_of_class: Optional[str] = None
|
|
947
|
+
voting_authority_none: Optional[int] = None
|
|
948
|
+
voting_authority_shared: Optional[int] = None
|
|
949
|
+
voting_authority_sole: Optional[int] = None
|
|
950
|
+
|
|
951
|
+
@staticmethod
|
|
952
|
+
def from_dict(d: Optional[Dict[str, Any]]) -> "Filing13F":
|
|
953
|
+
if not d:
|
|
954
|
+
return Filing13F()
|
|
955
|
+
return Filing13F(
|
|
956
|
+
accession_number=d.get("accession_number"),
|
|
957
|
+
cusip=d.get("cusip"),
|
|
958
|
+
file_number=d.get("file_number"),
|
|
959
|
+
filer_cik=d.get("filer_cik"),
|
|
960
|
+
filing_date=d.get("filing_date"),
|
|
961
|
+
filing_url=d.get("filing_url"),
|
|
962
|
+
film_number=d.get("film_number"),
|
|
963
|
+
form_type=d.get("form_type"),
|
|
964
|
+
investment_discretion=d.get("investment_discretion"),
|
|
965
|
+
issuer_name=d.get("issuer_name"),
|
|
966
|
+
market_value=d.get("market_value"),
|
|
967
|
+
other_managers=d.get("other_managers"),
|
|
968
|
+
period=d.get("period"),
|
|
969
|
+
put_call=d.get("put_call"),
|
|
970
|
+
shares_or_principal_amount=d.get("shares_or_principal_amount"),
|
|
971
|
+
shares_or_principal_type=d.get("shares_or_principal_type"),
|
|
972
|
+
title_of_class=d.get("title_of_class"),
|
|
973
|
+
voting_authority_none=d.get("voting_authority_none"),
|
|
974
|
+
voting_authority_shared=d.get("voting_authority_shared"),
|
|
975
|
+
voting_authority_sole=d.get("voting_authority_sole"),
|
|
976
|
+
)
|
|
977
|
+
|
|
978
|
+
|
|
925
979
|
@modelclass
|
|
926
980
|
class FilingSection:
|
|
927
981
|
"""SEC document text section from a 10-K/10-Q (raw text content)."""
|
|
@@ -947,6 +1001,206 @@ class FilingSection:
|
|
|
947
1001
|
)
|
|
948
1002
|
|
|
949
1003
|
|
|
1004
|
+
@modelclass
|
|
1005
|
+
@dataclass
|
|
1006
|
+
class FilingFootnote:
|
|
1007
|
+
"""Footnote from SEC Form 3/4 filings."""
|
|
1008
|
+
|
|
1009
|
+
id: Optional[str] = None
|
|
1010
|
+
description: Optional[str] = None
|
|
1011
|
+
|
|
1012
|
+
@staticmethod
|
|
1013
|
+
def from_dict(d: Optional[Dict[str, Any]]) -> "FilingFootnote":
|
|
1014
|
+
if not d:
|
|
1015
|
+
return FilingFootnote()
|
|
1016
|
+
return FilingFootnote(
|
|
1017
|
+
id=d.get("id"),
|
|
1018
|
+
description=d.get("description"),
|
|
1019
|
+
)
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
@modelclass
|
|
1023
|
+
@dataclass
|
|
1024
|
+
class FilingForm3:
|
|
1025
|
+
"""SEC Form 3 filings reporting initial statements of beneficial ownership of securities.
|
|
1026
|
+
Filed by corporate insiders (directors, officers, and 10%+ shareholders) when they first acquire a position.
|
|
1027
|
+
"""
|
|
1028
|
+
|
|
1029
|
+
accession_number: Optional[str] = None
|
|
1030
|
+
aff_10b5_one: Optional[bool] = None
|
|
1031
|
+
date_of_original_submission: Optional[str] = None
|
|
1032
|
+
direct_or_indirect: Optional[str] = None
|
|
1033
|
+
exercise_date: Optional[str] = None
|
|
1034
|
+
exercise_price: Optional[float] = None
|
|
1035
|
+
filing_date: Optional[str] = None
|
|
1036
|
+
filing_url: Optional[str] = None
|
|
1037
|
+
footnotes: Optional[List[FilingFootnote]] = None
|
|
1038
|
+
form_type: Optional[str] = None
|
|
1039
|
+
is_director: Optional[bool] = None
|
|
1040
|
+
is_officer: Optional[bool] = None
|
|
1041
|
+
is_other: Optional[bool] = None
|
|
1042
|
+
is_ten_percent_owner: Optional[bool] = None
|
|
1043
|
+
issuer_cik: Optional[str] = None
|
|
1044
|
+
issuer_name: Optional[str] = None
|
|
1045
|
+
nature_of_ownership: Optional[str] = None
|
|
1046
|
+
not_subject_to_section_16: Optional[bool] = None
|
|
1047
|
+
officer_title: Optional[str] = None
|
|
1048
|
+
owner_cik: Optional[str] = None
|
|
1049
|
+
owner_name: Optional[str] = None
|
|
1050
|
+
period_of_report: Optional[str] = None
|
|
1051
|
+
remarks: Optional[str] = None
|
|
1052
|
+
security_title: Optional[str] = None
|
|
1053
|
+
security_type: Optional[str] = None
|
|
1054
|
+
shares_owned: Optional[float] = None
|
|
1055
|
+
tickers: Optional[List[str]] = None
|
|
1056
|
+
underlying_security_shares: Optional[float] = None
|
|
1057
|
+
underlying_security_title: Optional[str] = None
|
|
1058
|
+
|
|
1059
|
+
@staticmethod
|
|
1060
|
+
def from_dict(d: Optional[Dict[str, Any]]) -> "FilingForm3":
|
|
1061
|
+
if not d:
|
|
1062
|
+
return FilingForm3()
|
|
1063
|
+
footnotes = d.get("footnotes")
|
|
1064
|
+
return FilingForm3(
|
|
1065
|
+
accession_number=d.get("accession_number"),
|
|
1066
|
+
aff_10b5_one=d.get("aff_10b5_one"),
|
|
1067
|
+
date_of_original_submission=d.get("date_of_original_submission"),
|
|
1068
|
+
direct_or_indirect=d.get("direct_or_indirect"),
|
|
1069
|
+
exercise_date=d.get("exercise_date"),
|
|
1070
|
+
exercise_price=d.get("exercise_price"),
|
|
1071
|
+
filing_date=d.get("filing_date"),
|
|
1072
|
+
filing_url=d.get("filing_url"),
|
|
1073
|
+
footnotes=(
|
|
1074
|
+
[FilingFootnote.from_dict(f) for f in footnotes]
|
|
1075
|
+
if footnotes is not None
|
|
1076
|
+
else None
|
|
1077
|
+
),
|
|
1078
|
+
form_type=d.get("form_type"),
|
|
1079
|
+
is_director=d.get("is_director"),
|
|
1080
|
+
is_officer=d.get("is_officer"),
|
|
1081
|
+
is_other=d.get("is_other"),
|
|
1082
|
+
is_ten_percent_owner=d.get("is_ten_percent_owner"),
|
|
1083
|
+
issuer_cik=d.get("issuer_cik"),
|
|
1084
|
+
issuer_name=d.get("issuer_name"),
|
|
1085
|
+
nature_of_ownership=d.get("nature_of_ownership"),
|
|
1086
|
+
not_subject_to_section_16=d.get("not_subject_to_section_16"),
|
|
1087
|
+
officer_title=d.get("officer_title"),
|
|
1088
|
+
owner_cik=d.get("owner_cik"),
|
|
1089
|
+
owner_name=d.get("owner_name"),
|
|
1090
|
+
period_of_report=d.get("period_of_report"),
|
|
1091
|
+
remarks=d.get("remarks"),
|
|
1092
|
+
security_title=d.get("security_title"),
|
|
1093
|
+
security_type=d.get("security_type"),
|
|
1094
|
+
shares_owned=d.get("shares_owned"),
|
|
1095
|
+
tickers=d.get("tickers"),
|
|
1096
|
+
underlying_security_shares=d.get("underlying_security_shares"),
|
|
1097
|
+
underlying_security_title=d.get("underlying_security_title"),
|
|
1098
|
+
)
|
|
1099
|
+
|
|
1100
|
+
|
|
1101
|
+
@modelclass
|
|
1102
|
+
@dataclass
|
|
1103
|
+
class FilingForm4:
|
|
1104
|
+
"""SEC Form 4 filings reporting changes in beneficial ownership of securities.
|
|
1105
|
+
Filed by corporate insiders (directors, officers, and 10%+ shareholders) within two business days of a transaction.
|
|
1106
|
+
"""
|
|
1107
|
+
|
|
1108
|
+
accession_number: Optional[str] = None
|
|
1109
|
+
aff_10b5_one: Optional[bool] = None
|
|
1110
|
+
date_of_original_submission: Optional[str] = None
|
|
1111
|
+
deemed_execution_date: Optional[str] = None
|
|
1112
|
+
direct_or_indirect: Optional[str] = None
|
|
1113
|
+
equity_swap_involved: Optional[bool] = None
|
|
1114
|
+
exercise_date: Optional[str] = None
|
|
1115
|
+
exercise_price: Optional[float] = None
|
|
1116
|
+
expiration_date: Optional[str] = None
|
|
1117
|
+
filing_date: Optional[str] = None
|
|
1118
|
+
filing_url: Optional[str] = None
|
|
1119
|
+
footnotes: Optional[List[FilingFootnote]] = None
|
|
1120
|
+
form_type: Optional[str] = None
|
|
1121
|
+
is_director: Optional[bool] = None
|
|
1122
|
+
is_officer: Optional[bool] = None
|
|
1123
|
+
is_other: Optional[bool] = None
|
|
1124
|
+
is_ten_percent_owner: Optional[bool] = None
|
|
1125
|
+
issuer_cik: Optional[str] = None
|
|
1126
|
+
issuer_name: Optional[str] = None
|
|
1127
|
+
nature_of_ownership: Optional[str] = None
|
|
1128
|
+
not_subject_to_section_16: Optional[bool] = None
|
|
1129
|
+
officer_title: Optional[str] = None
|
|
1130
|
+
owner_cik: Optional[str] = None
|
|
1131
|
+
owner_name: Optional[str] = None
|
|
1132
|
+
period_of_report: Optional[str] = None
|
|
1133
|
+
record_type: Optional[str] = None
|
|
1134
|
+
remarks: Optional[str] = None
|
|
1135
|
+
security_title: Optional[str] = None
|
|
1136
|
+
security_type: Optional[str] = None
|
|
1137
|
+
shares_owned_following_transaction: Optional[float] = None
|
|
1138
|
+
tickers: Optional[List[str]] = None
|
|
1139
|
+
transaction_acquired_disposed: Optional[str] = None
|
|
1140
|
+
transaction_code: Optional[str] = None
|
|
1141
|
+
transaction_date: Optional[str] = None
|
|
1142
|
+
transaction_price_per_share: Optional[float] = None
|
|
1143
|
+
transaction_shares: Optional[float] = None
|
|
1144
|
+
transaction_timeliness: Optional[str] = None
|
|
1145
|
+
transaction_value: Optional[float] = None
|
|
1146
|
+
underlying_security_shares: Optional[float] = None
|
|
1147
|
+
underlying_security_title: Optional[str] = None
|
|
1148
|
+
|
|
1149
|
+
@staticmethod
|
|
1150
|
+
def from_dict(d: Optional[Dict[str, Any]]) -> "FilingForm4":
|
|
1151
|
+
if not d:
|
|
1152
|
+
return FilingForm4()
|
|
1153
|
+
footnotes = d.get("footnotes")
|
|
1154
|
+
return FilingForm4(
|
|
1155
|
+
accession_number=d.get("accession_number"),
|
|
1156
|
+
aff_10b5_one=d.get("aff_10b5_one"),
|
|
1157
|
+
date_of_original_submission=d.get("date_of_original_submission"),
|
|
1158
|
+
deemed_execution_date=d.get("deemed_execution_date"),
|
|
1159
|
+
direct_or_indirect=d.get("direct_or_indirect"),
|
|
1160
|
+
equity_swap_involved=d.get("equity_swap_involved"),
|
|
1161
|
+
exercise_date=d.get("exercise_date"),
|
|
1162
|
+
exercise_price=d.get("exercise_price"),
|
|
1163
|
+
expiration_date=d.get("expiration_date"),
|
|
1164
|
+
filing_date=d.get("filing_date"),
|
|
1165
|
+
filing_url=d.get("filing_url"),
|
|
1166
|
+
footnotes=(
|
|
1167
|
+
[FilingFootnote.from_dict(f) for f in footnotes]
|
|
1168
|
+
if footnotes is not None
|
|
1169
|
+
else None
|
|
1170
|
+
),
|
|
1171
|
+
form_type=d.get("form_type"),
|
|
1172
|
+
is_director=d.get("is_director"),
|
|
1173
|
+
is_officer=d.get("is_officer"),
|
|
1174
|
+
is_other=d.get("is_other"),
|
|
1175
|
+
is_ten_percent_owner=d.get("is_ten_percent_owner"),
|
|
1176
|
+
issuer_cik=d.get("issuer_cik"),
|
|
1177
|
+
issuer_name=d.get("issuer_name"),
|
|
1178
|
+
nature_of_ownership=d.get("nature_of_ownership"),
|
|
1179
|
+
not_subject_to_section_16=d.get("not_subject_to_section_16"),
|
|
1180
|
+
officer_title=d.get("officer_title"),
|
|
1181
|
+
owner_cik=d.get("owner_cik"),
|
|
1182
|
+
owner_name=d.get("owner_name"),
|
|
1183
|
+
period_of_report=d.get("period_of_report"),
|
|
1184
|
+
record_type=d.get("record_type"),
|
|
1185
|
+
remarks=d.get("remarks"),
|
|
1186
|
+
security_title=d.get("security_title"),
|
|
1187
|
+
security_type=d.get("security_type"),
|
|
1188
|
+
shares_owned_following_transaction=d.get(
|
|
1189
|
+
"shares_owned_following_transaction"
|
|
1190
|
+
),
|
|
1191
|
+
tickers=d.get("tickers"),
|
|
1192
|
+
transaction_acquired_disposed=d.get("transaction_acquired_disposed"),
|
|
1193
|
+
transaction_code=d.get("transaction_code"),
|
|
1194
|
+
transaction_date=d.get("transaction_date"),
|
|
1195
|
+
transaction_price_per_share=d.get("transaction_price_per_share"),
|
|
1196
|
+
transaction_shares=d.get("transaction_shares"),
|
|
1197
|
+
transaction_timeliness=d.get("transaction_timeliness"),
|
|
1198
|
+
transaction_value=d.get("transaction_value"),
|
|
1199
|
+
underlying_security_shares=d.get("underlying_security_shares"),
|
|
1200
|
+
underlying_security_title=d.get("underlying_security_title"),
|
|
1201
|
+
)
|
|
1202
|
+
|
|
1203
|
+
|
|
950
1204
|
@modelclass
|
|
951
1205
|
class Filing8K:
|
|
952
1206
|
"""Parsed 8-K filing with item-level text content."""
|
|
@@ -6,7 +6,7 @@ from ...modelclass import modelclass
|
|
|
6
6
|
class FuturesAgg:
|
|
7
7
|
"""
|
|
8
8
|
A single aggregate bar for a futures contract in a given time window.
|
|
9
|
-
Corresponds to /futures/
|
|
9
|
+
Corresponds to /futures/v1/aggs/{ticker}.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
ticker: Optional[str] = None
|
|
@@ -42,7 +42,7 @@ class FuturesAgg:
|
|
|
42
42
|
class FuturesContract:
|
|
43
43
|
"""
|
|
44
44
|
Represents a single futures contract (or a 'combo' contract).
|
|
45
|
-
Corresponds to /futures/
|
|
45
|
+
Corresponds to /futures/v1/contracts endpoints.
|
|
46
46
|
"""
|
|
47
47
|
|
|
48
48
|
ticker: Optional[str] = None
|
|
@@ -90,7 +90,7 @@ class FuturesContract:
|
|
|
90
90
|
class FuturesProduct:
|
|
91
91
|
"""
|
|
92
92
|
Represents a single futures product (or product 'combo').
|
|
93
|
-
Corresponds to /futures/
|
|
93
|
+
Corresponds to /futures/v1/products endpoints.
|
|
94
94
|
"""
|
|
95
95
|
|
|
96
96
|
product_code: Optional[str] = None
|
|
@@ -138,7 +138,7 @@ class FuturesProduct:
|
|
|
138
138
|
class FuturesQuote:
|
|
139
139
|
"""
|
|
140
140
|
Represents a futures NBBO quote within a given time range.
|
|
141
|
-
Corresponds to /futures/
|
|
141
|
+
Corresponds to /futures/v1/quotes/{ticker}
|
|
142
142
|
"""
|
|
143
143
|
|
|
144
144
|
ticker: Optional[str] = None
|
|
@@ -174,7 +174,7 @@ class FuturesQuote:
|
|
|
174
174
|
class FuturesTrade:
|
|
175
175
|
"""
|
|
176
176
|
Represents a futures trade within a given time range.
|
|
177
|
-
Corresponds to /futures/
|
|
177
|
+
Corresponds to /futures/v1/trades/{ticker}
|
|
178
178
|
"""
|
|
179
179
|
|
|
180
180
|
ticker: Optional[str] = None
|
|
@@ -202,7 +202,7 @@ class FuturesTrade:
|
|
|
202
202
|
class FuturesSchedule:
|
|
203
203
|
"""
|
|
204
204
|
Represents a single schedule event for a given session_end_date and product.
|
|
205
|
-
Corresponds to /futures/
|
|
205
|
+
Corresponds to /futures/v1/schedules
|
|
206
206
|
"""
|
|
207
207
|
|
|
208
208
|
event: Optional[str] = None
|
|
@@ -397,7 +397,7 @@ class FuturesSnapshot:
|
|
|
397
397
|
class FuturesExchange:
|
|
398
398
|
"""
|
|
399
399
|
Represents a futures exchange or trading venue.
|
|
400
|
-
Corresponds to /futures/
|
|
400
|
+
Corresponds to /futures/v1/exchanges endpoint.
|
|
401
401
|
"""
|
|
402
402
|
|
|
403
403
|
acronym: Optional[str] = None
|
|
@@ -30,6 +30,9 @@ from .models import (
|
|
|
30
30
|
RiskFactorTaxonomy,
|
|
31
31
|
FilingSection,
|
|
32
32
|
Filing8K,
|
|
33
|
+
Filing13F,
|
|
34
|
+
FilingForm3,
|
|
35
|
+
FilingForm4,
|
|
33
36
|
FilingIndex,
|
|
34
37
|
)
|
|
35
38
|
from urllib3 import HTTPResponse
|
|
@@ -991,3 +994,131 @@ class ContractsClient(BaseClient):
|
|
|
991
994
|
raw=raw,
|
|
992
995
|
options=options,
|
|
993
996
|
)
|
|
997
|
+
|
|
998
|
+
def list_stocks_filings_13f(
|
|
999
|
+
self,
|
|
1000
|
+
filer_cik: Optional[str] = None,
|
|
1001
|
+
filer_cik_any_of: Optional[str] = None,
|
|
1002
|
+
filing_date: Optional[Union[str, date]] = None,
|
|
1003
|
+
filing_date_gt: Optional[Union[str, date]] = None,
|
|
1004
|
+
filing_date_gte: Optional[Union[str, date]] = None,
|
|
1005
|
+
filing_date_lt: Optional[Union[str, date]] = None,
|
|
1006
|
+
filing_date_lte: Optional[Union[str, date]] = None,
|
|
1007
|
+
limit: Optional[int] = 100,
|
|
1008
|
+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
|
|
1009
|
+
params: Optional[Dict[str, Any]] = None,
|
|
1010
|
+
raw: bool = False,
|
|
1011
|
+
options: Optional[RequestOptionBuilder] = None,
|
|
1012
|
+
) -> Union[Iterator[Filing13F], HTTPResponse]:
|
|
1013
|
+
"""
|
|
1014
|
+
SEC Form 13F filings data showing institutional investment manager holdings.
|
|
1015
|
+
Form 13F is required to be filed quarterly by institutional investment managers
|
|
1016
|
+
with at least $100 million in qualifying assets under management.
|
|
1017
|
+
"""
|
|
1018
|
+
url = "/stocks/filings/vX/13-F"
|
|
1019
|
+
|
|
1020
|
+
return self._paginate(
|
|
1021
|
+
path=url,
|
|
1022
|
+
params=self._get_params(self.list_stocks_filings_13f, locals()),
|
|
1023
|
+
result_key="results",
|
|
1024
|
+
deserializer=Filing13F.from_dict,
|
|
1025
|
+
raw=raw,
|
|
1026
|
+
options=options,
|
|
1027
|
+
)
|
|
1028
|
+
|
|
1029
|
+
def list_stocks_filings_form_3(
|
|
1030
|
+
self,
|
|
1031
|
+
issuer_cik: Optional[str] = None,
|
|
1032
|
+
issuer_cik_any_of: Optional[str] = None,
|
|
1033
|
+
owner_cik: Optional[str] = None,
|
|
1034
|
+
owner_cik_any_of: Optional[str] = None,
|
|
1035
|
+
tickers: Optional[str] = None,
|
|
1036
|
+
tickers_all_of: Optional[str] = None,
|
|
1037
|
+
tickers_any_of: Optional[str] = None,
|
|
1038
|
+
form_type: Optional[str] = None,
|
|
1039
|
+
filing_date: Optional[Union[str, date]] = None,
|
|
1040
|
+
filing_date_gt: Optional[Union[str, date]] = None,
|
|
1041
|
+
filing_date_gte: Optional[Union[str, date]] = None,
|
|
1042
|
+
filing_date_lt: Optional[Union[str, date]] = None,
|
|
1043
|
+
filing_date_lte: Optional[Union[str, date]] = None,
|
|
1044
|
+
max_ticker: Optional[str] = None,
|
|
1045
|
+
max_ticker_any_of: Optional[str] = None,
|
|
1046
|
+
max_ticker_gt: Optional[str] = None,
|
|
1047
|
+
max_ticker_gte: Optional[str] = None,
|
|
1048
|
+
max_ticker_lt: Optional[str] = None,
|
|
1049
|
+
max_ticker_lte: Optional[str] = None,
|
|
1050
|
+
min_ticker: Optional[str] = None,
|
|
1051
|
+
min_ticker_any_of: Optional[str] = None,
|
|
1052
|
+
min_ticker_gt: Optional[str] = None,
|
|
1053
|
+
min_ticker_gte: Optional[str] = None,
|
|
1054
|
+
min_ticker_lt: Optional[str] = None,
|
|
1055
|
+
min_ticker_lte: Optional[str] = None,
|
|
1056
|
+
limit: Optional[int] = 100,
|
|
1057
|
+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
|
|
1058
|
+
params: Optional[Dict[str, Any]] = None,
|
|
1059
|
+
raw: bool = False,
|
|
1060
|
+
options: Optional[RequestOptionBuilder] = None,
|
|
1061
|
+
) -> Union[Iterator[FilingForm3], HTTPResponse]:
|
|
1062
|
+
"""
|
|
1063
|
+
SEC Form 3 filings reporting initial statements of beneficial ownership of securities.
|
|
1064
|
+
Filed by corporate insiders (directors, officers, and 10%+ shareholders) when they first acquire a position.
|
|
1065
|
+
"""
|
|
1066
|
+
url = "/stocks/filings/vX/form-3"
|
|
1067
|
+
|
|
1068
|
+
return self._paginate(
|
|
1069
|
+
path=url,
|
|
1070
|
+
params=self._get_params(self.list_stocks_filings_form_3, locals()),
|
|
1071
|
+
result_key="results",
|
|
1072
|
+
deserializer=FilingForm3.from_dict,
|
|
1073
|
+
raw=raw,
|
|
1074
|
+
options=options,
|
|
1075
|
+
)
|
|
1076
|
+
|
|
1077
|
+
def list_stocks_filings_form_4(
|
|
1078
|
+
self,
|
|
1079
|
+
issuer_cik: Optional[str] = None,
|
|
1080
|
+
issuer_cik_any_of: Optional[str] = None,
|
|
1081
|
+
owner_cik: Optional[str] = None,
|
|
1082
|
+
owner_cik_any_of: Optional[str] = None,
|
|
1083
|
+
tickers: Optional[str] = None,
|
|
1084
|
+
tickers_all_of: Optional[str] = None,
|
|
1085
|
+
tickers_any_of: Optional[str] = None,
|
|
1086
|
+
form_type: Optional[str] = None,
|
|
1087
|
+
transaction_code: Optional[str] = None,
|
|
1088
|
+
filing_date: Optional[Union[str, date]] = None,
|
|
1089
|
+
filing_date_gt: Optional[Union[str, date]] = None,
|
|
1090
|
+
filing_date_gte: Optional[Union[str, date]] = None,
|
|
1091
|
+
filing_date_lt: Optional[Union[str, date]] = None,
|
|
1092
|
+
filing_date_lte: Optional[Union[str, date]] = None,
|
|
1093
|
+
max_ticker: Optional[str] = None,
|
|
1094
|
+
max_ticker_any_of: Optional[str] = None,
|
|
1095
|
+
max_ticker_gt: Optional[str] = None,
|
|
1096
|
+
max_ticker_gte: Optional[str] = None,
|
|
1097
|
+
max_ticker_lt: Optional[str] = None,
|
|
1098
|
+
max_ticker_lte: Optional[str] = None,
|
|
1099
|
+
min_ticker: Optional[str] = None,
|
|
1100
|
+
min_ticker_any_of: Optional[str] = None,
|
|
1101
|
+
min_ticker_gt: Optional[str] = None,
|
|
1102
|
+
min_ticker_gte: Optional[str] = None,
|
|
1103
|
+
min_ticker_lt: Optional[str] = None,
|
|
1104
|
+
min_ticker_lte: Optional[str] = None,
|
|
1105
|
+
limit: Optional[int] = 100,
|
|
1106
|
+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
|
|
1107
|
+
params: Optional[Dict[str, Any]] = None,
|
|
1108
|
+
raw: bool = False,
|
|
1109
|
+
options: Optional[RequestOptionBuilder] = None,
|
|
1110
|
+
) -> Union[Iterator[FilingForm4], HTTPResponse]:
|
|
1111
|
+
"""
|
|
1112
|
+
SEC Form 4 filings reporting changes in beneficial ownership of securities.
|
|
1113
|
+
Filed by corporate insiders (directors, officers, and 10%+ shareholders) within two business days of a transaction.
|
|
1114
|
+
"""
|
|
1115
|
+
url = "/stocks/filings/vX/form-4"
|
|
1116
|
+
|
|
1117
|
+
return self._paginate(
|
|
1118
|
+
path=url,
|
|
1119
|
+
params=self._get_params(self.list_stocks_filings_form_4, locals()),
|
|
1120
|
+
result_key="results",
|
|
1121
|
+
deserializer=FilingForm4.from_dict,
|
|
1122
|
+
raw=raw,
|
|
1123
|
+
options=options,
|
|
1124
|
+
)
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|