nmdc-runtime 1.10.0__py3-none-any.whl → 2.0.0__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.

Potentially problematic release.


This version of nmdc-runtime might be problematic. Click here for more details.

@@ -64,9 +64,9 @@ class SubmissionPortalTranslator(Translator):
64
64
  def __init__(
65
65
  self,
66
66
  metadata_submission: JSON_OBJECT = {},
67
- omics_processing_mapping: Optional[list] = None,
68
- data_object_mapping: Optional[list] = None,
69
67
  *args,
68
+ nucleotide_sequencing_mapping: Optional[list] = None,
69
+ data_object_mapping: Optional[list] = None,
70
70
  # Additional study-level metadata not captured by the submission portal currently
71
71
  # See: https://github.com/microbiomedata/submission-schema/issues/162
72
72
  study_doi_category: Optional[str] = None,
@@ -84,7 +84,7 @@ class SubmissionPortalTranslator(Translator):
84
84
  super().__init__(*args, **kwargs)
85
85
 
86
86
  self.metadata_submission = metadata_submission
87
- self.omics_processing_mapping = omics_processing_mapping
87
+ self.nucleotide_sequencing_mapping = nucleotide_sequencing_mapping
88
88
  self.data_object_mapping = data_object_mapping
89
89
 
90
90
  self.study_doi_category = (
@@ -127,6 +127,7 @@ class SubmissionPortalTranslator(Translator):
127
127
  email=study_form.get("piEmail"),
128
128
  orcid=study_form.get("piOrcid"),
129
129
  profile_image_url=self.study_pi_image_url,
130
+ type=nmdc.PersonValue.class_class_curie,
130
131
  )
131
132
 
132
133
  def _get_doi(self, metadata_submission: JSON_OBJECT) -> Union[List[nmdc.Doi], None]:
@@ -147,6 +148,7 @@ class SubmissionPortalTranslator(Translator):
147
148
  doi_value=dataset_doi,
148
149
  doi_provider=self.study_doi_provider,
149
150
  doi_category=self.study_doi_category,
151
+ type="nmdc:Doi",
150
152
  )
151
153
  ]
152
154
 
@@ -167,8 +169,10 @@ class SubmissionPortalTranslator(Translator):
167
169
  applies_to_person=nmdc.PersonValue(
168
170
  name=contributor.get("name"),
169
171
  orcid=contributor.get("orcid"),
172
+ type="nmdc:PersonValue",
170
173
  ),
171
174
  applied_roles=contributor.get("roles"),
175
+ type="nmdc:CreditAssociation",
172
176
  )
173
177
  for contributor in contributors
174
178
  ]
@@ -217,7 +221,10 @@ class SubmissionPortalTranslator(Translator):
217
221
  if not match:
218
222
  return None
219
223
 
220
- qv = nmdc.QuantityValue(has_raw_value=raw_value)
224
+ qv = nmdc.QuantityValue(
225
+ has_raw_value=raw_value,
226
+ type="nmdc:QuantityValue",
227
+ )
221
228
  if match.group(2):
222
229
  # having group 2 means the value is a range like "0 - 1". Either
223
230
  # group 1 or group 2 might be the minimum especially when handling
@@ -264,6 +271,7 @@ class SubmissionPortalTranslator(Translator):
264
271
  return nmdc.OntologyClass(
265
272
  name=match.group(1).strip(),
266
273
  id=match.group(2).strip(),
274
+ type="nmdc:OntologyClass",
267
275
  )
268
276
 
