datamule 2.1.5__py3-none-any.whl → 2.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/document/document.py +43 -44
- datamule/sheet.py +1 -401
- {datamule-2.1.5.dist-info → datamule-2.1.6.dist-info}/METADATA +1 -1
- {datamule-2.1.5.dist-info → datamule-2.1.6.dist-info}/RECORD +6 -6
- {datamule-2.1.5.dist-info → datamule-2.1.6.dist-info}/WHEEL +0 -0
- {datamule-2.1.5.dist-info → datamule-2.1.6.dist-info}/top_level.txt +0 -0
datamule/document/document.py
CHANGED
@@ -119,93 +119,92 @@ class Document:
|
|
119
119
|
|
120
120
|
if self.extension == '.txt':
|
121
121
|
content = self.text
|
122
|
-
if self.type
|
122
|
+
if self.type in ['10-Q', '10-Q/A']:
|
123
123
|
mapping_dict = dict_10q
|
124
|
-
elif self.type
|
124
|
+
elif self.type in ['10-K','10-K/A']:
|
125
125
|
mapping_dict = dict_10k
|
126
|
-
elif self.type
|
126
|
+
elif self.type in ['8-K', '8-K/A']:
|
127
127
|
mapping_dict = dict_8k
|
128
|
-
elif self.type
|
128
|
+
elif self.type in ['SC 13D', 'SC 13D/A']:
|
129
129
|
mapping_dict = dict_13d
|
130
|
-
elif self.type
|
130
|
+
elif self.type in ['SC 13G', 'SC 13G/A']:
|
131
131
|
mapping_dict = dict_13g
|
132
132
|
|
133
133
|
self._data = {}
|
134
134
|
self._data['document'] = dict2dict(txt2dict(content=content, mapping_dict=mapping_dict))
|
135
135
|
elif self.extension in ['.htm', '.html']:
|
136
136
|
|
137
|
-
if self.type
|
137
|
+
if self.type in ['1-K', '1-K/A']:
|
138
138
|
mapping_dict = dict_1kpartii_html
|
139
|
-
elif self.type
|
139
|
+
elif self.type in ['1-SA', '1-SA/A']:
|
140
140
|
mapping_dict = dict_1sa_html
|
141
|
-
elif self.type
|
141
|
+
elif self.type in ['1-U', '1-U/A']:
|
142
142
|
mapping_dict = dict_1u_html
|
143
|
-
elif self.type
|
143
|
+
elif self.type in ['10-12B', '10-12B/A']:
|
144
144
|
mapping_dict = dict_1012b_html
|
145
|
-
elif self.type
|
145
|
+
elif self.type in ['10-D', '10-D/A']:
|
146
146
|
mapping_dict = dict_10d_html
|
147
|
-
elif self.type
|
147
|
+
elif self.type in ['10-K', '10-K/A']:
|
148
148
|
mapping_dict = dict_10k_html
|
149
|
-
elif self.type
|
149
|
+
elif self.type in ['10-Q', '10-Q/A']:
|
150
150
|
mapping_dict = dict_10q_html
|
151
|
-
elif self.type
|
151
|
+
elif self.type in ['20-F', '20-F/A']:
|
152
152
|
mapping_dict = dict_20f_html
|
153
|
-
elif self.type
|
153
|
+
elif self.type in ['8-A12B', '8-A12B/A']:
|
154
154
|
mapping_dict = dict_8a12b_html
|
155
|
-
elif self.type
|
155
|
+
elif self.type in ['8-A12G', '8-A12G/A']:
|
156
156
|
mapping_dict = dict_8a12g_html
|
157
|
-
elif self.type
|
157
|
+
elif self.type in ['8-K', '8-K/A']:
|
158
158
|
mapping_dict = dict_8k_html
|
159
|
-
elif self.type
|
159
|
+
elif self.type in ['8-K12B', '8-K12B/A']:
|
160
160
|
mapping_dict = dict_8k12b_html
|
161
|
-
elif self.type
|
161
|
+
elif self.type in ['8-K12G3', '8-K12G3/A']:
|
162
162
|
mapping_dict = dict_8k12g3_html
|
163
|
-
elif self.type
|
163
|
+
elif self.type in ['8-K15D5', '8-K15D5/A']:
|
164
164
|
mapping_dict = dict_8k15d5_html
|
165
|
-
elif self.type
|
165
|
+
elif self.type in ['ABS-15G', 'ABS-15G/A']:
|
166
166
|
mapping_dict = dict_abs15g_html
|
167
|
-
elif self.type
|
167
|
+
elif self.type in ['ABS-EE', 'ABS-EE/A']:
|
168
168
|
mapping_dict = dict_absee_html
|
169
|
-
elif self.type
|
170
|
-
dict_appntc_html
|
171
|
-
elif self.type
|
169
|
+
elif self.type in ['APP NTC', 'APP NTC/A']:
|
170
|
+
mapping_dict = dict_appntc_html
|
171
|
+
elif self.type in ['CB', 'CB/A']:
|
172
172
|
mapping_dict = dict_cb_html
|
173
|
-
elif self.type
|
173
|
+
elif self.type in ['DSTRBRPT', 'DSTRBRPT/A']:
|
174
174
|
mapping_dict = dict_dstrbrpt_html
|
175
|
-
elif self.type
|
175
|
+
elif self.type in ['N-18F1', 'N-18F1/A']:
|
176
176
|
mapping_dict = dict_n18f1_html
|
177
|
-
elif self.type
|
177
|
+
elif self.type in ['N-CSRS', 'N-CSRS/A']:
|
178
178
|
mapping_dict = dict_ncsrs_html
|
179
|
-
elif self.type
|
179
|
+
elif self.type in ['NT-10K', 'NT-10K/A']:
|
180
180
|
mapping_dict = dict_nt10k_html
|
181
|
-
elif self.type
|
181
|
+
elif self.type in ['NT-10Q', 'NT-10Q/A']:
|
182
182
|
mapping_dict = dict_nt10q_html
|
183
|
-
elif self.type
|
183
|
+
elif self.type in ['NT 20-F', 'NT 20-F/A']:
|
184
184
|
mapping_dict = dict_nt20f_html
|
185
|
-
elif self.type
|
185
|
+
elif self.type in ['NT-NCEN', 'NT-NCEN/A']:
|
186
186
|
mapping_dict = dict_ntncen_html
|
187
|
-
elif self.type
|
187
|
+
elif self.type in ['NT-NCSR', 'NT-NCSR/A']:
|
188
188
|
mapping_dict = dict_ntncsr_html
|
189
|
-
elif self.type
|
189
|
+
elif self.type in ['NTFNCEN', 'NTFNCEN/A']:
|
190
190
|
mapping_dict = dict_ntfcen_html
|
191
|
-
elif self.type
|
191
|
+
elif self.type in ['NTFNCSR', 'NTFNCSR/A']:
|
192
192
|
mapping_dict = dict_ntfncsr_html
|
193
|
-
elif self.type
|
193
|
+
elif self.type in ['EX-99.CERT', 'EX-99.CERT/A']:
|
194
194
|
mapping_dict = dict_ex99cert_html
|
195
|
-
elif self.type
|
195
|
+
elif self.type in ['SC 13E3', 'SC 13E3/A']:
|
196
196
|
mapping_dict = dict_sc13e3_html
|
197
|
-
elif self.type
|
197
|
+
elif self.type in ['SC 14D9', 'SC 14D9/A']:
|
198
198
|
mapping_dict = dict_sc14d9_html
|
199
|
-
elif self.type
|
199
|
+
elif self.type in ['SP 15D2', 'SP 15D2/A']:
|
200
200
|
mapping_dict = dict_sp15d2_html
|
201
|
-
|
202
|
-
elif self.type == 'SD':
|
201
|
+
elif self.type in ['SD', 'SD/A']:
|
203
202
|
mapping_dict = dict_sd_html
|
204
|
-
elif self.type
|
203
|
+
elif self.type in ['S-1', 'S-1/A']:
|
205
204
|
mapping_dict = dict_s1_html
|
206
|
-
elif self.type
|
205
|
+
elif self.type in ['T-3', 'T-3/A']:
|
207
206
|
mapping_dict = dict_t3_html
|
208
|
-
elif self.type in ['NT 10-K', 'NT 10-Q','NT 20-F']:
|
207
|
+
elif self.type in ['NT 10-K', 'NT 10-K/A', 'NT 10-Q', 'NT 10-Q/A', 'NT 20-F', 'NT 20-F/A']:
|
209
208
|
mapping_dict = dict_nt10k_html
|
210
209
|
|
211
210
|
dct = html2dict(content=self.content, mapping_dict=mapping_dict)
|
@@ -233,7 +232,7 @@ class Document:
|
|
233
232
|
self._preprocess_html_content()
|
234
233
|
elif self.extension == '.txt':
|
235
234
|
self._preprocess_txt_content()
|
236
|
-
|
235
|
+
return self._text
|
237
236
|
|
238
237
|
def write_json(self, output_filename=None):
|
239
238
|
if not self.data:
|
datamule/sheet.py
CHANGED
@@ -7,9 +7,6 @@ from .datamule.datamule_lookup import datamule_lookup
|
|
7
7
|
from .datamule.datamule_mysql_rds import query_mysql_rds
|
8
8
|
from company_fundamentals.utils import get_fundamental_mappings
|
9
9
|
from company_fundamentals import construct_fundamentals
|
10
|
-
# slated for deprecation?
|
11
|
-
from .seclibrary.bq import get_information_table, get_345, get_proxy_voting_record
|
12
|
-
|
13
10
|
class Sheet:
|
14
11
|
def __init__(self, path):
|
15
12
|
self.path = Path(path)
|
@@ -306,401 +303,4 @@ class Sheet:
|
|
306
303
|
if verbose:
|
307
304
|
print(f"Saved {len(data)} records to {filepath_obj}")
|
308
305
|
|
309
|
-
|
310
|
-
def download_information_table(
|
311
|
-
self,
|
312
|
-
filepath,
|
313
|
-
# Optional filtering parameters
|
314
|
-
columns=None,
|
315
|
-
name_of_issuer=None,
|
316
|
-
title_of_class=None,
|
317
|
-
cusip=None,
|
318
|
-
value=None,
|
319
|
-
ssh_prnamt=None,
|
320
|
-
ssh_prnamt_type=None,
|
321
|
-
investment_discretion=None,
|
322
|
-
voting_authority_sole=None,
|
323
|
-
voting_authority_shared=None,
|
324
|
-
voting_authority_none=None,
|
325
|
-
reporting_owner_cik=None,
|
326
|
-
put_call=None,
|
327
|
-
other_manager=None,
|
328
|
-
figi=None,
|
329
|
-
accession=None,
|
330
|
-
filing_date=None,
|
331
|
-
|
332
|
-
# API key handling
|
333
|
-
api_key=None,
|
334
|
-
|
335
|
-
# Additional options
|
336
|
-
print_cost=True,
|
337
|
-
verbose=False
|
338
|
-
):
|
339
|
-
"""
|
340
|
-
Query the SEC BigQuery API for 13F-HR information table data and save to CSV.
|
341
|
-
|
342
|
-
Parameters:
|
343
|
-
-----------
|
344
|
-
filepath : str
|
345
|
-
Path where to save the CSV file. If relative, it will be relative to the Sheet's path.
|
346
|
-
|
347
|
-
columns : List[str], optional
|
348
|
-
Specific columns to return. If None, all columns are returned.
|
349
|
-
|
350
|
-
# Filter parameters
|
351
|
-
name_of_issuer, title_of_class, etc. : Various filters that can be:
|
352
|
-
- str: Exact match
|
353
|
-
- List[str]: Match any in list
|
354
|
-
- tuple: (min, max) range for numeric/date fields
|
355
|
-
|
356
|
-
api_key : str, optional
|
357
|
-
SEC BigQuery API key. If None, looks for DATAMULE_API_KEY env variable.
|
358
|
-
print_cost : bool
|
359
|
-
Whether to print the query cost information
|
360
|
-
verbose : bool
|
361
|
-
Whether to print additional information about the query
|
362
|
-
|
363
|
-
Returns:
|
364
|
-
--------
|
365
|
-
List[Dict]
|
366
|
-
A list of dictionaries containing the query results
|
367
|
-
|
368
|
-
Raises:
|
369
|
-
-------
|
370
|
-
ValueError
|
371
|
-
If API key is missing or invalid
|
372
|
-
Exception
|
373
|
-
For API errors or other issues
|
374
|
-
"""
|
375
|
-
# Get the data from the API
|
376
|
-
data = self.get_information_table(
|
377
|
-
columns=columns,
|
378
|
-
name_of_issuer=name_of_issuer,
|
379
|
-
title_of_class=title_of_class,
|
380
|
-
cusip=cusip,
|
381
|
-
value=value,
|
382
|
-
ssh_prnamt=ssh_prnamt,
|
383
|
-
ssh_prnamt_type=ssh_prnamt_type,
|
384
|
-
investment_discretion=investment_discretion,
|
385
|
-
voting_authority_sole=voting_authority_sole,
|
386
|
-
voting_authority_shared=voting_authority_shared,
|
387
|
-
voting_authority_none=voting_authority_none,
|
388
|
-
reporting_owner_cik=reporting_owner_cik,
|
389
|
-
put_call=put_call,
|
390
|
-
other_manager=other_manager,
|
391
|
-
figi=figi,
|
392
|
-
accession=accession,
|
393
|
-
filing_date=filing_date,
|
394
|
-
api_key=api_key,
|
395
|
-
print_cost=print_cost,
|
396
|
-
verbose=verbose
|
397
|
-
)
|
398
|
-
|
399
|
-
# Save to CSV using the helper method
|
400
|
-
return self._download_to_csv(data, filepath, verbose)
|
401
|
-
|
402
|
-
def download_345(
|
403
|
-
self,
|
404
|
-
filepath,
|
405
|
-
# Optional filtering parameters
|
406
|
-
columns=None,
|
407
|
-
is_derivative=None,
|
408
|
-
is_non_derivative=None,
|
409
|
-
security_title=None,
|
410
|
-
transaction_date=None,
|
411
|
-
document_type=None,
|
412
|
-
transaction_code=None,
|
413
|
-
equity_swap_involved=None,
|
414
|
-
transaction_timeliness=None,
|
415
|
-
transaction_shares=None,
|
416
|
-
transaction_price_per_share=None,
|
417
|
-
shares_owned_following_transaction=None,
|
418
|
-
ownership_type=None,
|
419
|
-
deemed_execution_date=None,
|
420
|
-
conversion_or_exercise_price=None,
|
421
|
-
exercise_date=None,
|
422
|
-
expiration_date=None,
|
423
|
-
underlying_security_title=None,
|
424
|
-
underlying_security_shares=None,
|
425
|
-
underlying_security_value=None,
|
426
|
-
accession=None,
|
427
|
-
reporting_owner_cik=None,
|
428
|
-
issuer_cik=None,
|
429
|
-
filing_date=None,
|
430
|
-
|
431
|
-
# API key handling
|
432
|
-
api_key=None,
|
433
|
-
|
434
|
-
# Additional options
|
435
|
-
print_cost=True,
|
436
|
-
verbose=False
|
437
|
-
):
|
438
|
-
"""
|
439
|
-
Query the SEC BigQuery API for Form 345 insider transaction data and save to CSV.
|
440
|
-
|
441
|
-
Parameters:
|
442
|
-
-----------
|
443
|
-
filepath : str
|
444
|
-
Path where to save the CSV file. If relative, it will be relative to the Sheet's path.
|
445
|
-
|
446
|
-
columns : List[str], optional
|
447
|
-
Specific columns to return. If None, all columns are returned.
|
448
|
-
|
449
|
-
# Filter parameters
|
450
|
-
is_derivative, security_title, etc. : Various filters that can be:
|
451
|
-
- str/bool: Exact match
|
452
|
-
- List[str]: Match any in list
|
453
|
-
- tuple: (min, max) range for numeric/date fields
|
454
|
-
|
455
|
-
reporting_owner_cik : str or List[str]
|
456
|
-
CIK(s) of the reporting insider(s). This is matched against an array in BigQuery.
|
457
|
-
Any match within the array will return the record.
|
458
|
-
|
459
|
-
issuer_cik : str or List[str]
|
460
|
-
CIK(s) of the company/companies
|
461
|
-
|
462
|
-
api_key : str, optional
|
463
|
-
SEC BigQuery API key. If None, looks for DATAMULE_API_KEY env variable.
|
464
|
-
print_cost : bool
|
465
|
-
Whether to print the query cost information
|
466
|
-
verbose : bool
|
467
|
-
Whether to print additional information about the query
|
468
|
-
|
469
|
-
Returns:
|
470
|
-
--------
|
471
|
-
List[Dict]
|
472
|
-
A list of dictionaries containing the query results
|
473
|
-
|
474
|
-
Raises:
|
475
|
-
-------
|
476
|
-
ValueError
|
477
|
-
If API key is missing or invalid
|
478
|
-
Exception
|
479
|
-
For API errors or other issues
|
480
|
-
"""
|
481
|
-
# Get the data from the API
|
482
|
-
data = self.get_345(
|
483
|
-
columns=columns,
|
484
|
-
is_derivative=is_derivative,
|
485
|
-
is_non_derivative=is_non_derivative,
|
486
|
-
security_title=security_title,
|
487
|
-
transaction_date=transaction_date,
|
488
|
-
document_type=document_type,
|
489
|
-
transaction_code=transaction_code,
|
490
|
-
equity_swap_involved=equity_swap_involved,
|
491
|
-
transaction_timeliness=transaction_timeliness,
|
492
|
-
transaction_shares=transaction_shares,
|
493
|
-
transaction_price_per_share=transaction_price_per_share,
|
494
|
-
shares_owned_following_transaction=shares_owned_following_transaction,
|
495
|
-
ownership_type=ownership_type,
|
496
|
-
deemed_execution_date=deemed_execution_date,
|
497
|
-
conversion_or_exercise_price=conversion_or_exercise_price,
|
498
|
-
exercise_date=exercise_date,
|
499
|
-
expiration_date=expiration_date,
|
500
|
-
underlying_security_title=underlying_security_title,
|
501
|
-
underlying_security_shares=underlying_security_shares,
|
502
|
-
underlying_security_value=underlying_security_value,
|
503
|
-
accession=accession,
|
504
|
-
reporting_owner_cik=reporting_owner_cik,
|
505
|
-
issuer_cik=issuer_cik,
|
506
|
-
filing_date=filing_date,
|
507
|
-
api_key=api_key,
|
508
|
-
print_cost=print_cost,
|
509
|
-
verbose=verbose
|
510
|
-
)
|
511
|
-
|
512
|
-
# Save to CSV using the helper method
|
513
|
-
return self._download_to_csv(data, filepath, verbose)
|
514
|
-
|
515
|
-
def get_proxy_voting_record(
|
516
|
-
self,
|
517
|
-
# Optional filtering parameters
|
518
|
-
columns=None,
|
519
|
-
meeting_date=None,
|
520
|
-
isin=None,
|
521
|
-
cusip=None,
|
522
|
-
issuer_name=None,
|
523
|
-
vote_description=None,
|
524
|
-
shares_on_loan=None,
|
525
|
-
shares_voted=None,
|
526
|
-
vote_category=None,
|
527
|
-
vote_record=None,
|
528
|
-
vote_source=None,
|
529
|
-
how_voted=None,
|
530
|
-
figi=None,
|
531
|
-
management_recommendation=None,
|
532
|
-
accession=None,
|
533
|
-
reporting_owner_cik=None,
|
534
|
-
filing_date=None,
|
535
|
-
|
536
|
-
# API key handling
|
537
|
-
api_key=None,
|
538
|
-
|
539
|
-
# Additional options
|
540
|
-
print_cost=True,
|
541
|
-
verbose=False
|
542
|
-
):
|
543
|
-
"""
|
544
|
-
Query the SEC BigQuery API for NPX proxy voting record data.
|
545
|
-
|
546
|
-
Parameters:
|
547
|
-
-----------
|
548
|
-
columns : List[str], optional
|
549
|
-
Specific columns to return. If None, all columns are returned.
|
550
|
-
|
551
|
-
# Filter parameters
|
552
|
-
meeting_date, isin, cusip, etc. : Various filters that can be:
|
553
|
-
- str: Exact match
|
554
|
-
- List[str]: Match any in list
|
555
|
-
- tuple: (min, max) range for numeric/date fields
|
556
|
-
|
557
|
-
shares_on_loan, shares_voted : int/float or tuple
|
558
|
-
Numeric values or (min, max) range
|
559
|
-
|
560
|
-
filing_date : str or tuple
|
561
|
-
Date string in 'YYYY-MM-DD' format or (start_date, end_date) tuple
|
562
|
-
|
563
|
-
api_key : str, optional
|
564
|
-
SEC BigQuery API key. If None, looks for DATAMULE_API_KEY env variable.
|
565
|
-
print_cost : bool
|
566
|
-
Whether to print the query cost information
|
567
|
-
verbose : bool
|
568
|
-
Whether to print additional information about the query
|
569
|
-
|
570
|
-
Returns:
|
571
|
-
--------
|
572
|
-
List[Dict]
|
573
|
-
A list of dictionaries containing the query results
|
574
|
-
|
575
|
-
Raises:
|
576
|
-
-------
|
577
|
-
ValueError
|
578
|
-
If API key is missing or invalid
|
579
|
-
Exception
|
580
|
-
For API errors or other issues
|
581
|
-
"""
|
582
|
-
|
583
|
-
return get_proxy_voting_record(
|
584
|
-
columns=columns,
|
585
|
-
meeting_date=meeting_date,
|
586
|
-
isin=isin,
|
587
|
-
cusip=cusip,
|
588
|
-
issuer_name=issuer_name,
|
589
|
-
vote_description=vote_description,
|
590
|
-
shares_on_loan=shares_on_loan,
|
591
|
-
shares_voted=shares_voted,
|
592
|
-
vote_category=vote_category,
|
593
|
-
vote_record=vote_record,
|
594
|
-
vote_source=vote_source,
|
595
|
-
how_voted=how_voted,
|
596
|
-
figi=figi,
|
597
|
-
management_recommendation=management_recommendation,
|
598
|
-
accession=accession,
|
599
|
-
reporting_owner_cik=reporting_owner_cik,
|
600
|
-
filing_date=filing_date,
|
601
|
-
|
602
|
-
# API key handling
|
603
|
-
api_key=api_key,
|
604
|
-
|
605
|
-
# Additional options
|
606
|
-
print_cost=print_cost,
|
607
|
-
verbose=verbose
|
608
|
-
)
|
609
|
-
|
610
|
-
def download_proxy_voting_record(
|
611
|
-
self,
|
612
|
-
filepath,
|
613
|
-
# Optional filtering parameters
|
614
|
-
columns=None,
|
615
|
-
meeting_date=None,
|
616
|
-
isin=None,
|
617
|
-
cusip=None,
|
618
|
-
issuer_name=None,
|
619
|
-
vote_description=None,
|
620
|
-
shares_on_loan=None,
|
621
|
-
shares_voted=None,
|
622
|
-
vote_category=None,
|
623
|
-
vote_record=None,
|
624
|
-
vote_source=None,
|
625
|
-
how_voted=None,
|
626
|
-
figi=None,
|
627
|
-
management_recommendation=None,
|
628
|
-
accession=None,
|
629
|
-
reporting_owner_cik=None,
|
630
|
-
filing_date=None,
|
631
|
-
|
632
|
-
# API key handling
|
633
|
-
api_key=None,
|
634
|
-
|
635
|
-
# Additional options
|
636
|
-
print_cost=True,
|
637
|
-
verbose=False
|
638
|
-
):
|
639
|
-
"""
|
640
|
-
Query the SEC BigQuery API for NPX proxy voting record data and save to CSV.
|
641
|
-
|
642
|
-
Parameters:
|
643
|
-
-----------
|
644
|
-
filepath : str
|
645
|
-
Path where to save the CSV file. If relative, it will be relative to the Sheet's path.
|
646
|
-
|
647
|
-
columns : List[str], optional
|
648
|
-
Specific columns to return. If None, all columns are returned.
|
649
|
-
|
650
|
-
# Filter parameters
|
651
|
-
meeting_date, isin, cusip, etc. : Various filters that can be:
|
652
|
-
- str: Exact match
|
653
|
-
- List[str]: Match any in list
|
654
|
-
- tuple: (min, max) range for numeric/date fields
|
655
|
-
|
656
|
-
shares_on_loan, shares_voted : int/float or tuple
|
657
|
-
Numeric values or (min, max) range
|
658
|
-
|
659
|
-
filing_date : str or tuple
|
660
|
-
Date string in 'YYYY-MM-DD' format or (start_date, end_date) tuple
|
661
|
-
|
662
|
-
api_key : str, optional
|
663
|
-
SEC BigQuery API key. If None, looks for DATAMULE_API_KEY env variable.
|
664
|
-
print_cost : bool
|
665
|
-
Whether to print the query cost information
|
666
|
-
verbose : bool
|
667
|
-
Whether to print additional information about the query
|
668
|
-
|
669
|
-
Returns:
|
670
|
-
--------
|
671
|
-
List[Dict]
|
672
|
-
A list of dictionaries containing the query results
|
673
|
-
|
674
|
-
Raises:
|
675
|
-
-------
|
676
|
-
ValueError
|
677
|
-
If API key is missing or invalid
|
678
|
-
Exception
|
679
|
-
For API errors or other issues
|
680
|
-
"""
|
681
|
-
# Get the data from the API
|
682
|
-
data = self.get_proxy_voting_record(
|
683
|
-
columns=columns,
|
684
|
-
meeting_date=meeting_date,
|
685
|
-
isin=isin,
|
686
|
-
cusip=cusip,
|
687
|
-
issuer_name=issuer_name,
|
688
|
-
vote_description=vote_description,
|
689
|
-
shares_on_loan=shares_on_loan,
|
690
|
-
shares_voted=shares_voted,
|
691
|
-
vote_category=vote_category,
|
692
|
-
vote_record=vote_record,
|
693
|
-
vote_source=vote_source,
|
694
|
-
how_voted=how_voted,
|
695
|
-
figi=figi,
|
696
|
-
management_recommendation=management_recommendation,
|
697
|
-
accession=accession,
|
698
|
-
reporting_owner_cik=reporting_owner_cik,
|
699
|
-
filing_date=filing_date,
|
700
|
-
api_key=api_key,
|
701
|
-
print_cost=print_cost,
|
702
|
-
verbose=verbose
|
703
|
-
)
|
704
|
-
|
705
|
-
# Save to CSV using the helper method
|
706
|
-
return self._download_to_csv(data, filepath, verbose)
|
306
|
+
|
@@ -6,7 +6,7 @@ datamule/index.py,sha256=Rrcna9FJV-Oh_K6O2IuUEIDmtay_7UZ4l4jgKCi7A7I,2079
|
|
6
6
|
datamule/package_updater.py,sha256=Z9zaa_y0Z5cknpRn8oPea3gg4kquFHfpfhduKKCZ6NU,958
|
7
7
|
datamule/portfolio.py,sha256=0-E1ZSEjJ8hba7HxF8oCrRneNuF_KKISOY6K4dRg0Cg,12282
|
8
8
|
datamule/portfolio_compression_utils.py,sha256=8OPYEN5zAdV1FiTxgVN3S7cTKs99Elv74bwgoIJP4QY,12654
|
9
|
-
datamule/sheet.py,sha256=
|
9
|
+
datamule/sheet.py,sha256=KD7yAgSB8BE-Z4GDuH58IV-2DJ673nMcEsrCyJbeYp8,10707
|
10
10
|
datamule/submission.py,sha256=TdQDfFjOKXy2qAZcD6hc9kjDSxmuZLqk8WRhtMjjC-g,15822
|
11
11
|
datamule/data/listed_filer_metadata.csv,sha256=dT9fQ8AC5P1-Udf_UF0ZkdXJ88jNxJb_tuhi5YYL1rc,2426827
|
12
12
|
datamule/datamule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -15,7 +15,7 @@ datamule/datamule/datamule_mysql_rds.py,sha256=Q6_h24-SNECWK60RnM6UQjUIp5dhJmfn3
|
|
15
15
|
datamule/datamule/downloader.py,sha256=mVg1SApfij_9-dTpcm_YB26Bxc_Yq1FR8xv2k50MHqU,18579
|
16
16
|
datamule/datamule/sec_connector.py,sha256=VwOaODpHoAWy8JIky6kLR1-orW_PB61RHw7pIGRpkow,3288
|
17
17
|
datamule/document/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
|
-
datamule/document/document.py,sha256=
|
18
|
+
datamule/document/document.py,sha256=VDe4MBDd2zgSI7d9vepNOaeE297ndLhYH7cDVGRO7iM,15915
|
19
19
|
datamule/document/tables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
20
|
datamule/document/tables/tables.py,sha256=8riSAof6o-Gxoo0SkiQAE61fw8NmzDnEhJe6dATzmvA,4487
|
21
21
|
datamule/document/tables/tables_13fhr.py,sha256=-6tWcaTyNsb0XuW0WMBrYir9Zn1wLZL0laKxRYfPNyg,4265
|
@@ -51,7 +51,7 @@ datamule/seclibrary/bq.py,sha256=C8sb_rpXTvchprrFLcbRar4Qi0XWW25tnv1YsHSS5o4,180
|
|
51
51
|
datamule/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
52
|
datamule/utils/construct_submissions_data.py,sha256=NB_hvfxlRXPyt4Fgc-5qA8vJRItkLhBedCSTaxwW7Jg,5887
|
53
53
|
datamule/utils/format_accession.py,sha256=60RtqoNqoT9zSKVb1DeOv1gncJxzPTFMNW4SNOVmC_g,476
|
54
|
-
datamule-2.1.
|
55
|
-
datamule-2.1.
|
56
|
-
datamule-2.1.
|
57
|
-
datamule-2.1.
|
54
|
+
datamule-2.1.6.dist-info/METADATA,sha256=eCN-rg72CAvKqZON551zZSySScovaDNfjBFGrFTOVmc,560
|
55
|
+
datamule-2.1.6.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
56
|
+
datamule-2.1.6.dist-info/top_level.txt,sha256=iOfgmtSMFVyr7JGl_bYSTDry79JbmsG4p8zKq89ktKk,9
|
57
|
+
datamule-2.1.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|