massive 2.3.2__tar.gz → 2.4.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.3.2 → massive-2.4.0}/PKG-INFO +1 -1
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/financials.py +75 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/snapshot.py +134 -28
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/trades.py +17 -16
- {massive-2.3.2 → massive-2.4.0}/massive/rest/reference.py +146 -8
- {massive-2.3.2 → massive-2.4.0}/massive/websocket/models/models.py +4 -0
- {massive-2.3.2 → massive-2.4.0}/pyproject.toml +1 -1
- {massive-2.3.2 → massive-2.4.0}/LICENSE +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/__init__.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/exceptions.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/logging.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/modelclass.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/__init__.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/aggs.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/base.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/benzinga.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/economy.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/etf_global.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/financials.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/futures.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/indicators.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/__init__.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/aggs.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/benzinga.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/common.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/conditions.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/contracts.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/dividends.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/economy.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/etf_global.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/exchanges.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/futures.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/indicators.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/markets.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/quotes.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/request.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/splits.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/summaries.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/tickers.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/models/tmx.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/quotes.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/snapshot.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/summaries.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/tmx.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/trades.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/rest/vX.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/websocket/__init__.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/websocket/models/__init__.py +0 -0
- {massive-2.3.2 → massive-2.4.0}/massive/websocket/models/common.py +0 -0
|
@@ -920,3 +920,78 @@ class RiskFactorTaxonomy:
|
|
|
920
920
|
taxonomy=d.get("taxonomy"),
|
|
921
921
|
tertiary_category=d.get("tertiary_category"),
|
|
922
922
|
)
|
|
923
|
+
|
|
924
|
+
|
|
925
|
+
@modelclass
|
|
926
|
+
class FilingSection:
|
|
927
|
+
"""SEC document text section from a 10-K/10-Q (raw text content)."""
|
|
928
|
+
|
|
929
|
+
cik: Optional[str] = None
|
|
930
|
+
filing_date: Optional[str] = None
|
|
931
|
+
filing_url: Optional[str] = None
|
|
932
|
+
period_end: Optional[str] = None
|
|
933
|
+
section: Optional[str] = None
|
|
934
|
+
text: Optional[str] = None
|
|
935
|
+
ticker: Optional[str] = None
|
|
936
|
+
|
|
937
|
+
@staticmethod
|
|
938
|
+
def from_dict(d):
|
|
939
|
+
return FilingSection(
|
|
940
|
+
cik=d.get("cik"),
|
|
941
|
+
filing_date=d.get("filing_date"),
|
|
942
|
+
filing_url=d.get("filing_url"),
|
|
943
|
+
period_end=d.get("period_end"),
|
|
944
|
+
section=d.get("section"),
|
|
945
|
+
text=d.get("text"),
|
|
946
|
+
ticker=d.get("ticker"),
|
|
947
|
+
)
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
@modelclass
|
|
951
|
+
class Filing8K:
|
|
952
|
+
"""Parsed 8-K filing with item-level text content."""
|
|
953
|
+
|
|
954
|
+
accession_number: Optional[str] = None
|
|
955
|
+
cik: Optional[str] = None
|
|
956
|
+
filing_date: Optional[str] = None
|
|
957
|
+
filing_url: Optional[str] = None
|
|
958
|
+
form_type: Optional[str] = None
|
|
959
|
+
items_text: Optional[str] = None
|
|
960
|
+
ticker: Optional[str] = None
|
|
961
|
+
|
|
962
|
+
@staticmethod
|
|
963
|
+
def from_dict(d):
|
|
964
|
+
return Filing8K(
|
|
965
|
+
accession_number=d.get("accession_number"),
|
|
966
|
+
cik=d.get("cik"),
|
|
967
|
+
filing_date=d.get("filing_date"),
|
|
968
|
+
filing_url=d.get("filing_url"),
|
|
969
|
+
form_type=d.get("form_type"),
|
|
970
|
+
items_text=d.get("items_text"),
|
|
971
|
+
ticker=d.get("ticker"),
|
|
972
|
+
)
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
@modelclass
|
|
976
|
+
class FilingIndex:
|
|
977
|
+
"""Master index entry for any SEC filing (10-K, 8-K, 10-Q, etc.)."""
|
|
978
|
+
|
|
979
|
+
accession_number: Optional[str] = None
|
|
980
|
+
cik: Optional[str] = None
|
|
981
|
+
filing_date: Optional[str] = None
|
|
982
|
+
filing_url: Optional[str] = None
|
|
983
|
+
form_type: Optional[str] = None
|
|
984
|
+
issuer_name: Optional[str] = None
|
|
985
|
+
ticker: Optional[str] = None
|
|
986
|
+
|
|
987
|
+
@staticmethod
|
|
988
|
+
def from_dict(d):
|
|
989
|
+
return FilingIndex(
|
|
990
|
+
accession_number=d.get("accession_number"),
|
|
991
|
+
cik=d.get("cik"),
|
|
992
|
+
filing_date=d.get("filing_date"),
|
|
993
|
+
filing_url=d.get("filing_url"),
|
|
994
|
+
form_type=d.get("form_type"),
|
|
995
|
+
issuer_name=d.get("issuer_name"),
|
|
996
|
+
ticker=d.get("ticker"),
|
|
997
|
+
)
|
|
@@ -7,7 +7,8 @@ from ...modelclass import modelclass
|
|
|
7
7
|
|
|
8
8
|
@modelclass
|
|
9
9
|
class MinuteSnapshot:
|
|
10
|
-
"Most recent minute bar."
|
|
10
|
+
"""Most recent minute bar."""
|
|
11
|
+
|
|
11
12
|
accumulated_volume: Optional[float] = None
|
|
12
13
|
open: Optional[float] = None
|
|
13
14
|
high: Optional[float] = None
|
|
@@ -18,20 +19,24 @@ class MinuteSnapshot:
|
|
|
18
19
|
otc: Optional[bool] = None
|
|
19
20
|
timestamp: Optional[int] = None
|
|
20
21
|
transactions: Optional[int] = None
|
|
22
|
+
fractional_volume: Optional[str] = None
|
|
23
|
+
fractional_accumulated_volume: Optional[str] = None
|
|
21
24
|
|
|
22
25
|
@staticmethod
|
|
23
26
|
def from_dict(d):
|
|
24
27
|
return MinuteSnapshot(
|
|
25
|
-
d.get("av"
|
|
26
|
-
d.get("o"
|
|
27
|
-
d.get("h"
|
|
28
|
-
d.get("l"
|
|
29
|
-
d.get("c"
|
|
30
|
-
d.get("v"
|
|
31
|
-
d.get("vw"
|
|
32
|
-
d.get("otc"
|
|
33
|
-
d.get("t"
|
|
34
|
-
d.get("n"
|
|
28
|
+
accumulated_volume=d.get("av"),
|
|
29
|
+
open=d.get("o"),
|
|
30
|
+
high=d.get("h"),
|
|
31
|
+
low=d.get("l"),
|
|
32
|
+
close=d.get("c"),
|
|
33
|
+
volume=d.get("v"),
|
|
34
|
+
vwap=d.get("vw"),
|
|
35
|
+
otc=d.get("otc"),
|
|
36
|
+
timestamp=d.get("t"),
|
|
37
|
+
transactions=d.get("n"),
|
|
38
|
+
fractional_volume=d.get("dv"),
|
|
39
|
+
fractional_accumulated_volume=d.get("dav"),
|
|
35
40
|
)
|
|
36
41
|
|
|
37
42
|
|
|
@@ -318,10 +323,32 @@ class UniversalSnapshotSession:
|
|
|
318
323
|
low: Optional[float] = None
|
|
319
324
|
previous_close: Optional[float] = None
|
|
320
325
|
volume: Optional[float] = None
|
|
326
|
+
vwap: Optional[float] = None
|
|
327
|
+
last_updated: Optional[int] = None
|
|
328
|
+
fractional_volume: Optional[str] = None
|
|
321
329
|
|
|
322
330
|
@staticmethod
|
|
323
331
|
def from_dict(d):
|
|
324
|
-
return UniversalSnapshotSession(
|
|
332
|
+
return UniversalSnapshotSession(
|
|
333
|
+
price=d.get("price"),
|
|
334
|
+
change=d.get("change"),
|
|
335
|
+
change_percent=d.get("change_percent"),
|
|
336
|
+
early_trading_change=d.get("early_trading_change"),
|
|
337
|
+
early_trading_change_percent=d.get("early_trading_change_percent"),
|
|
338
|
+
regular_trading_change=d.get("regular_trading_change"),
|
|
339
|
+
regular_trading_change_percent=d.get("regular_trading_change_percent"),
|
|
340
|
+
late_trading_change=d.get("late_trading_change"),
|
|
341
|
+
late_trading_change_percent=d.get("late_trading_change_percent"),
|
|
342
|
+
open=d.get("open"),
|
|
343
|
+
close=d.get("close"),
|
|
344
|
+
high=d.get("high"),
|
|
345
|
+
low=d.get("low"),
|
|
346
|
+
previous_close=d.get("previous_close"),
|
|
347
|
+
volume=d.get("volume"),
|
|
348
|
+
vwap=d.get("vwap"),
|
|
349
|
+
last_updated=d.get("last_updated"),
|
|
350
|
+
fractional_volume=d.get("decimal_volume"),
|
|
351
|
+
)
|
|
325
352
|
|
|
326
353
|
|
|
327
354
|
@modelclass
|
|
@@ -330,8 +357,10 @@ class UniversalSnapshotLastQuote:
|
|
|
330
357
|
|
|
331
358
|
ask: Optional[float] = None
|
|
332
359
|
ask_size: Optional[float] = None
|
|
360
|
+
ask_exchange: Optional[int] = None
|
|
333
361
|
bid: Optional[float] = None
|
|
334
362
|
bid_size: Optional[float] = None
|
|
363
|
+
bid_exchange: Optional[int] = None
|
|
335
364
|
midpoint: Optional[float] = None
|
|
336
365
|
exchange: Optional[int] = None
|
|
337
366
|
timeframe: Optional[str] = None
|
|
@@ -339,7 +368,18 @@ class UniversalSnapshotLastQuote:
|
|
|
339
368
|
|
|
340
369
|
@staticmethod
|
|
341
370
|
def from_dict(d):
|
|
342
|
-
return UniversalSnapshotLastQuote(
|
|
371
|
+
return UniversalSnapshotLastQuote(
|
|
372
|
+
ask=d.get("ask"),
|
|
373
|
+
ask_size=d.get("ask_size"),
|
|
374
|
+
ask_exchange=d.get("ask_exchange"),
|
|
375
|
+
bid=d.get("bid"),
|
|
376
|
+
bid_size=d.get("bid_size"),
|
|
377
|
+
bid_exchange=d.get("bid_exchange"),
|
|
378
|
+
midpoint=d.get("midpoint"),
|
|
379
|
+
exchange=d.get("exchange"),
|
|
380
|
+
timeframe=d.get("timeframe"),
|
|
381
|
+
last_updated=d.get("last_updated"),
|
|
382
|
+
)
|
|
343
383
|
|
|
344
384
|
|
|
345
385
|
@modelclass
|
|
@@ -355,10 +395,51 @@ class UniversalSnapshotLastTrade:
|
|
|
355
395
|
last_updated: Optional[int] = None
|
|
356
396
|
participant_timestamp: Optional[int] = None
|
|
357
397
|
sip_timestamp: Optional[int] = None
|
|
398
|
+
fractional_size: Optional[str] = None
|
|
399
|
+
|
|
400
|
+
@staticmethod
|
|
401
|
+
def from_dict(d):
|
|
402
|
+
return UniversalSnapshotLastTrade(
|
|
403
|
+
id=d.get("id"),
|
|
404
|
+
price=d.get("price"),
|
|
405
|
+
size=d.get("size"),
|
|
406
|
+
exchange=d.get("exchange"),
|
|
407
|
+
conditions=d.get("conditions"),
|
|
408
|
+
timeframe=d.get("timeframe"),
|
|
409
|
+
last_updated=d.get("last_updated"),
|
|
410
|
+
participant_timestamp=d.get("participant_timestamp"),
|
|
411
|
+
sip_timestamp=d.get("sip_timestamp"),
|
|
412
|
+
fractional_size=d.get("decimal_size"),
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
@modelclass
|
|
417
|
+
class UniversalSnapshotLastMinute:
|
|
418
|
+
"""Contains the most recent minute-level aggregate for the asset."""
|
|
419
|
+
|
|
420
|
+
open: Optional[float] = None
|
|
421
|
+
close: Optional[float] = None
|
|
422
|
+
high: Optional[float] = None
|
|
423
|
+
low: Optional[float] = None
|
|
424
|
+
volume: Optional[float] = None
|
|
425
|
+
vwap: Optional[float] = None
|
|
426
|
+
transactions: Optional[int] = None
|
|
427
|
+
last_updated: Optional[int] = None
|
|
428
|
+
fractional_volume: Optional[str] = None
|
|
358
429
|
|
|
359
430
|
@staticmethod
|
|
360
431
|
def from_dict(d):
|
|
361
|
-
return
|
|
432
|
+
return UniversalSnapshotLastMinute(
|
|
433
|
+
open=d.get("open"),
|
|
434
|
+
close=d.get("close"),
|
|
435
|
+
high=d.get("high"),
|
|
436
|
+
low=d.get("low"),
|
|
437
|
+
volume=d.get("volume"),
|
|
438
|
+
vwap=d.get("vwap"),
|
|
439
|
+
transactions=d.get("transactions"),
|
|
440
|
+
last_updated=d.get("last_updated"),
|
|
441
|
+
fractional_volume=d.get("decimal_volume"),
|
|
442
|
+
)
|
|
362
443
|
|
|
363
444
|
|
|
364
445
|
@modelclass
|
|
@@ -374,7 +455,14 @@ class UniversalSnapshotUnderlyingAsset:
|
|
|
374
455
|
|
|
375
456
|
@staticmethod
|
|
376
457
|
def from_dict(d):
|
|
377
|
-
return UniversalSnapshotUnderlyingAsset(
|
|
458
|
+
return UniversalSnapshotUnderlyingAsset(
|
|
459
|
+
ticker=d.get("ticker"),
|
|
460
|
+
price=d.get("price"),
|
|
461
|
+
value=d.get("value"),
|
|
462
|
+
change_to_break_even=d.get("change_to_break_even"),
|
|
463
|
+
timeframe=d.get("timeframe"),
|
|
464
|
+
last_updated=d.get("last_updated"),
|
|
465
|
+
)
|
|
378
466
|
|
|
379
467
|
|
|
380
468
|
@modelclass
|
|
@@ -389,18 +477,25 @@ class UniversalSnapshotDetails:
|
|
|
389
477
|
|
|
390
478
|
@staticmethod
|
|
391
479
|
def from_dict(d):
|
|
392
|
-
return UniversalSnapshotDetails(
|
|
480
|
+
return UniversalSnapshotDetails(
|
|
481
|
+
contract_type=d.get("contract_type"),
|
|
482
|
+
exercise_style=d.get("exercise_style"),
|
|
483
|
+
expiration_date=d.get("expiration_date"),
|
|
484
|
+
shares_per_contract=d.get("shares_per_contract"),
|
|
485
|
+
strike_price=d.get("strike_price"),
|
|
486
|
+
)
|
|
393
487
|
|
|
394
488
|
|
|
395
489
|
@modelclass
|
|
396
490
|
class UniversalSnapshot:
|
|
397
|
-
"""Contains snapshot data for an asset."""
|
|
491
|
+
"""Contains snapshot data for an asset (stocks, options, indices, fx, crypto)."""
|
|
398
492
|
|
|
399
493
|
ticker: Optional[str] = None
|
|
400
494
|
type: Optional[str] = None
|
|
401
495
|
session: Optional[UniversalSnapshotSession] = None
|
|
402
496
|
last_quote: Optional[UniversalSnapshotLastQuote] = None
|
|
403
497
|
last_trade: Optional[UniversalSnapshotLastTrade] = None
|
|
498
|
+
last_minute: Optional[UniversalSnapshotLastMinute] = None
|
|
404
499
|
greeks: Optional[Greeks] = None
|
|
405
500
|
underlying_asset: Optional[UniversalSnapshotUnderlyingAsset] = None
|
|
406
501
|
details: Optional[UniversalSnapshotDetails] = None
|
|
@@ -412,12 +507,15 @@ class UniversalSnapshot:
|
|
|
412
507
|
fair_market_value: Optional[float] = None
|
|
413
508
|
error: Optional[str] = None
|
|
414
509
|
message: Optional[str] = None
|
|
510
|
+
value: Optional[float] = None
|
|
511
|
+
last_updated: Optional[int] = None
|
|
512
|
+
timeframe: Optional[str] = None
|
|
415
513
|
|
|
416
514
|
@staticmethod
|
|
417
515
|
def from_dict(d):
|
|
418
516
|
return UniversalSnapshot(
|
|
419
|
-
ticker=d.get("ticker"
|
|
420
|
-
type=d.get("type"
|
|
517
|
+
ticker=d.get("ticker"),
|
|
518
|
+
type=d.get("type"),
|
|
421
519
|
session=(
|
|
422
520
|
None
|
|
423
521
|
if "session" not in d
|
|
@@ -433,7 +531,12 @@ class UniversalSnapshot:
|
|
|
433
531
|
if "last_trade" not in d
|
|
434
532
|
else UniversalSnapshotLastTrade.from_dict(d["last_trade"])
|
|
435
533
|
),
|
|
436
|
-
|
|
534
|
+
last_minute=(
|
|
535
|
+
None
|
|
536
|
+
if "last_minute" not in d
|
|
537
|
+
else UniversalSnapshotLastMinute.from_dict(d["last_minute"])
|
|
538
|
+
),
|
|
539
|
+
greeks=(None if "greeks" not in d else Greeks.from_dict(d["greeks"])),
|
|
437
540
|
underlying_asset=(
|
|
438
541
|
None
|
|
439
542
|
if "underlying_asset" not in d
|
|
@@ -444,12 +547,15 @@ class UniversalSnapshot:
|
|
|
444
547
|
if "details" not in d
|
|
445
548
|
else UniversalSnapshotDetails.from_dict(d["details"])
|
|
446
549
|
),
|
|
447
|
-
break_even_price=d.get("break_even_price"
|
|
448
|
-
implied_volatility=d.get("implied_volatility"
|
|
449
|
-
open_interest=d.get("open_interest"
|
|
450
|
-
market_status=d.get("market_status"
|
|
451
|
-
name=d.get("name"
|
|
452
|
-
fair_market_value=d.get("fmv"
|
|
453
|
-
error=d.get("error"
|
|
454
|
-
message=d.get("message"
|
|
550
|
+
break_even_price=d.get("break_even_price"),
|
|
551
|
+
implied_volatility=d.get("implied_volatility"),
|
|
552
|
+
open_interest=d.get("open_interest"),
|
|
553
|
+
market_status=d.get("market_status"),
|
|
554
|
+
name=d.get("name"),
|
|
555
|
+
fair_market_value=d.get("fmv"),
|
|
556
|
+
error=d.get("error"),
|
|
557
|
+
message=d.get("message"),
|
|
558
|
+
value=d.get("value"),
|
|
559
|
+
last_updated=d.get("last_updated"),
|
|
560
|
+
timeframe=d.get("timeframe"),
|
|
455
561
|
)
|
|
@@ -26,7 +26,8 @@ class Trade:
|
|
|
26
26
|
|
|
27
27
|
@modelclass
|
|
28
28
|
class LastTrade:
|
|
29
|
-
"Contains data for the most recent trade for a given ticker symbol."
|
|
29
|
+
"""Contains data for the most recent trade for a given ticker symbol."""
|
|
30
|
+
|
|
30
31
|
ticker: Optional[str] = None
|
|
31
32
|
trf_timestamp: Optional[int] = None
|
|
32
33
|
sequence_number: Optional[float] = None
|
|
@@ -40,25 +41,25 @@ class LastTrade:
|
|
|
40
41
|
size: Optional[float] = None
|
|
41
42
|
exchange: Optional[int] = None
|
|
42
43
|
tape: Optional[int] = None
|
|
43
|
-
|
|
44
|
+
fractional_size: Optional[str] = None
|
|
44
45
|
|
|
45
46
|
@staticmethod
|
|
46
47
|
def from_dict(d):
|
|
47
48
|
return LastTrade(
|
|
48
|
-
d.get("T"
|
|
49
|
-
d.get("f"
|
|
50
|
-
d.get("q"
|
|
51
|
-
d.get("t"
|
|
52
|
-
d.get("y"
|
|
53
|
-
d.get("c"
|
|
54
|
-
d.get("e"
|
|
55
|
-
d.get("i"
|
|
56
|
-
d.get("p"
|
|
57
|
-
d.get("r"
|
|
58
|
-
d.get("s"
|
|
59
|
-
d.get("x"
|
|
60
|
-
d.get("z"
|
|
61
|
-
d.get("ds"
|
|
49
|
+
ticker=d.get("T"),
|
|
50
|
+
trf_timestamp=d.get("f"),
|
|
51
|
+
sequence_number=d.get("q"),
|
|
52
|
+
sip_timestamp=d.get("t"),
|
|
53
|
+
participant_timestamp=d.get("y"),
|
|
54
|
+
conditions=d.get("c"),
|
|
55
|
+
correction=d.get("e"),
|
|
56
|
+
id=d.get("i"),
|
|
57
|
+
price=d.get("p"),
|
|
58
|
+
trf_id=d.get("r"),
|
|
59
|
+
size=d.get("s"),
|
|
60
|
+
exchange=d.get("x"),
|
|
61
|
+
tape=d.get("z"),
|
|
62
|
+
fractional_size=d.get("ds"),
|
|
62
63
|
)
|
|
63
64
|
|
|
64
65
|
|
|
@@ -28,6 +28,9 @@ from .models import (
|
|
|
28
28
|
ShortVolume,
|
|
29
29
|
RiskFactor,
|
|
30
30
|
RiskFactorTaxonomy,
|
|
31
|
+
FilingSection,
|
|
32
|
+
Filing8K,
|
|
33
|
+
FilingIndex,
|
|
31
34
|
)
|
|
32
35
|
from urllib3 import HTTPResponse
|
|
33
36
|
from datetime import date
|
|
@@ -793,21 +796,22 @@ class ContractsClient(BaseClient):
|
|
|
793
796
|
cik_gte: Optional[str] = None,
|
|
794
797
|
cik_lt: Optional[str] = None,
|
|
795
798
|
cik_lte: Optional[str] = None,
|
|
796
|
-
limit: Optional[int] =
|
|
797
|
-
sort: Optional[Union[str, Sort]] =
|
|
799
|
+
limit: Optional[int] = 100,
|
|
800
|
+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
|
|
798
801
|
params: Optional[Dict[str, Any]] = None,
|
|
799
802
|
raw: bool = False,
|
|
800
803
|
options: Optional[RequestOptionBuilder] = None,
|
|
801
804
|
) -> Union[Iterator[RiskFactor], HTTPResponse]:
|
|
802
805
|
"""
|
|
803
|
-
|
|
806
|
+
Get categorized risk factors extracted from 10-K filings (with supporting_text).
|
|
804
807
|
"""
|
|
805
808
|
url = "/stocks/filings/vX/risk-factors"
|
|
806
809
|
return self._paginate(
|
|
807
810
|
path=url,
|
|
808
811
|
params=self._get_params(self.list_stocks_filings_risk_factors, locals()),
|
|
809
|
-
|
|
812
|
+
result_key="results",
|
|
810
813
|
deserializer=RiskFactor.from_dict,
|
|
814
|
+
raw=raw,
|
|
811
815
|
options=options,
|
|
812
816
|
)
|
|
813
817
|
|
|
@@ -836,20 +840,154 @@ class ContractsClient(BaseClient):
|
|
|
836
840
|
tertiary_category_gte: Optional[str] = None,
|
|
837
841
|
tertiary_category_lt: Optional[str] = None,
|
|
838
842
|
tertiary_category_lte: Optional[str] = None,
|
|
839
|
-
limit: Optional[int] =
|
|
840
|
-
sort: Optional[Union[str, Sort]] =
|
|
843
|
+
limit: Optional[int] = 200,
|
|
844
|
+
sort: Optional[Union[str, Sort]] = "taxonomy.desc",
|
|
841
845
|
params: Optional[Dict[str, Any]] = None,
|
|
842
846
|
raw: bool = False,
|
|
843
847
|
options: Optional[RequestOptionBuilder] = None,
|
|
844
848
|
) -> Union[Iterator[RiskFactorTaxonomy], HTTPResponse]:
|
|
845
849
|
"""
|
|
846
|
-
|
|
850
|
+
Get the taxonomy/categories used to classify risk factors (kept old name for backward compatibility).
|
|
847
851
|
"""
|
|
848
852
|
url = "/stocks/taxonomies/vX/risk-factors"
|
|
849
853
|
return self._paginate(
|
|
850
854
|
path=url,
|
|
851
855
|
params=self._get_params(self.list_stocks_taxonomies_risk_factors, locals()),
|
|
852
|
-
|
|
856
|
+
result_key="results",
|
|
853
857
|
deserializer=RiskFactorTaxonomy.from_dict,
|
|
858
|
+
raw=raw,
|
|
859
|
+
options=options,
|
|
860
|
+
)
|
|
861
|
+
|
|
862
|
+
def list_stocks_filings_10k_sections(
|
|
863
|
+
self,
|
|
864
|
+
cik: Optional[str] = None,
|
|
865
|
+
cik_any_of: Optional[str] = None,
|
|
866
|
+
cik_gt: Optional[str] = None,
|
|
867
|
+
cik_gte: Optional[str] = None,
|
|
868
|
+
cik_lt: Optional[str] = None,
|
|
869
|
+
cik_lte: Optional[str] = None,
|
|
870
|
+
ticker: Optional[str] = None,
|
|
871
|
+
ticker_any_of: Optional[str] = None,
|
|
872
|
+
ticker_gt: Optional[str] = None,
|
|
873
|
+
ticker_gte: Optional[str] = None,
|
|
874
|
+
ticker_lt: Optional[str] = None,
|
|
875
|
+
ticker_lte: Optional[str] = None,
|
|
876
|
+
section: Optional[str] = None,
|
|
877
|
+
section_any_of: Optional[str] = None,
|
|
878
|
+
filing_date: Optional[Union[str, date]] = None,
|
|
879
|
+
filing_date_gt: Optional[Union[str, date]] = None,
|
|
880
|
+
filing_date_gte: Optional[Union[str, date]] = None,
|
|
881
|
+
filing_date_lt: Optional[Union[str, date]] = None,
|
|
882
|
+
filing_date_lte: Optional[Union[str, date]] = None,
|
|
883
|
+
period_end: Optional[Union[str, date]] = None,
|
|
884
|
+
period_end_gt: Optional[Union[str, date]] = None,
|
|
885
|
+
period_end_gte: Optional[Union[str, date]] = None,
|
|
886
|
+
period_end_lt: Optional[Union[str, date]] = None,
|
|
887
|
+
period_end_lte: Optional[Union[str, date]] = None,
|
|
888
|
+
limit: Optional[int] = 100,
|
|
889
|
+
sort: Optional[Union[str, Sort]] = "period_end.desc",
|
|
890
|
+
params: Optional[Dict[str, Any]] = None,
|
|
891
|
+
raw: bool = False,
|
|
892
|
+
options: Optional[RequestOptionBuilder] = None,
|
|
893
|
+
) -> Union[Iterator[FilingSection], HTTPResponse]:
|
|
894
|
+
"""
|
|
895
|
+
Get raw text sections from 10-K/10-Q filings (business, risk_factors, etc.).
|
|
896
|
+
"""
|
|
897
|
+
url = "/stocks/filings/10-K/vX/sections"
|
|
898
|
+
return self._paginate(
|
|
899
|
+
path=url,
|
|
900
|
+
params=self._get_params(self.list_stocks_filings_10k_sections, locals()),
|
|
901
|
+
result_key="results",
|
|
902
|
+
deserializer=FilingSection.from_dict,
|
|
903
|
+
raw=raw,
|
|
904
|
+
options=options,
|
|
905
|
+
)
|
|
906
|
+
|
|
907
|
+
def list_stocks_filings_8k_text(
|
|
908
|
+
self,
|
|
909
|
+
cik: Optional[str] = None,
|
|
910
|
+
cik_any_of: Optional[str] = None,
|
|
911
|
+
cik_gt: Optional[str] = None,
|
|
912
|
+
cik_gte: Optional[str] = None,
|
|
913
|
+
cik_lt: Optional[str] = None,
|
|
914
|
+
cik_lte: Optional[str] = None,
|
|
915
|
+
ticker: Optional[str] = None,
|
|
916
|
+
ticker_any_of: Optional[str] = None,
|
|
917
|
+
ticker_gt: Optional[str] = None,
|
|
918
|
+
ticker_gte: Optional[str] = None,
|
|
919
|
+
ticker_lt: Optional[str] = None,
|
|
920
|
+
ticker_lte: Optional[str] = None,
|
|
921
|
+
form_type: Optional[str] = None,
|
|
922
|
+
form_type_any_of: Optional[str] = None,
|
|
923
|
+
form_type_gt: Optional[str] = None,
|
|
924
|
+
form_type_gte: Optional[str] = None,
|
|
925
|
+
form_type_lt: Optional[str] = None,
|
|
926
|
+
form_type_lte: Optional[str] = None,
|
|
927
|
+
filing_date: Optional[Union[str, date]] = None,
|
|
928
|
+
filing_date_gt: Optional[Union[str, date]] = None,
|
|
929
|
+
filing_date_gte: Optional[Union[str, date]] = None,
|
|
930
|
+
filing_date_lt: Optional[Union[str, date]] = None,
|
|
931
|
+
filing_date_lte: Optional[Union[str, date]] = None,
|
|
932
|
+
limit: Optional[int] = 100,
|
|
933
|
+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
|
|
934
|
+
params: Optional[Dict[str, Any]] = None,
|
|
935
|
+
raw: bool = False,
|
|
936
|
+
options: Optional[RequestOptionBuilder] = None,
|
|
937
|
+
) -> Union[Iterator[Filing8K], HTTPResponse]:
|
|
938
|
+
"""
|
|
939
|
+
Get parsed 8-K filings (earnings, acquisitions, executive changes, etc.).
|
|
940
|
+
"""
|
|
941
|
+
url = "/stocks/filings/8-K/vX/text"
|
|
942
|
+
return self._paginate(
|
|
943
|
+
path=url,
|
|
944
|
+
params=self._get_params(self.list_stocks_filings_8k_text, locals()),
|
|
945
|
+
result_key="results",
|
|
946
|
+
deserializer=Filing8K.from_dict,
|
|
947
|
+
raw=raw,
|
|
948
|
+
options=options,
|
|
949
|
+
)
|
|
950
|
+
|
|
951
|
+
def list_stocks_filings_index(
|
|
952
|
+
self,
|
|
953
|
+
cik: Optional[str] = None,
|
|
954
|
+
cik_any_of: Optional[str] = None,
|
|
955
|
+
cik_gt: Optional[str] = None,
|
|
956
|
+
cik_gte: Optional[str] = None,
|
|
957
|
+
cik_lt: Optional[str] = None,
|
|
958
|
+
cik_lte: Optional[str] = None,
|
|
959
|
+
ticker: Optional[str] = None,
|
|
960
|
+
ticker_any_of: Optional[str] = None,
|
|
961
|
+
ticker_gt: Optional[str] = None,
|
|
962
|
+
ticker_gte: Optional[str] = None,
|
|
963
|
+
ticker_lt: Optional[str] = None,
|
|
964
|
+
ticker_lte: Optional[str] = None,
|
|
965
|
+
form_type: Optional[str] = None,
|
|
966
|
+
form_type_any_of: Optional[str] = None,
|
|
967
|
+
form_type_gt: Optional[str] = None,
|
|
968
|
+
form_type_gte: Optional[str] = None,
|
|
969
|
+
form_type_lt: Optional[str] = None,
|
|
970
|
+
form_type_lte: Optional[str] = None,
|
|
971
|
+
filing_date: Optional[Union[str, date]] = None,
|
|
972
|
+
filing_date_gt: Optional[Union[str, date]] = None,
|
|
973
|
+
filing_date_gte: Optional[Union[str, date]] = None,
|
|
974
|
+
filing_date_lt: Optional[Union[str, date]] = None,
|
|
975
|
+
filing_date_lte: Optional[Union[str, date]] = None,
|
|
976
|
+
limit: Optional[int] = 1000,
|
|
977
|
+
sort: Optional[Union[str, Sort]] = "filing_date.desc",
|
|
978
|
+
params: Optional[Dict[str, Any]] = None,
|
|
979
|
+
raw: bool = False,
|
|
980
|
+
options: Optional[RequestOptionBuilder] = None,
|
|
981
|
+
) -> Union[Iterator[FilingIndex], HTTPResponse]:
|
|
982
|
+
"""
|
|
983
|
+
Get the master index of all SEC filings (10-K, 8-K, 10-Q, S-1, 4, etc.).
|
|
984
|
+
"""
|
|
985
|
+
url = "/stocks/filings/vX/index"
|
|
986
|
+
return self._paginate(
|
|
987
|
+
path=url,
|
|
988
|
+
params=self._get_params(self.list_stocks_filings_index, locals()),
|
|
989
|
+
result_key="results",
|
|
990
|
+
deserializer=FilingIndex.from_dict,
|
|
991
|
+
raw=raw,
|
|
854
992
|
options=options,
|
|
855
993
|
)
|
|
@@ -22,6 +22,8 @@ class EquityAgg:
|
|
|
22
22
|
start_timestamp: Optional[int] = None
|
|
23
23
|
end_timestamp: Optional[int] = None
|
|
24
24
|
otc: Optional[bool] = None
|
|
25
|
+
fractional_volume: Optional[str] = None
|
|
26
|
+
fractional_accumulated_volume: Optional[str] = None
|
|
25
27
|
|
|
26
28
|
@staticmethod
|
|
27
29
|
def from_dict(d):
|
|
@@ -41,6 +43,8 @@ class EquityAgg:
|
|
|
41
43
|
d.get("s", None),
|
|
42
44
|
d.get("e", None),
|
|
43
45
|
d.get("otc", None),
|
|
46
|
+
d.get("dv", None),
|
|
47
|
+
d.get("dav", None),
|
|
44
48
|
)
|
|
45
49
|
|
|
46
50
|
|
|
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
|