nmdc-runtime 1.8.0__py3-none-any.whl → 1.10.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.

nmdc_runtime/config.py ADDED
@@ -0,0 +1 @@
1
+ DATABASE_CLASS_NAME = "Database"
@@ -66,7 +66,7 @@ class NCBISubmissionXML:
66
66
  element.append(child)
67
67
  return element
68
68
 
69
- def set_description(self, email, user, first, last, org, date=None):
69
+ def set_description(self, email, first, last, org, date=None):
70
70
  date = date or datetime.datetime.now().strftime("%Y-%m-%d")
71
71
  description = self.set_element(
72
72
  "Description",
@@ -74,7 +74,6 @@ class NCBISubmissionXML:
74
74
  self.set_element(
75
75
  "Comment", f"NMDC Submission for {self.nmdc_study_id}"
76
76
  ),
77
- self.set_element("Submitter", attrib={"user_name": user}),
78
77
  self.set_element(
79
78
  "Organization",
80
79
  attrib={"role": "owner", "type": "center"},
@@ -205,7 +204,7 @@ class NCBISubmissionXML:
205
204
  children=[
206
205
  self.set_element(
207
206
  "Title",
208
- f"NMDC Biosample {sample_id_value} from {organism_name} part of {self.nmdc_study_id} study",
207
+ f"NMDC Biosample {sample_id_value} from {organism_name}, part of {self.nmdc_study_id} study",
209
208
  ),
210
209
  ],
211
210
  ),
@@ -229,6 +228,13 @@ class NCBISubmissionXML:
229
228
  "Attribute", attributes[key], {"attribute_name": key}
230
229
  )
231
230
  for key in sorted(attributes)
231
+ ]
232
+ + [
233
+ self.set_element(
234
+ "Attribute",
235
+ "National Microbiome Data Collaborative",
236
+ {"attribute_name": "broker name"},
237
+ )
232
238
  ],
233
239
  ),
234
240
  ]
@@ -279,6 +285,7 @@ class NCBISubmissionXML:
279
285
  org: str,
280
286
  nmdc_omics_processing: list,
281
287
  nmdc_biosamples: list,
288
+ nmdc_library_preparation: list,
282
289
  ):
283
290
  bsm_id_name_dict = {
284
291
  biosample["id"]: biosample["name"] for biosample in nmdc_biosamples
@@ -288,6 +295,7 @@ class NCBISubmissionXML:
288
295
  fastq_files = []
289
296
  biosample_ids = []
290
297
  omics_processing_ids = {}
298
+ lib_prep_protocol_names = {}
291
299
  instrument_name = ""
292
300
  omics_type = ""
293
301
  library_name = ""
@@ -312,13 +320,26 @@ class NCBISubmissionXML:
312
320
  )
313
321
  library_name = bsm_id_name_dict.get(biosample_id, "")
314
322
 
323
+ for lib_prep_dict in nmdc_library_preparation:
324
+ if biosample_id in lib_prep_dict:
325
+ lib_prep_protocol_names[biosample_id] = (
326
+ lib_prep_dict[biosample_id]
327
+ .get("protocol_link", {})
328
+ .get("name", "")
329
+ )
330
+
315
331
  if fastq_files:
316
332
  files_elements = [
317
333
  self.set_element(
318
334
  "File",
319
335
  "",
320
336
  {"file_path": f},
321
- [self.set_element("DataType", "generic-data")],
337
+ [
338
+ self.set_element(
339
+ "DataType",
340
+ "sra-run-fastq" if ".fastq" in f else "generic-data",
341
+ )
342
+ ],
322
343
  )
323
344
  for f in fastq_files
324
345
  ]
@@ -437,6 +458,15 @@ class NCBISubmissionXML:
437
458
  )
438
459
  )
439
460
 
461
+ for biosample_id, lib_prep_name in lib_prep_protocol_names.items():
462
+ sra_attributes.append(
463
+ self.set_element(
464
+ "Attribute",
465
+ lib_prep_name,
466
+ {"name": "library_construction_protocol"},
467
+ )
468
+ )
469
+
440
470
  for biosample_id, omics_processing_id in omics_processing_ids.items():
441
471
  identifier_element = self.set_element(
442
472
  "Identifier",
@@ -468,6 +498,7 @@ class NCBISubmissionXML:
468
498
  biosamples_list: list,
469
499
  biosample_omics_processing_list: list,
470
500
  biosample_data_objects_list: list,
501
+ biosample_library_preparation_list: list,
471
502
  ):
