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.
@@ -119,93 +119,92 @@ class Document:
119
119
 
120
120
  if self.extension == '.txt':
121
121
  content = self.text
122
- if self.type == '10-Q':
122
+ if self.type in ['10-Q', '10-Q/A']:
123
123
  mapping_dict = dict_10q
124
- elif self.type == '10-K':
124
+ elif self.type in ['10-K','10-K/A']:
125
125
  mapping_dict = dict_10k
126
- elif self.type == '8-K':
126
+ elif self.type in ['8-K', '8-K/A']:
127
127
  mapping_dict = dict_8k
128
- elif self.type == 'SC 13D':
128
+ elif self.type in ['SC 13D', 'SC 13D/A']:
129
129
  mapping_dict = dict_13d
130
- elif self.type == 'SC 13G':
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 == '1-K':
137
+ if self.type in ['1-K', '1-K/A']:
138
138
  mapping_dict = dict_1kpartii_html
139
- elif self.type == '1-SA':
139
+ elif self.type in ['1-SA', '1-SA/A']:
140
140
  mapping_dict = dict_1sa_html
141
- elif self.type == '1-U':
141
+ elif self.type in ['1-U', '1-U/A']:
142
142
  mapping_dict = dict_1u_html
143
- elif self.type == '10-12B':
143
+ elif self.type in ['10-12B', '10-12B/A']:
144
144
  mapping_dict = dict_1012b_html
145
- elif self.type == '10-D':
145
+ elif self.type in ['10-D', '10-D/A']:
146
146
  mapping_dict = dict_10d_html
147
- elif self.type == '10-K':
147
+ elif self.type in ['10-K', '10-K/A']:
148
148
  mapping_dict = dict_10k_html
149
- elif self.type == '10-Q':
149
+ elif self.type in ['10-Q', '10-Q/A']:
150
150
  mapping_dict = dict_10q_html
151
- elif self.type == '20-F':
151
+ elif self.type in ['20-F', '20-F/A']:
152
152
  mapping_dict = dict_20f_html
153
- elif self.type == '8-A12B':
153
+ elif self.type in ['8-A12B', '8-A12B/A']:
154
154
  mapping_dict = dict_8a12b_html
155
- elif self.type == '8-A12G':
155
+ elif self.type in ['8-A12G', '8-A12G/A']:
156
156
  mapping_dict = dict_8a12g_html
157
- elif self.type == '8-K':
157
+ elif self.type in ['8-K', '8-K/A']:
158
158
  mapping_dict = dict_8k_html
159
- elif self.type == '8-K12B':
159
+ elif self.type in ['8-K12B', '8-K12B/A']:
160
160
  mapping_dict = dict_8k12b_html
161
- elif self.type == '8-K12G3':
161
+ elif self.type in ['8-K12G3', '8-K12G3/A']:
162
162
  mapping_dict = dict_8k12g3_html
163
- elif self.type == '8-K15D5':
163
+ elif self.type in ['8-K15D5', '8-K15D5/A']:
164
164
  mapping_dict = dict_8k15d5_html
165
- elif self.type == 'ABS-15G':
165
+ elif self.type in ['ABS-15G', 'ABS-15G/A']:
166
166
  mapping_dict = dict_abs15g_html
167
- elif self.type == 'ABS-EE':
167
+ elif self.type in ['ABS-EE', 'ABS-EE/A']:
168
168
  mapping_dict = dict_absee_html
169
- elif self.type == 'APP NTC':
170
- dict_appntc_html
171
- elif self.type == 'CB':
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 == 'DSTRBRPT':
173
+ elif self.type in ['DSTRBRPT', 'DSTRBRPT/A']:
174
174
  mapping_dict = dict_dstrbrpt_html
175
- elif self.type == 'N-18F1':
175
+ elif self.type in ['N-18F1', 'N-18F1/A']:
176
176
  mapping_dict = dict_n18f1_html
177
- elif self.type == 'N-CSRS':
177
+ elif self.type in ['N-CSRS', 'N-CSRS/A']:
178
178
  mapping_dict = dict_ncsrs_html
179
- elif self.type == 'NT-10K':
179
+ elif self.type in ['NT-10K', 'NT-10K/A']:
180
180
  mapping_dict = dict_nt10k_html
181
- elif self.type == 'NT-10Q':
181
+ elif self.type in ['NT-10Q', 'NT-10Q/A']:
182
182
  mapping_dict = dict_nt10q_html
183
- elif self.type == 'NT 20-F':
183
+ elif self.type in ['NT 20-F', 'NT 20-F/A']:
184
184
  mapping_dict = dict_nt20f_html
185
- elif self.type == 'NT-NCEN':
185
+ elif self.type in ['NT-NCEN', 'NT-NCEN/A']:
186
186
  mapping_dict = dict_ntncen_html
187
- elif self.type == 'NT-NCSR':
187
+ elif self.type in ['NT-NCSR', 'NT-NCSR/A']:
188
188
  mapping_dict = dict_ntncsr_html
189
- elif self.type == 'NTFNCEN':
189
+ elif self.type in ['NTFNCEN', 'NTFNCEN/A']:
190
190
  mapping_dict = dict_ntfcen_html
191
- elif self.type == 'NTFNCSR':
191
+ elif self.type in ['NTFNCSR', 'NTFNCSR/A']:
192
192
  mapping_dict = dict_ntfncsr_html
193
- elif self.type == 'EX-99.CERT':
193
+ elif self.type in ['EX-99.CERT', 'EX-99.CERT/A']:
194
194
  mapping_dict = dict_ex99cert_html
195
- elif self.type == 'SC 13E3':
195
+ elif self.type in ['SC 13E3', 'SC 13E3/A']:
196
196
  mapping_dict = dict_sc13e3_html
197
- elif self.type == 'SC 14D9':
197
+ elif self.type in ['SC 14D9', 'SC 14D9/A']:
198
198
  mapping_dict = dict_sc14d9_html
199
- elif self.type == 'SP 15D2':
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 == 'S-1':
203
+ elif self.type in ['S-1', 'S-1/A']:
205
204
  mapping_dict = dict_s1_html
206
- elif self.type == 'T-3':
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
- return self._text
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
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datamule
3
- Version: 2.1.5
3
+ Version: 2.1.6
4
4
  Summary: Work with SEC submissions at scale.
5
5
  Home-page: https://github.com/john-friedman/datamule-python
6
6
  Author: John Friedman
@@ -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=Ws_YRtpvewLVioarngVMe8cgG_sp11MP9_goGbRaiWE,23952
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=lWFmRnX7UfcX2W-2bs5wuFjWDiuFphIlWRXoatAOMZ0,15328
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.5.dist-info/METADATA,sha256=O7H7morwBBDgqmyytWiui81VS4Wt5PoyIsNGv3_j3rk,560
55
- datamule-2.1.5.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
56
- datamule-2.1.5.dist-info/top_level.txt,sha256=iOfgmtSMFVyr7JGl_bYSTDry79JbmsG4p8zKq89ktKk,9
57
- datamule-2.1.5.dist-info/RECORD,,
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,,