269
277
  def _get_controlled_identified_term_value(
@@ -285,7 +293,9 @@ class SubmissionPortalTranslator(Translator):
285
293
  return None
286
294
 
287
295
  return nmdc.ControlledIdentifiedTermValue(
288
- has_raw_value=raw_value, term=ontology_class
296
+ has_raw_value=raw_value,
297
+ term=ontology_class,
298
+ type="nmdc:ControlledIdentifiedTermValue",
289
299
  )
290
300
 
291
301
  def _get_controlled_term_value(
@@ -302,7 +312,10 @@ class SubmissionPortalTranslator(Translator):
302
312
  if not raw_value:
303
313
  return None
304
314
 
305
- value = nmdc.ControlledTermValue(has_raw_value=raw_value)
315
+ value = nmdc.ControlledTermValue(
316
+ has_raw_value=raw_value,
317
+ type="nmdc:ControlledTermValue",
318
+ )
306
319
  ontology_class = self._get_ontology_class(raw_value)
307
320
  if ontology_class is not None:
308
321
  value.term = ontology_class
@@ -332,7 +345,10 @@ class SubmissionPortalTranslator(Translator):
332
345
  return None
333
346
 
334
347
  return nmdc.GeolocationValue(
335
- has_raw_value=raw_value, latitude=match.group(1), longitude=match.group(2)
348
+ has_raw_value=raw_value,
349
+ latitude=match.group(1),
350
+ longitude=match.group(2),
351
+ type="nmdc:GeolocationValue",
336
352
  )
337
353
 
338
354
  def _get_float(self, raw_value: Optional[str]) -> Union[float, None]:
@@ -425,6 +441,7 @@ class SubmissionPortalTranslator(Translator):
425
441
  principal_investigator=self._get_pi(metadata_submission),
426
442
  study_category=self.study_category,
427
443
  title=self._get_from(metadata_submission, ["studyForm", "studyName"]),
444
+ type="nmdc:Study",
428
445
  websites=self._get_from(
429
446
  metadata_submission, ["studyForm", "linkOutWebpage"]
430
447
  ),
@@ -435,15 +452,24 @@ class SubmissionPortalTranslator(Translator):
435
452
  ):
436
453
  transformed_value = None
437
454
  if slot.range == "TextValue":
438
- transformed_value = nmdc.TextValue(has_raw_value=value)
455
+ transformed_value = nmdc.TextValue(
456
+ has_raw_value=value,
457
+ type="nmdc:TextValue",
458
+ )
439
459
  elif slot.range == "QuantityValue":
440
- transformed_value = self._get_quantity_value(value, unit=unit)
460
+ transformed_value = self._get_quantity_value(
461
+ value,
462
+ unit=unit,
463
+ )
441
464
  elif slot.range == "ControlledIdentifiedTermValue":
442
465
  transformed_value = self._get_controlled_identified_term_value(value)
443
466
  elif slot.range == "ControlledTermValue":
444
467
  transformed_value = self._get_controlled_term_value(value)
445
468
  elif slot.range == "TimestampValue":
446
- transformed_value = nmdc.TimestampValue(has_raw_value=value)
469
+ transformed_value = nmdc.TimestampValue(
470
+ has_raw_value=value,
471
+ type="nmdc:TimestampValue",
472
+ )
447
473
  elif slot.range == "GeolocationValue":
448
474
  transformed_value = self._get_geolocation_value(value)
449
475
  elif slot.range == "float":
@@ -531,9 +557,12 @@ class SubmissionPortalTranslator(Translator):
531
557
  biosample_key = sample_data[0].get(BIOSAMPLE_UNIQUE_KEY_SLOT, "").strip()
532
558
  slots = {
533
559
  "id": nmdc_biosample_id,
534
- "part_of": nmdc_study_id,
560
+ "associated_studies": [nmdc_study_id],
561
+ "type": "nmdc:Biosample",
535
562
  "name": sample_data[0].get("samp_name", "").strip(),
536
- "env_package": nmdc.TextValue(has_raw_value=default_env_package),
563
+ "env_package": nmdc.TextValue(
564
+ has_raw_value=default_env_package, type="nmdc:TextValue"
565
+ ),
537
566
  }
538
567
  for tab in sample_data:
539
568
  transformed_tab = self._transform_dict_for_class(tab, "Biosample")
@@ -590,18 +619,18 @@ class SubmissionPortalTranslator(Translator):
590
619
  if sample_data
591
620
  ]
592
621
 
593
- if self.omics_processing_mapping:
594
- # If there is data from an OmicsProcessing mapping file, process it now. This part
622
+ if self.nucleotide_sequencing_mapping:
623
+ # If there is data from an NucleotideSequencing mapping file, process it now. This part
595
624
  # assumes that there is a column in that file with the header __biosample_samp_name
