datamule 1.1.1__py3-none-any.whl → 1.1.6__py3-none-any.whl

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.
datamule/__init__.py CHANGED
@@ -3,6 +3,8 @@ from .portfolio import Portfolio
3
3
  from .document import Document
4
4
  from .helper import _load_package_csv, load_package_dataset
5
5
  from .config import Config
6
+ from .sheet import Sheet
7
+ from .index import Index
6
8
 
7
9
 
8
10
  # Keep the notebook environment setup
@@ -32,5 +34,7 @@ __all__ = [
32
34
  'Portfolio',
33
35
  'Submission',
34
36
  'Document',
35
- 'Config'
37
+ 'Config',
38
+ 'Sheet',
39
+ 'Index',
36
40
  ]
datamule/index.py ADDED
@@ -0,0 +1,62 @@
1
+ from pathlib import Path
2
+ from .sec.submissions.textsearch import query
3
+ from .helper import _process_cik_and_metadata_filters, load_package_dataset
4
+
5
+ class Index:
6
+ def __init__(self, path=None):
7
+ self.path = Path(path) if path else None
8
+
9
+ def search_submissions(
10
+ self,
11
+ text_query,
12
+ start_date=None,
13
+ end_date=None,
14
+ submission_type=None,
15
+ cik=None,
16
+ ticker=None,
17
+ requests_per_second=5.0,
18
+ quiet=True,
19
+ **kwargs
20
+ ):
21
+ """
22
+ Search SEC filings for the given text query.
23
+
24
+ Args:
25
+ text_query (str): Text to search for in SEC filings.
26
+ start_date (str or date, optional): Start date for filing search.
27
+ end_date (str or date, optional): End date for filing search.
28
+ submission_type (str, optional): Type of SEC submission to search.
29
+ cik (str, int, or list, optional): CIK(s) to filter by.
30
+ ticker (str or list, optional): Ticker(s) to filter by.
31
+ requests_per_second (float, optional): Rate limit for SEC API requests.
32
+ quiet (bool, optional): Whether to suppress output.
33
+ **kwargs: Additional filters to apply.
34
+
35
+ Returns:
36
+ dict: Search results from the query function.
37
+ """
38
+ # Process CIK and ticker filters if provided
39
+ if cik is not None or ticker is not None:
40
+ cik_list = _process_cik_and_metadata_filters(cik, ticker, **kwargs)
41
+ # Add CIK filter to the query if we have results
42
+ if cik_list:
43
+ # Implementation note: Update as needed - this assumes your query function
44
+ # can accept a cik parameter, otherwise you may need additional logic here
45
+ kwargs['cik'] = cik_list
46
+
47
+ # Execute the search query
48
+ results = query(
49
+ f'{text_query}',
50
+ filing_date=(start_date, end_date),
51
+ requests_per_second=requests_per_second,
52
+ quiet=quiet,
53
+ submission_type=submission_type,
54
+ **kwargs
55
+ )
56
+
57
+ # Save results to path if specified
58
+ if self.path:
59
+ self._save_results(results, text_query)
60
+
61
+ return results
62
+
@@ -5,7 +5,7 @@ from ..rss.monitor import start_monitor # Import start_monitor directly
5
5
  import pytz
6
6
 
7
7
 
8
- async def _process_efts_hits(hits, collected_accession_numbers, data_callback=None):
8
+ async def _process_efts_hits(hits, collected_accession_numbers, data_callback=None,rate_limiter=None):
9
9
  """Process EFTS hits, collect accession numbers, and call data callback."""
10
10
  processed_hits = []
11
11
 
