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.
Files changed (49) hide show
  1. {massive-2.3.2 → massive-2.4.0}/PKG-INFO +1 -1
  2. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/financials.py +75 -0
  3. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/snapshot.py +134 -28
  4. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/trades.py +17 -16
  5. {massive-2.3.2 → massive-2.4.0}/massive/rest/reference.py +146 -8
  6. {massive-2.3.2 → massive-2.4.0}/massive/websocket/models/models.py +4 -0
  7. {massive-2.3.2 → massive-2.4.0}/pyproject.toml +1 -1
  8. {massive-2.3.2 → massive-2.4.0}/LICENSE +0 -0
  9. {massive-2.3.2 → massive-2.4.0}/massive/__init__.py +0 -0
  10. {massive-2.3.2 → massive-2.4.0}/massive/exceptions.py +0 -0
  11. {massive-2.3.2 → massive-2.4.0}/massive/logging.py +0 -0
  12. {massive-2.3.2 → massive-2.4.0}/massive/modelclass.py +0 -0
  13. {massive-2.3.2 → massive-2.4.0}/massive/rest/__init__.py +0 -0
  14. {massive-2.3.2 → massive-2.4.0}/massive/rest/aggs.py +0 -0
  15. {massive-2.3.2 → massive-2.4.0}/massive/rest/base.py +0 -0
  16. {massive-2.3.2 → massive-2.4.0}/massive/rest/benzinga.py +0 -0
  17. {massive-2.3.2 → massive-2.4.0}/massive/rest/economy.py +0 -0
  18. {massive-2.3.2 → massive-2.4.0}/massive/rest/etf_global.py +0 -0
  19. {massive-2.3.2 → massive-2.4.0}/massive/rest/financials.py +0 -0
  20. {massive-2.3.2 → massive-2.4.0}/massive/rest/futures.py +0 -0
  21. {massive-2.3.2 → massive-2.4.0}/massive/rest/indicators.py +0 -0
  22. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/__init__.py +0 -0
  23. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/aggs.py +0 -0
  24. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/benzinga.py +0 -0
  25. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/common.py +0 -0
  26. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/conditions.py +0 -0
  27. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/contracts.py +0 -0
  28. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/dividends.py +0 -0
  29. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/economy.py +0 -0
  30. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/etf_global.py +0 -0
  31. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/exchanges.py +0 -0
  32. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/futures.py +0 -0
  33. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/indicators.py +0 -0
  34. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/markets.py +0 -0
  35. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/quotes.py +0 -0
  36. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/request.py +0 -0
  37. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/splits.py +0 -0
  38. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/summaries.py +0 -0
  39. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/tickers.py +0 -0
  40. {massive-2.3.2 → massive-2.4.0}/massive/rest/models/tmx.py +0 -0
  41. {massive-2.3.2 → massive-2.4.0}/massive/rest/quotes.py +0 -0
  42. {massive-2.3.2 → massive-2.4.0}/massive/rest/snapshot.py +0 -0
  43. {massive-2.3.2 → massive-2.4.0}/massive/rest/summaries.py +0 -0
  44. {massive-2.3.2 → massive-2.4.0}/massive/rest/tmx.py +0 -0
  45. {massive-2.3.2 → massive-2.4.0}/massive/rest/trades.py +0 -0
  46. {massive-2.3.2 → massive-2.4.0}/massive/rest/vX.py +0 -0
  47. {massive-2.3.2 → massive-2.4.0}/massive/websocket/__init__.py +0 -0
  48. {massive-2.3.2 → massive-2.4.0}/massive/websocket/models/__init__.py +0 -0
  49. {massive-2.3.2 → massive-2.4.0}/massive/websocket/models/common.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: massive
3
- Version: 2.3.2
3
+ Version: 2.4.0
4
4
  Summary: Official Massive (formerly Polygon.io) REST and Websocket client.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -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", None),
26
- d.get("o", None),
27
- d.get("h", None),
28
- d.get("l", None),
29
- d.get("c", None),
30
- d.get("v", None),
31
- d.get("vw", None),
32
- d.get("otc", None),
33
- d.get("t", None),
34
- d.get("n", None),
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(**d)
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(**d)
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 UniversalSnapshotLastTrade(**d)
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(**d)
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(**d)
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", None),
420
- type=d.get("type", None),
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
- greeks=None if "greeks" not in d else Greeks.from_dict(d["greeks"]),
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", None),
448
- implied_volatility=d.get("implied_volatility", None),
449
- open_interest=d.get("open_interest", None),
450
- market_status=d.get("market_status", None),
451
- name=d.get("name", None),
452
- fair_market_value=d.get("fmv", None),
453
- error=d.get("error", None),
454
- message=d.get("message", None),
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
- fractional_shares: Optional[str] = None
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", None),
49
- d.get("f", None),
50
- d.get("q", None),
51
- d.get("t", None),
52
- d.get("y", None),
53
- d.get("c", None),
54
- d.get("e", None),
55
- d.get("i", None),
56
- d.get("p", None),
57
- d.get("r", None),
58
- d.get("s", None),
59
- d.get("x", None),
60
- d.get("z", None),
61
- d.get("ds", None),
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] = None,
797
- sort: Optional[Union[str, Sort]] = None,
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
- Endpoint: GET /stocks/filings/vX/risk-factors
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
- raw=raw,
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] = None,
840
- sort: Optional[Union[str, Sort]] = None,
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
- Endpoint: GET /stocks/taxonomies/vX/risk-factors
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
- raw=raw,
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
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "massive"
3
- version = "2.3.2"
3
+ version = "2.4.0"
4
4
  description = "Official Massive (formerly Polygon.io) REST and Websocket client."
5
5
  authors = ["massive.com"]
6
6
  license = "MIT"
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