596
625
  # that can be used to join with the sample data from the submission portal. The
597
626
  # biosample identified by that `samp_name` will be referenced in the `has_input`
598
- # slot of the OmicsProcessing object. If a DataObject mapping file was also provided,
599
- # those objects will also be generated and referenced in the `has_output` slot of the
600
- # OmicsProcessing object. By keying off of the `samp_name` slot of the submission's
601
- # sample data there is an implicit 1:1 relationship between Biosample objects and
602
- # OmicsProcessing objects generated here.
627
+ # slot of the NucleotideSequencing object. If a DataObject mapping file was also
628
+ # provided, those objects will also be generated and referenced in the `has_output` slot
629
+ # of the NucleotideSequencing object. By keying off of the `samp_name` slot of the
630
+ # submission's sample data there is an implicit 1:1 relationship between Biosample
631
+ # objects and NucleotideSequencing objects generated here.
603
632
  join_key = f"__biosample_{BIOSAMPLE_UNIQUE_KEY_SLOT}"
604
- database.omics_processing_set = []
633
+ database.data_generation_set = []
605
634
  database.data_object_set = []
606
635
  data_objects_by_sample_data_id = {}
607
636
  today = datetime.now().strftime("%Y-%m-%d")
@@ -617,10 +646,10 @@ class SubmissionPortalTranslator(Translator):
617
646
  grouped,
618
647
  )
619
648
 