472
503
  data_type = None
473
504
  ncbi_project_id = None
@@ -482,7 +513,6 @@ class NCBISubmissionXML:
482
513
 
483
514
  self.set_description(
484
515
  email=self.nmdc_pi_email,
485
- user="National Microbiome Data Collaborative (NMDC)",
486
516
  first=self.first_name,
487
517
  last=self.last_name,
488
518
  org=self.ncbi_submission_metadata.get("organization", ""),
@@ -510,6 +540,7 @@ class NCBISubmissionXML:
510
540
  org=self.ncbi_submission_metadata.get("organization", ""),
511
541
  nmdc_omics_processing=biosample_omics_processing_list,
512
542
  nmdc_biosamples=biosamples_list,
543
+ nmdc_library_preparation=biosample_library_preparation_list,
513
544
  )
514
545
 
515
546
  rough_string = ET.tostring(self.root, "unicode")
@@ -96,6 +96,38 @@ def fetch_omics_processing_from_biosamples(all_docs_collection, biosamples_list)
96
96
  return biosample_data_objects
97
97
 
98
98
 
99
+ def fetch_library_preparation_from_biosamples(all_docs_collection, biosamples_list):
100
+ biosample_lib_prep = []
101
+
102
+ for biosample in biosamples_list:
103
+ biosample_id = biosample["id"]
104
+
105
+ # Step 1: Find any document with biosample id as has_input
106
+ initial_query = {"has_input": biosample_id}
107
+ initial_document = all_docs_collection.find_one(initial_query)
108
+
109
+ if not initial_document:
110
+ continue
111
+
112
+ initial_output = initial_document.get("has_output")
113
+ if not initial_output:
114
+ continue
115
+
116
+ # Step 2: Use has_output to find the library preparation document
117
+ for output_id in initial_output:
118
+ lib_prep_query = {
119
+ "has_input": output_id,
120
+ "designated_class": "nmdc:LibraryPreparation",
121
+ }
122
+ lib_prep_doc = all_docs_collection.find_one(lib_prep_query)
123
+
124
+ if lib_prep_doc:
125
+ biosample_lib_prep.append({biosample_id: lib_prep_doc})
126
+ break # Stop at the first document that meets the criteria
127
+
128
+ return biosample_lib_prep
129
+
130
+
99
131
  def handle_quantity_value(slot_value):
100
132
  if "has_numeric_value" in slot_value and "has_unit" in slot_value:
101
133
  return f"{slot_value['has_numeric_value']} {slot_value['has_unit']}"