@@ -36,7 +36,7 @@ async def _process_efts_hits(hits, collected_accession_numbers, data_callback=No
36
36
 
37
37
  # Call data callback if provided
38
38
  if data_callback and processed_hits:
39
- await data_callback(processed_hits)
39
+ await data_callback(processed_hits, rate_limiter)
40
40
 
41
41
  return processed_hits
42
42
 
@@ -61,7 +61,7 @@ async def _master_monitor_impl(data_callback=None, poll_callback=None, submissio
61
61
 
62
62
  # Prepare a wrapper callback to collect accession numbers
63
63
  async def process_callback(hits):
64
- await _process_efts_hits(hits, collected_accession_numbers, data_callback)
64
+ await _process_efts_hits(hits, collected_accession_numbers, data_callback, efts_query.limiter)
65
65
 
66
66
  # Create an EFTSQuery instance
67
67
  efts_query = EFTSQuery(requests_per_second=requests_per_second)
@@ -1,8 +1,8 @@
1
1
  from pathlib import Path
2
- from ..helper import _process_cik_and_metadata_filters, load_package_dataset
3
- from ..sec.xbrl.downloadcompanyfacts import download_company_facts
2
+ from .helper import _process_cik_and_metadata_filters, load_package_dataset
3
+ from .sec.xbrl.downloadcompanyfacts import download_company_facts
4
4
 
5
- class Book:
5
+ class Sheet:
6
6
  def __init__(self, path):
7
7
  self.path = Path(path)
8
8
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamule
3
- Version: 1.1.1
3
+ Version: 1.1.6
4
4
  Summary: Making it easier to use SEC filings.
5
5
  Home-page: https://github.com/john-friedman/datamule-python
6
6
  Author: John Friedman
@@ -1,11 +1,11 @@
1
- datamule/__init__.py,sha256=0npnB3i2F7YB7etG315oDiCd-eMo-A6MP5LX2gQclHY,914
1
+ datamule/__init__.py,sha256=l6YlwT5EeRxPlCtO5Jd4I8l266rSRUJyfFe97cRtSCM,991
2
2
  datamule/config.py,sha256=Y--CVv7JcgrjJkMOSLrvm2S8B9ost6RMSkGviP-MKtg,883
3
3
  datamule/document.py,sha256=BC8jdVy9pMOA9ghIqV5N2XJidmVNThqbBohsuSAnVoY,10813
4
4
  datamule/helper.py,sha256=xgOVnea-lUlQ5I-U0vYUp0VeKPNZehNhqjJvegA3lYE,3342
5
+ datamule/index.py,sha256=0txvbzPcvY1GsdxA-wGdLzAByxSeE_1VyyBp9mZEQRM,2292
5
6
  datamule/portfolio.py,sha256=JmZlTrom_g7FXKXxWp_CiQTyC7p6_cDP08G0kFUja48,6982
7
+ datamule/sheet.py,sha256=WwumRdniClGU7W3AXVLOpCdMnepLC7KMrRpQlA6_NUY,1022
6
8
  datamule/submission.py,sha256=JsxYlEz1Ywu6eC32OS15p4p-p8qB6SWd_rXuf2p5UfY,1247
7
- datamule/book/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- datamule/book/book.py,sha256=QWiowVNqb84o-JcVo0fpKumxnIbBge2ZeKwHxqkVMqw,1023
9
9
  datamule/mapping_dicts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  datamule/mapping_dicts/txt_mapping_dicts.py,sha256=DQPrGYbAPQxomRUtt4iiMGrwuF7BHc_LeFBQuYBzU9o,6311
11
11
  datamule/mapping_dicts/xml_mapping_dicts.py,sha256=Z22yDVwKYonUfM5foQP00dVDE8EHhhMKp0CLqVKV5OI,438
@@ -18,7 +18,7 @@ datamule/sec/rss/monitor.py,sha256=6r4EYaSlGu6VYErlj9zXJsIMLVie1cfacSZU-ESfuBI,1
18
18
  datamule/sec/submissions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  datamule/sec/submissions/downloader.py,sha256=HxbSkNotLLW6ROmU30rnXPlCo9gY3SoB1Z4ZWvj9FIY,2669
20
20
  datamule/sec/submissions/eftsquery.py,sha256=v6YMBZzksqweqHnNIllMFN-frWypAgvZPKx2FH1UrL4,22515
21
- datamule/sec/submissions/monitor.py,sha256=XkwH5nvzr_dNttmFRQ52m7344IKbOtWDfOZIEdie4H8,5234
21
+ datamule/sec/submissions/monitor.py,sha256=F24I9yn1k8ggbCJQ-Vk7go_qJHlpkBzVKFYKDs_CWLs,5287
22
22
  datamule/sec/submissions/streamer.py,sha256=hc61le7gGIIWp1KEaOv_PhriUxf7YYFkQrSKELlZ3pg,9748
23
23
  datamule/sec/submissions/textsearch.py,sha256=oEIUrcO3HW-4dcyPCiOTvM7UUimNEM4HNIb-Juvc1BQ,4642
24
24
  datamule/sec/xbrl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -29,7 +29,7 @@ datamule/sec/xbrl/xbrlmonitor.py,sha256=TKFVfSyyUUfUgFQw4WxEVs4g8Nh-2C0tygNIRmTq
29
29
  datamule/seclibrary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  datamule/seclibrary/downloader.py,sha256=Zb1TxsIz887tO3MJVP66siYVtNus89ti-g9oZ6VywrM,11500
31
31
  datamule/seclibrary/query.py,sha256=qGuursTERRbOGfoDcYcpo4oWkW3PCBW6x1Qf1Puiak4,7352
32
- datamule-1.1.1.dist-info/METADATA,sha256=VZQtm8MY--M1N08bbO90e6jS3893-g2V8hFCT_9PGrc,512
33
- datamule-1.1.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
34
- datamule-1.1.1.dist-info/top_level.txt,sha256=iOfgmtSMFVyr7JGl_bYSTDry79JbmsG4p8zKq89ktKk,9
35
- datamule-1.1.1.dist-info/RECORD,,
32
+ datamule-1.1.6.dist-info/METADATA,sha256=2kV79oqPrN2_HTcd4bxbJ0Q2_nP7Ta5Z79yskrST5S8,512
33
+ datamule-1.1.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
34
+ datamule-1.1.6.dist-info/top_level.txt,sha256=iOfgmtSMFVyr7JGl_bYSTDry79JbmsG4p8zKq89ktKk,9
35
+ datamule-1.1.6.dist-info/RECORD,,
datamule/book/__init__.py DELETED
File without changes