620
- for omics_processing_row in self.omics_processing_mapping:
621
- # For each row in the OmicsProcessing mapping file, first grab the minted Biosample
622
- # id that corresponds to the sample ID from the submission
623
- sample_data_id = omics_processing_row.pop(join_key)
649
+ for nucleotide_sequencing_row in self.nucleotide_sequencing_mapping:
650
+ # For each row in the NucleotideSequencing mapping file, first grab the minted
651
+ # Biosample id that corresponds to the sample ID from the submission
652
+ sample_data_id = nucleotide_sequencing_row.pop(join_key)
624
653
  if (
625
654
  not sample_data_id
626
655
  or sample_data_id not in sample_data_to_nmdc_biosample_ids
@@ -631,31 +660,33 @@ class SubmissionPortalTranslator(Translator):
631
660
  continue
632
661
  nmdc_biosample_id = sample_data_to_nmdc_biosample_ids[sample_data_id]
633
662
 
634
- # Transform the raw row data according to the OmicsProcessing class's slots, and
635
- # generate an instance. A few key slots do not come from the mapping file, but
663
+ # Transform the raw row data according to the NucleotideSequencing class's slots,
664
+ # and generate an instance. A few key slots do not come from the mapping file, but
636
665
  # instead are defined here.
637
- omics_processing_slots = {
638
- "id": self._id_minter("nmdc:OmicsProcessing", 1)[0],
666
+ nucleotide_sequencing_slots = {
667
+ "id": self._id_minter("nmdc:NucleotideSequencing", 1)[0],
639
668
  "has_input": [nmdc_biosample_id],
640
669
  "has_output": [],
641
- "part_of": nmdc_study_id,
670
+ "associated_studies": [nmdc_study_id],
642
671
  "add_date": today,
643
672
  "mod_date": today,
644
- "type": "nmdc:OmicsProcessing",
673
+ "type": "nmdc:NucleotideSequencing",
645
674
  }
646
- omics_processing_slots.update(
675
+ nucleotide_sequencing_slots.update(
647
676
  self._transform_dict_for_class(
648
- omics_processing_row, "OmicsProcessing"
677
+ nucleotide_sequencing_row, "NucleotideSequencing"
649
678
  )
650
679
  )
651
- omics_processing = nmdc.OmicsProcessing(**omics_processing_slots)
680
+ nucleotide_sequencing = nmdc.NucleotideSequencing(
681
+ **nucleotide_sequencing_slots
682
+ )
652
683
 
653
684
  for data_object_row in data_objects_by_sample_data_id.get(
654
685
  sample_data_id, []
655
686
  ):
656
687
  # For each row in the DataObject mapping file that corresponds to the sample ID,
657
688
  # transform the raw row data according to the DataObject class's slots, generate
658
- # an instance, and connect that instance's minted ID to the OmicsProcessing
689
+ # an instance, and connect that instance's minted ID to the NucleotideSequencing
659
690
  # instance
660
691
  data_object_id = self._id_minter("nmdc:DataObject", 1)[0]
661
692
  data_object_slots = {
@@ -667,10 +698,10 @@ class SubmissionPortalTranslator(Translator):
667
698
  )
668
699
  data_object = nmdc.DataObject(**data_object_slots)
669
700
 
670
- omics_processing.has_output.append(data_object_id)
701
+ nucleotide_sequencing.has_output.append(data_object_id)
671
702
 
672
703
  database.data_object_set.append(data_object)
673
704
 
674
- database.omics_processing_set.append(omics_processing)
705
+ database.data_generation_set.append(nucleotide_sequencing)
675
706
 
676
707
  return database
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nmdc_runtime
3
- Version: 1.10.0
3
+ Version: 2.0.0
4
4
  Summary: A runtime system for NMDC data management and orchestration
5
5
  Home-page: https://github.com/microbiomedata/nmdc-runtime
6
6
  Author: Donny Winston
@@ -28,7 +28,7 @@ nmdc_runtime/lib/nmdc_etl_class.py,sha256=tVh3rKVMkBHQE65_LhKeIjCsaCZQk_HJzbc9K4
28
28
  nmdc_runtime/lib/transform_nmdc_data.py,sha256=hij4lR3IMQRJQdL-rsP_I-m_WyFPsBMchV2MNFUkh0M,39906
29
29
  nmdc_runtime/minter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  nmdc_runtime/minter/bootstrap.py,sha256=5Ej6pJVBRryRIi0ZwEloY78Zky7iE2okF6tPwRI2axM,822
31
- nmdc_runtime/minter/config.py,sha256=mq_s0xjLZK-zwjwk3IGgnk9ZIvvejyyZ7_qZkLt3V-c,1409
31
+ nmdc_runtime/minter/config.py,sha256=WrxX9WmyN7Ft4INRAQbd31jmlm5qwaDDaNS9AktieYA,4112
32
32
  nmdc_runtime/minter/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  nmdc_runtime/minter/adapters/repository.py,sha256=I-jmGP38-9kPhkogrwUht_Ir0CfHA9_5ZImw5I_wbcw,8323
34
34
  nmdc_runtime/minter/domain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -36,9 +36,9 @@ nmdc_runtime/minter/domain/model.py,sha256=WMOuKub3dVzkOt_EZSRDLeTsJPqFbKx01SMQ5
36
36
  nmdc_runtime/minter/entrypoints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  nmdc_runtime/minter/entrypoints/fastapi_app.py,sha256=JC4thvzfFwRc1mhWQ-kHy3yvs0SYxF6ktE7LXNCwqlI,4031
38
38
  nmdc_runtime/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- nmdc_runtime/site/graphs.py,sha256=jqfwhrCVUBszt9168au_DVvZBtgIfpUf1OXFiyPHI6U,12304
40
- nmdc_runtime/site/ops.py,sha256=Rey3H7q7hITI4xsXZ-rWNSGWgtt-65WAVCo4GLqLn3U,39826
41
- nmdc_runtime/site/repository.py,sha256=ge3LW_5izCgL6x1Ios8z2Hrt--aY6LXqhGjnAjcIJkI,37422
39
+ nmdc_runtime/site/graphs.py,sha256=ZHglSPwVHfXzdgR2CGvmbzLLbmsijloU58XvIe9Thjs,13996
40
+ nmdc_runtime/site/ops.py,sha256=EOR4VjRoFoaI2odKRgcgtGxngPsx2U0H45zzWrvQzf8,44603
41
+ nmdc_runtime/site/repository.py,sha256=rDtwUjozhyOxlkuF9HvaheOQDQWkgZYqVtsB50BcUp4,39121
42
42
  nmdc_runtime/site/resources.py,sha256=ZSH1yvA-li0R7Abc22_v0XLbjBYf5igETr2G01J3hnc,17557
43
43
  nmdc_runtime/site/util.py,sha256=zAY0oIY7GRf63ecqWelmS27N7PVrAXVwEhtnpescBSw,1415
44
44
  nmdc_runtime/site/backup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -51,21 +51,21 @@ nmdc_runtime/site/drsobjects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
51
51
  nmdc_runtime/site/drsobjects/ingest.py,sha256=pcMP69WSzFHFqHB9JIL55ePFhilnCLRc2XHCQ97w1Ik,3107
52
52
  nmdc_runtime/site/drsobjects/registration.py,sha256=D1T3QUuxEOxqKZIvB5rkb_6ZxFZiA-U9SMPajyeWC2Y,3572
53
53
  nmdc_runtime/site/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- nmdc_runtime/site/export/ncbi_xml.py,sha256=KMKHZJEjTGECI2N2Hp0yDSMGrkjEC7GmlOnptaZCy2E,22297
55
- nmdc_runtime/site/export/ncbi_xml_utils.py,sha256=jY4YJt5P7EMsy8gSOPI33K6VcEfOXaVR_zQINZOBUKU,7561
56
- nmdc_runtime/site/export/study_metadata.py,sha256=WRU0F1ksWfNX3k9LD91Pn2DuLA-IOpGvYPJd6DnguEs,4819
54
+ nmdc_runtime/site/export/ncbi_xml.py,sha256=bfGnvFO7jQmlNAdzXpQiNBw7DGvWQ3pTPfgbhczb_kM,22561
55
+ nmdc_runtime/site/export/ncbi_xml_utils.py,sha256=71LSFIYioF61xalKgsQ_Po63322dNbfQfYzqo2hZ720,7575
56
+ nmdc_runtime/site/export/study_metadata.py,sha256=yR5pXL6JG8d7cAtqcF-60Hp7bLD3dJ0Rut4AtYc0tXA,4844
57
57
  nmdc_runtime/site/normalization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
58
  nmdc_runtime/site/normalization/gold.py,sha256=iISDD4qs4d6uLhv631WYNeQVOzY5DO201ZpPtxHdkVk,1311
59
59
  nmdc_runtime/site/translation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  nmdc_runtime/site/translation/emsl.py,sha256=-aCTJTSCNaK-Koh8BE_4fTf5nyxP1KkquR6lloLEJl0,1245
61
61
  nmdc_runtime/site/translation/gold.py,sha256=R3W99sdQb7Pgu_esN7ruIC-tyREQD_idJ4xCzkqWuGw,1622
62
- nmdc_runtime/site/translation/gold_translator.py,sha256=8i5FxrgAG4rLbM0mcCSBaZEzyReht6xwmpm4xeX4HwI,26451
62
+ nmdc_runtime/site/translation/gold_translator.py,sha256=ln0BXI2v7pTgui3uNbl8tU1iOkfDZH4Z8SCaFLuuTI8,29438
63
63
  nmdc_runtime/site/translation/jgi.py,sha256=qk878KhIw674TkrVfbl2x1QJrKi3zlvE0vesIpe9slM,876
64
- nmdc_runtime/site/translation/neon_benthic_translator.py,sha256=p91B5o0MkSGaDDZw2jGQoYfJBqVc6pW7k7l7_0aQIaA,22992
65
- nmdc_runtime/site/translation/neon_soil_translator.py,sha256=Rc2KptRHORY-MZuNYMNtTTmHKD0c0sUMfMxYylLTJn4,37557
66
- nmdc_runtime/site/translation/neon_surface_water_translator.py,sha256=6LaFwBnVx6TN9v1D-G6LFrDxY0TK05AvMklx0E1tTeQ,26590
67
- nmdc_runtime/site/translation/neon_utils.py,sha256=mdxJVPb3zbD4DiKW3Fwgk22kjczKMwkcozvy7fwteTE,5203
68
- nmdc_runtime/site/translation/submission_portal_translator.py,sha256=aNGIXTiJEXGC_29qWeol2C426bAt5VlY3In_YhplPU0,28169
64
+ nmdc_runtime/site/translation/neon_benthic_translator.py,sha256=QIDqYLuf-NlGY9_88gy_5qTswkei3OfgJ5AOFpEXzJo,23985
65
+ nmdc_runtime/site/translation/neon_soil_translator.py,sha256=Rol0g67nVBGSBySUzpfdW4Fwes7bKtvnlv2g5cB0aTI,38550
66
+ nmdc_runtime/site/translation/neon_surface_water_translator.py,sha256=MQgjIfWPgoRe-bhzyfqHSe2mZwFsjcwjdT8tNqpIhlc,27729
67
+ nmdc_runtime/site/translation/neon_utils.py,sha256=d00o7duKKugpLHmsEifNbp4WjeC4GOqcgw0b5qlCg4I,5549
68
+ nmdc_runtime/site/translation/submission_portal_translator.py,sha256=6QkEfz-RN8y_aHckUWLUuQz3DslbvFck2Vyu7funHrQ,29152
69
69
  nmdc_runtime/site/translation/translator.py,sha256=xM9dM-nTgSWwu5HFoUVNHf8kqk9iiH4PgWdSx4OKxEk,601
70
70
  nmdc_runtime/site/translation/util.py,sha256=w_l3SiExGsl6cXRqto0a_ssDmHkP64ITvrOVfPxmNpY,4366
71
71
  nmdc_runtime/site/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -73,9 +73,9 @@ nmdc_runtime/site/validation/emsl.py,sha256=OG20mv_3E2rkQqTQtYO0_SVRqFb-Z_zKCiAV
73
73
  nmdc_runtime/site/validation/gold.py,sha256=Z5ZzYdjERbrJ2Tu06d0TDTBSfwaFdL1Z23Rl-YkZ2Ow,803
74
74
  nmdc_runtime/site/validation/jgi.py,sha256=LdJfhqBVHWCDp0Kzyk8eJZMwEI5NQ-zuTda31BcGwOA,1299
75
75
  nmdc_runtime/site/validation/util.py,sha256=GGbMDSwR090sr_E_fHffCN418gpYESaiot6XghS7OYk,3349
76
- nmdc_runtime-1.10.0.dist-info/LICENSE,sha256=VWiv65r7gHGjgtr3jMJYVmQny5GRpQ6H-W9sScb1x70,2408
77
- nmdc_runtime-1.10.0.dist-info/METADATA,sha256=17FQCxBZadSi9xVhFWBaBhRkCEOSsKMQQmM6A_Av1DQ,7303
78
- nmdc_runtime-1.10.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
79
- nmdc_runtime-1.10.0.dist-info/entry_points.txt,sha256=JxdvOnvxHK_8046cwlvE30s_fV0-k-eTpQtkKYA69nQ,224
80
- nmdc_runtime-1.10.0.dist-info/top_level.txt,sha256=b0K1s09L_iHH49ueBKaLrB5-lh6cyrSv9vL6x4Qvyz8,13
81
- nmdc_runtime-1.10.0.dist-info/RECORD,,
76
+ nmdc_runtime-2.0.0.dist-info/LICENSE,sha256=VWiv65r7gHGjgtr3jMJYVmQny5GRpQ6H-W9sScb1x70,2408
77
+ nmdc_runtime-2.0.0.dist-info/METADATA,sha256=e8uam0Dfv0ljsbuFsh-y56HIKpdw0BuQqtG6cJAIus8,7302
78
+ nmdc_runtime-2.0.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
79
+ nmdc_runtime-2.0.0.dist-info/entry_points.txt,sha256=JxdvOnvxHK_8046cwlvE30s_fV0-k-eTpQtkKYA69nQ,224
80
+ nmdc_runtime-2.0.0.dist-info/top_level.txt,sha256=b0K1s09L_iHH49ueBKaLrB5-lh6cyrSv9vL6x4Qvyz8,13
81
+ nmdc_runtime-2.0.0.dist-info/RECORD,,