@@ -52,6 +52,7 @@ from nmdc_runtime.site.ops import (
52
52
  get_ncbi_export_pipeline_study,
53
53
  get_data_objects_from_biosamples,
54
54
  get_omics_processing_from_biosamples,
55
+ get_library_preparation_from_biosamples,
55
56
  get_ncbi_export_pipeline_inputs,
56
57
  ncbi_submission_xml_from_nmdc_study,
57
58
  ncbi_submission_xml_asset,
@@ -390,12 +391,14 @@ def nmdc_study_to_ncbi_submission_export():
390
391
  ncbi_submission_metadata = get_ncbi_export_pipeline_inputs()
391
392
  biosamples = get_biosamples_by_study_id(nmdc_study)
392
393
  omics_processing_records = get_omics_processing_from_biosamples(biosamples)
393
- data_objects = get_data_objects_from_biosamples(biosamples)
394
+ data_object_records = get_data_objects_from_biosamples(biosamples)
395
+ library_preparation_records = get_library_preparation_from_biosamples(biosamples)
394
396
  xml_data = ncbi_submission_xml_from_nmdc_study(
395
397
  nmdc_study,
396
398
  ncbi_submission_metadata,
397
399
  biosamples,
398
400
  omics_processing_records,
399
- data_objects,
401
+ data_object_records,
402
+ library_preparation_records,
400
403
  )
401
404
  ncbi_submission_xml_asset(xml_data)
nmdc_runtime/site/ops.py CHANGED
@@ -66,6 +66,7 @@ from nmdc_runtime.site.export.ncbi_xml import NCBISubmissionXML
66
66
  from nmdc_runtime.site.export.ncbi_xml_utils import (
67
67
  fetch_data_objects_from_biosamples,
68
68
  fetch_omics_processing_from_biosamples,
69
+ fetch_library_preparation_from_biosamples,
69
70
  )
70
71
  from nmdc_runtime.site.drsobjects.ingest import mongo_add_docs_result_as_dict
71
72
  from nmdc_runtime.site.resources import (
@@ -74,6 +75,7 @@ from nmdc_runtime.site.resources import (
74
75
  RuntimeApiSiteClient,
75
76
  RuntimeApiUserClient,
76
77
  NeonApiClient,
78
+ MongoDB as MongoDBResource,
77
79
  )
78
80
  from nmdc_runtime.site.translation.gold_translator import GoldStudyTranslator
79
81
  from nmdc_runtime.site.translation.neon_soil_translator import NeonSoilDataTranslator
@@ -86,7 +88,7 @@ from nmdc_runtime.site.translation.neon_surface_water_translator import (
86
88
  from nmdc_runtime.site.translation.submission_portal_translator import (
87
89
  SubmissionPortalTranslator,
88
90
  )
89
- from nmdc_runtime.site.util import collection_indexed_on_id, run_and_log
91
+ from nmdc_runtime.site.util import run_and_log, schema_collection_has_index_on_id
90
92
  from nmdc_runtime.util import (
91
93
  drs_object_in_for,
92
94
  pluralize,
@@ -526,29 +528,45 @@ def perform_mongo_updates(context, json_in):
526
528
  if rv["result"] == "errors":
527
529
  raise Failure(str(rv["detail"]))
528
530
 
529
- coll_has_id_index = collection_indexed_on_id(mongo.db)
530
- if all(coll_has_id_index[coll] for coll in docs.keys()):
531
+ # TODO containing op `perform_mongo_updates` needs test coverage, as below line had trivial bug.
532
+ # ref: https://github.com/microbiomedata/nmdc-runtime/issues/631
533
+ add_docs_result = _add_schema_docs_with_or_without_replacement(mongo, docs)
534
+ op_patch = UpdateOperationRequest(
535
+ done=True,
536
+ result=add_docs_result,
537
+ metadata={"done_at": datetime.now(timezone.utc).isoformat(timespec="seconds")},
538
+ )
539
+ op_doc = client.update_operation(op_id, op_patch).json()
540
+ return ["/operations/" + op_doc["id"]]
541
+
542
+
543
+ def _add_schema_docs_with_or_without_replacement(
544
+ mongo: MongoDBResource, docs: Dict[str, list]
545
+ ):
546
+ coll_index_on_id_map = schema_collection_has_index_on_id(mongo.db)
547
+ if all(coll_index_on_id_map[coll] for coll in docs.keys()):
531
548
  replace = True
532
- elif all(not coll_has_id_index[coll] for coll in docs.keys()):
549
+ elif all(not coll_index_on_id_map[coll] for coll in docs.keys()):
550
+ # FIXME: XXX: This is a hack because e.g. <https://w3id.org/nmdc/FunctionalAnnotationAggMember>
551
+ # documents should be unique with compound key (metagenome_annotation_id, gene_function_id)
552
+ # and yet this is not explicit in the schema. One potential solution is to auto-generate an `id`
553
+ # as a deterministic hash of the compound key.
554
+ #
555
+ # For now, decision is to potentially re-insert "duplicate" documents, i.e. to interpret
556
+ # lack of `id` as lack of unique document identity for de-duplication.
533
557
  replace = False # wasting time trying to upsert by `id`.
534
558
  else:
535
559
  colls_not_id_indexed = [
536
- coll for coll in docs.keys() if not coll_has_id_index[coll]
560
+ coll for coll in docs.keys() if not coll_index_on_id_map[coll]
537
561
  ]
538
- colls_id_indexed = [coll for coll in docs.keys() if coll_has_id_index[coll]]
562
+ colls_id_indexed = [coll for coll in docs.keys() if coll_index_on_id_map[coll]]
539
563
  raise Failure(
540
564
  "Simultaneous addition of non-`id`ed collections and `id`-ed collections"
541
565
  " is not supported at this time."
542
566
  f"{colls_not_id_indexed=} ; {colls_id_indexed=}"
543
567
  )
544
568
  op_result = mongo.add_docs(docs, validate=False, replace=replace)
545
- op_patch = UpdateOperationRequest(
546
- done=True,
547
- result=mongo_add_docs_result_as_dict(op_result),
548
- metadata={"done_at": datetime.now(timezone.utc).isoformat(timespec="seconds")},
549
- )
550
- op_doc = client.update_operation(op_id, op_patch).json()
551
- return ["/operations/" + op_doc["id"]]
569
+ return mongo_add_docs_result_as_dict(op_result)
552
570
 
553
571
 
554
572
  @op(required_resource_keys={"mongo"})
@@ -664,7 +682,6 @@ def translate_portal_submission_to_nmdc_schema_database(
664
682
  study_category: Optional[str],
665
683
  study_doi_category: Optional[str],
666
684
  study_doi_provider: Optional[str],
667
- study_funding_sources: Optional[List[str]],
668
685
  study_pi_image_url: Optional[str],
669
686
  biosample_extras: Optional[list[dict]],
670
687
  biosample_extras_slot_mapping: Optional[list[dict]],
@@ -683,7 +700,6 @@ def translate_portal_submission_to_nmdc_schema_database(
683
700
  study_category=study_category,
684
701
  study_doi_category=study_doi_category,
685
702
  study_doi_provider=study_doi_provider,
686
- study_funding_sources=study_funding_sources,
687
703
  study_pi_image_url=study_pi_image_url,
688
704
  biosample_extras=biosample_extras,
689
705
  biosample_extras_slot_mapping=biosample_extras_slot_mapping,
@@ -1027,6 +1043,10 @@ def materialize_alldocs(context) -> int:
1027
1043
 
1028
1044
  # Re-idx for `alldocs` collection
1029
1045
  mdb.alldocs.create_index("id", unique=True)
1046
+ # The indexes were added to improve the performance of the
1047
+ # /data_objects/study/{study_id} endpoint
1048
+ mdb.alldocs.create_index("has_input")
1049
+ mdb.alldocs.create_index("has_output")
1030
1050
  context.log.info(
1031
1051
  f"refreshed {mdb.alldocs} collection with {mdb.alldocs.estimated_document_count()} docs."
1032
1052
  )
@@ -1099,6 +1119,18 @@ def get_omics_processing_from_biosamples(context: OpExecutionContext, biosamples
1099
1119
  return biosample_omics_processing
1100
1120
 
1101
1121
 
1122
+ @op(required_resource_keys={"mongo"})
1123
+ def get_library_preparation_from_biosamples(
1124
+ context: OpExecutionContext, biosamples: list
1125
+ ):
1126
+ mdb = context.resources.mongo.db
1127
+ alldocs_collection = mdb["alldocs"]
1128
+ biosample_lib_prep = fetch_library_preparation_from_biosamples(
1129
+ alldocs_collection, biosamples
1130
+ )
1131
+ return biosample_lib_prep
1132
+
1133
+
1102
1134
  @op
1103
1135
  def ncbi_submission_xml_from_nmdc_study(
1104
1136
  context: OpExecutionContext,
@@ -1106,10 +1138,14 @@ def ncbi_submission_xml_from_nmdc_study(
1106
1138
  ncbi_exporter_metadata: dict,
1107
1139
  biosamples: list,
1108
1140
  omics_processing_records: list,
1109
- data_objects: list,
1141
+ data_object_records: list,
1142
+ library_preparation_records: list,
1110
1143
  ) -> str:
1111
1144
  ncbi_exporter = NCBISubmissionXML(nmdc_study, ncbi_exporter_metadata)
1112
1145
  ncbi_xml = ncbi_exporter.get_submission_xml(
1113
- biosamples, omics_processing_records, data_objects
1146
+ biosamples,
1147
+ omics_processing_records,
1148
+ data_object_records,
1149
+ library_preparation_records,
1114
1150
  )
1115
1151
  return ncbi_xml
@@ -539,7 +539,6 @@ def biosample_submission_ingest():
539
539
  "study_category": None,
540
540
  "study_doi_category": None,
541
541
  "study_doi_provider": None,
542
- "study_funding_sources": None,
543
542
  "study_pi_image_url": None,
544
543
  }
545
544
  },
@@ -578,7 +577,6 @@ def biosample_submission_ingest():
578
577
  "study_category": None,
579
578
  "study_doi_category": None,
580
579
  "study_doi_provider": None,
581
- "study_funding_sources": None,
582
580
  "study_pi_image_url": None,
583
581
  }
584
582
  },
@@ -185,9 +185,7 @@ class NeonBenthicDataTranslator(Translator):
185
185
  input_mass=_create_quantity_value(
186
186
  _get_value_or_none(extraction_row, "sampleMass"), "g"
187
187
  ),
188
- quality_control_report=nmdc.QualityControlReport(
189
- status=_get_value_or_none(extraction_row, "qaqcStatus")
190
- ),
188
+ qc_status=_get_value_or_none(extraction_row, "qaqcStatus"),
191
189
  processing_institution=processing_institution,
192
190
  )
193
191
 
@@ -280,9 +280,7 @@ class NeonSoilDataTranslator(Translator):
280
280
  input_mass=_create_quantity_value(
281
281
  _get_value_or_none(extraction_row, "sampleMass"), "g"
282
282
  ),
283
- quality_control_report=nmdc.QualityControlReport(
284
- status=_get_value_or_none(extraction_row, "qaqcStatus")
285
- ),
283
+ qc_status=_get_value_or_none(extraction_row, "qaqcStatus"),
286
284
  processing_institution=processing_institution,
287
285
  )
288
286
 
@@ -404,7 +404,9 @@ class SubmissionPortalTranslator(Translator):
404
404
  description=self._get_from(
405
405
  metadata_submission, ["studyForm", "description"]
406
406
  ),
407
- funding_sources=self.study_funding_sources,
407
+ funding_sources=self._get_from(
408
+ metadata_submission, ["studyForm", "fundingSources"]
409
+ ),
408
410
  # emsl_proposal_identifier=self._get_from(
409
411
  # metadata_submission, ["multiOmicsForm", "studyNumber"]
410
412
  # ),
nmdc_runtime/site/util.py CHANGED
@@ -4,6 +4,7 @@ from subprocess import Popen, PIPE, STDOUT, CalledProcessError
4
4
 
5
5
  from pymongo.database import Database as MongoDatabase
6
6
 
7
+ from nmdc_runtime.api.db.mongo import get_collection_names_from_schema
7
8
  from nmdc_runtime.site.resources import mongo_resource
8
9
 
9
10
  mode_test = {
@@ -34,12 +35,13 @@ def run_and_log(shell_cmd, context):
34
35
 
35
36
 
36
37
  @lru_cache
37
- def collection_indexed_on_id(mdb: MongoDatabase) -> dict:
38
- set_collection_names = [
39
- name for name in mdb.list_collection_names() if name.endswith("_set")
40
- ]
38
+ def schema_collection_has_index_on_id(mdb: MongoDatabase) -> dict:
39
+ present_collection_names = set(mdb.list_collection_names())
41
40
  return {
42
- name: ("id_1" in mdb[name].index_information()) for name in set_collection_names
41
+ name: (
42
+ name in present_collection_names and "id_1" in mdb[name].index_information()
43
+ )
44
+ for name in get_collection_names_from_schema()
43
45
  }
44
46
 
45
47
 
nmdc_runtime/util.py CHANGED
@@ -8,6 +8,7 @@ from copy import deepcopy
8
8
  from datetime import datetime, timezone
9
9
  from functools import lru_cache
10
10
  from io import BytesIO
11
+ from itertools import chain
11
12
  from pathlib import Path
12
13
  from uuid import uuid4
13
14
  from typing import List, Optional, Set, Dict
@@ -369,7 +370,14 @@ def specialize_activity_set_docs(docs):
369
370
 
370
371
  # Define a mapping from collection name to a list of class names allowable for that collection's documents.
371
372
  collection_name_to_class_names: Dict[str, List[str]] = {
372
- collection_name: get_class_names_from_collection_spec(spec)
373
+ collection_name: list(
374
+ set(
375
+ chain.from_iterable(
376
+ nmdc_schema_view().class_descendants(cls_name)
377
+ for cls_name in get_class_names_from_collection_spec(spec)
378
+ )
379
+ )
380
+ )
373
381
  for collection_name, spec in nmdc_jsonschema["$defs"]["Database"][
374
382
  "properties"
375
383
  ].items()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nmdc_runtime
3
- Version: 1.8.0
3
+ Version: 1.10.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
@@ -1,7 +1,8 @@
1
1
  nmdc_runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ nmdc_runtime/config.py,sha256=qyV_To6t--DQUpYJ3SrE6sZlxuVXLPmx2dVtZV-3l-c,33
2
3
  nmdc_runtime/containers.py,sha256=8m_S1wiFu8VOWvY7tyqzf-02X9gXY83YGc8FgjWzLGA,418
3
4
  nmdc_runtime/main.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- nmdc_runtime/util.py,sha256=nfj1MjZzVaxs9pKrHo6A98yGAzL-jHQ0zTGs_sOkBnM,20531
5
+ nmdc_runtime/util.py,sha256=Wd2GuuskyUqf1eV5mHLZws8BHAOsqnc0Qj7_4WhSvAM,20736
5
6
  nmdc_runtime/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
7
  nmdc_runtime/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
8
  nmdc_runtime/core/db/Database.py,sha256=WamgBUbq85A7-fr3p5B9Tk92U__yPdr9pBb4zyQok-4,377
@@ -35,11 +36,11 @@ nmdc_runtime/minter/domain/model.py,sha256=WMOuKub3dVzkOt_EZSRDLeTsJPqFbKx01SMQ5
35
36
  nmdc_runtime/minter/entrypoints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
37
  nmdc_runtime/minter/entrypoints/fastapi_app.py,sha256=JC4thvzfFwRc1mhWQ-kHy3yvs0SYxF6ktE7LXNCwqlI,4031
37
38
  nmdc_runtime/site/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- nmdc_runtime/site/graphs.py,sha256=QdmNvdtDLCgpJyKviLUj-IIF1gPS_vYzl1Kzv2mSF4g,12122
39
- nmdc_runtime/site/ops.py,sha256=btdgcGBwNOFnVCzAa-vO4Gs1lMxgnjcRFd8B28X0who,38222
40
- nmdc_runtime/site/repository.py,sha256=xTHAfokzbZVqlRFG65VuHxTfZfhyKZskOaCSGyrW_hw,37540
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
41
42
  nmdc_runtime/site/resources.py,sha256=ZSH1yvA-li0R7Abc22_v0XLbjBYf5igETr2G01J3hnc,17557
42
- nmdc_runtime/site/util.py,sha256=6hyVPpb6ZkWEG8Nm7uQxnZ-QmuPOG9hgWvl0mUBr5JU,1303
43
+ nmdc_runtime/site/util.py,sha256=zAY0oIY7GRf63ecqWelmS27N7PVrAXVwEhtnpescBSw,1415
43
44
  nmdc_runtime/site/backup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  nmdc_runtime/site/backup/nmdcdb_mongodump.py,sha256=H5uosmEiXwLwklJrYJWrNhb_Nuf_ew8dBpZLl6_dYhs,2699
45
46
  nmdc_runtime/site/backup/nmdcdb_mongoexport.py,sha256=XIFI_AI3zl0dFr-ELOEmwvT41MyRKBGFaAT3RcamTNE,4166
@@ -50,8 +51,8 @@ nmdc_runtime/site/drsobjects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
50
51
  nmdc_runtime/site/drsobjects/ingest.py,sha256=pcMP69WSzFHFqHB9JIL55ePFhilnCLRc2XHCQ97w1Ik,3107
51
52
  nmdc_runtime/site/drsobjects/registration.py,sha256=D1T3QUuxEOxqKZIvB5rkb_6ZxFZiA-U9SMPajyeWC2Y,3572
52
53
  nmdc_runtime/site/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- nmdc_runtime/site/export/ncbi_xml.py,sha256=-GflgZO_Q4Y2rm53QIkI7vYY6pWwCf_l7tolGgTXiBg,21026
54
- nmdc_runtime/site/export/ncbi_xml_utils.py,sha256=CqrtjwzmUbZXEW8aD-KpnCV_PlXVH-Gqp309nw3vbeo,6464
54
+ nmdc_runtime/site/export/ncbi_xml.py,sha256=KMKHZJEjTGECI2N2Hp0yDSMGrkjEC7GmlOnptaZCy2E,22297
55
+ nmdc_runtime/site/export/ncbi_xml_utils.py,sha256=jY4YJt5P7EMsy8gSOPI33K6VcEfOXaVR_zQINZOBUKU,7561
55
56
  nmdc_runtime/site/export/study_metadata.py,sha256=WRU0F1ksWfNX3k9LD91Pn2DuLA-IOpGvYPJd6DnguEs,4819
56
57
  nmdc_runtime/site/normalization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
58
  nmdc_runtime/site/normalization/gold.py,sha256=iISDD4qs4d6uLhv631WYNeQVOzY5DO201ZpPtxHdkVk,1311
@@ -60,11 +61,11 @@ nmdc_runtime/site/translation/emsl.py,sha256=-aCTJTSCNaK-Koh8BE_4fTf5nyxP1KkquR6
60
61
  nmdc_runtime/site/translation/gold.py,sha256=R3W99sdQb7Pgu_esN7ruIC-tyREQD_idJ4xCzkqWuGw,1622
61
62
  nmdc_runtime/site/translation/gold_translator.py,sha256=8i5FxrgAG4rLbM0mcCSBaZEzyReht6xwmpm4xeX4HwI,26451
62
63
  nmdc_runtime/site/translation/jgi.py,sha256=qk878KhIw674TkrVfbl2x1QJrKi3zlvE0vesIpe9slM,876
63
- nmdc_runtime/site/translation/neon_benthic_translator.py,sha256=e_7tXFrP0PpdhqUCxXmOaFViSuG36IIMDqyj3FHLcgQ,23069
64
- nmdc_runtime/site/translation/neon_soil_translator.py,sha256=cJJ_QPva5G5SIT_7DjCSsqbDvgbiKGqUYrxK3nx7_Lw,37634
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
65
66
  nmdc_runtime/site/translation/neon_surface_water_translator.py,sha256=6LaFwBnVx6TN9v1D-G6LFrDxY0TK05AvMklx0E1tTeQ,26590
66
67
  nmdc_runtime/site/translation/neon_utils.py,sha256=mdxJVPb3zbD4DiKW3Fwgk22kjczKMwkcozvy7fwteTE,5203
67
- nmdc_runtime/site/translation/submission_portal_translator.py,sha256=KiVO1vohhrJGfwzLJOumRfyHjcbYfswBIBvkYIdFxv8,28097
68
+ nmdc_runtime/site/translation/submission_portal_translator.py,sha256=aNGIXTiJEXGC_29qWeol2C426bAt5VlY3In_YhplPU0,28169
68
69
  nmdc_runtime/site/translation/translator.py,sha256=xM9dM-nTgSWwu5HFoUVNHf8kqk9iiH4PgWdSx4OKxEk,601
69
70
  nmdc_runtime/site/translation/util.py,sha256=w_l3SiExGsl6cXRqto0a_ssDmHkP64ITvrOVfPxmNpY,4366
70
71
  nmdc_runtime/site/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -72,9 +73,9 @@ nmdc_runtime/site/validation/emsl.py,sha256=OG20mv_3E2rkQqTQtYO0_SVRqFb-Z_zKCiAV
72
73
  nmdc_runtime/site/validation/gold.py,sha256=Z5ZzYdjERbrJ2Tu06d0TDTBSfwaFdL1Z23Rl-YkZ2Ow,803
73
74
  nmdc_runtime/site/validation/jgi.py,sha256=LdJfhqBVHWCDp0Kzyk8eJZMwEI5NQ-zuTda31BcGwOA,1299
74
75
  nmdc_runtime/site/validation/util.py,sha256=GGbMDSwR090sr_E_fHffCN418gpYESaiot6XghS7OYk,3349
75
- nmdc_runtime-1.8.0.dist-info/LICENSE,sha256=VWiv65r7gHGjgtr3jMJYVmQny5GRpQ6H-W9sScb1x70,2408
76
- nmdc_runtime-1.8.0.dist-info/METADATA,sha256=lBQzzEEXtwobBObmYmDogAdFKQMLvSJn3wmjG8lHQ5I,7302
77
- nmdc_runtime-1.8.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
78
- nmdc_runtime-1.8.0.dist-info/entry_points.txt,sha256=JxdvOnvxHK_8046cwlvE30s_fV0-k-eTpQtkKYA69nQ,224
79
- nmdc_runtime-1.8.0.dist-info/top_level.txt,sha256=b0K1s09L_iHH49ueBKaLrB5-lh6cyrSv9vL6x4Qvyz8,13
80
- nmdc_runtime-1.8.0.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.1.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5