nmdc-runtime 1.2.0__tar.gz → 1.3.0__tar.gz

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.

Files changed (516) hide show
  1. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.env.example +2 -1
  2. nmdc_runtime-1.3.0/.github/workflows/lint.yml +33 -0
  3. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.gitignore +4 -1
  4. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.gitpod.yml +1 -1
  5. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/Makefile +15 -5
  6. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/PKG-INFO +1 -1
  7. nmdc_runtime-1.3.0/demo/metadata_migration/notebooks/migrate_9_3_2_to_10_0_0.ipynb +480 -0
  8. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/core/auth.py +27 -6
  9. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/find.py +40 -0
  10. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/nmdcschema.py +20 -1
  11. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/queries.py +11 -1
  12. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/users.py +34 -37
  13. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/util.py +5 -2
  14. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/main.py +135 -7
  15. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/object.py +1 -1
  16. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/query.py +40 -2
  17. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/user.py +2 -0
  18. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/containers.py +0 -1
  19. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/nmdc_etl_class.py +0 -1
  20. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/transform_nmdc_data.py +0 -1
  21. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/graphs.py +69 -5
  22. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/ops.py +74 -3
  23. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/repository.py +62 -4
  24. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/gold_translator.py +1 -1
  25. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/neon_benthic_translator.py +28 -30
  26. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/neon_soil_translator.py +27 -25
  27. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/neon_utils.py +36 -35
  28. nmdc_runtime-1.3.0/nmdc_runtime/static/ORCIDiD_icon128x128.png +0 -0
  29. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime.egg-info/PKG-INFO +2 -2
  30. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime.egg-info/SOURCES.txt +3 -0
  31. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/requirements/dev.txt +34 -42
  32. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/requirements/main.in +1 -1
  33. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/requirements/main.txt +101 -110
  34. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_neon_benthic_data_translator.py +26 -44
  35. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_neon_soil_data_translator.py +35 -58
  36. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.dockerignore +0 -0
  37. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.env.test +0 -0
  38. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.github/workflows/build-and-release-to-spin.yml +0 -0
  39. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.github/workflows/mkdocs.yml +0 -0
  40. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.github/workflows/python-app.yml +0 -0
  41. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.github/workflows/release-to-pypi.yml +0 -0
  42. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.gitpod.Dockerfile +0 -0
  43. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/.nvmrc +0 -0
  44. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/LICENSE +0 -0
  45. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/README.md +0 -0
  46. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/RELEASES.md +0 -0
  47. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/components/nmdc_runtime/workflow/__init__.py +0 -0
  48. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/components/nmdc_runtime/workflow/spec.py +0 -0
  49. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/components/nmdc_runtime/workflow_execution_activity/__init__.py +0 -0
  50. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/components/nmdc_runtime/workflow_execution_activity/core.py +0 -0
  51. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/components/nmdc_runtime/workflow_execution_activity/spec.py +0 -0
  52. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/components/nmdc_runtime/workflow_execution_activity/store.py +0 -0
  53. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/.env.example +0 -0
  54. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/GOLDs5levelEcosystemClassificationPaths.xlsx +0 -0
  55. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/biosamples.json +0 -0
  56. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/console_queries.dev +0 -0
  57. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/docker-compose.yml +0 -0
  58. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/envo.owl +0 -0
  59. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/indexing.ipynb +0 -0
  60. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_discovery/po.owl +0 -0
  61. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/__init__.py +0 -0
  62. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/main.ipynb +0 -0
  63. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/main.py +0 -0
  64. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/.gitignore +0 -0
  65. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/.mongo.yaml.example +0 -0
  66. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/.notebook.env.example +0 -0
  67. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/helpers.py +0 -0
  68. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/migrate_7_7_2_to_7_8_0.ipynb +0 -0
  69. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/migrate_7_8_0_to_8_0_0.ipynb +0 -0
  70. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/migrate_8_0_0_to_8_1_2.ipynb +0 -0
  71. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/migrate_8_1_2_to_9_0_4.ipynb +0 -0
  72. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/migrate_9_0_4_to_9_1_0.ipynb +0 -0
  73. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/migrate_9_1_0_to_9_2_0.ipynb +0 -0
  74. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/demo/metadata_migration/notebooks/requirements.txt +0 -0
  75. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docker-compose.test.yml +0 -0
  76. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docker-compose.yml +0 -0
  77. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/admin.md +0 -0
  78. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/contributing-docs.md +0 -0
  79. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/draft.md +0 -0
  80. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/explanation/domain-vision-statement.md +0 -0
  81. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/explanation/identifiers.md +0 -0
  82. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/explanation/journeys.md +0 -0
  83. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/author-changesheets.md +0 -0
  84. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/claim-and-run-jobs.md +0 -0
  85. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/create-triggers.md +0 -0
  86. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/improving-search-api.md +0 -0
  87. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/jobs/gold-translation-etl.md +0 -0
  88. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/release-process.md +0 -0
  89. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/howto-guides/update-sensors-ops.md +0 -0
  90. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/auth-button.png +0 -0
  91. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/auth-client-id.png +0 -0
  92. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/auth-close-modal.png +0 -0
  93. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/auth-username.png +0 -0
  94. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/dagit-apply-changesheet-job.png +0 -0
  95. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/dagster-translation-gold-job.png +0 -0
  96. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/dagster-translation-gold-launchpad.png +0 -0
  97. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/dagster-translation-gold-overview.png +0 -0
  98. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/dagster-translation-repo-jobs.png +0 -0
  99. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/dagster-workspace-repo-loaded.png +0 -0
  100. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/job-triggering.png +0 -0
  101. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/list-from-collection-filter.png +0 -0
  102. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/list-from-collection-page-token.png +0 -0
  103. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/list-from-collection.png +0 -0
  104. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/metadata-in-dagit-runs.png +0 -0
  105. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/metadata-in-put-types.png +0 -0
  106. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/nmdc-runtime-federation.png +0 -0
  107. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/rancher-nmdc-runtime-dev-workloads.png +0 -0
  108. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/validate-json-copy-paste-execute.png +0 -0
  109. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/validate-json-get-one-valid.png +0 -0
  110. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/validate-json-response.png +0 -0
  111. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/validate-json-try-it-out.png +0 -0
  112. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/img/validate-json.png +0 -0
  113. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/index.md +0 -0
  114. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/nb/get_data.ipynb +0 -0
  115. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/nb/queue_and_trigger_data_jobs.ipynb +0 -0
  116. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/nb/wf_automation.ipynb +0 -0
  117. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/stylesheets/extra.css +0 -0
  118. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/tutorials/auth.md +0 -0
  119. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/tutorials/json.md +0 -0
  120. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs/tutorials/metadata-in.md +0 -0
  121. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/api-resource-diagram.md +0 -0
  122. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/api-resource-layout.md +0 -0
  123. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/nmdc-runtime-api-resource-diagram.png +0 -0
  124. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/nmdc-wfe.ttl +0 -0
  125. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/redoc-static.html +0 -0
  126. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/spec.md +0 -0
  127. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/design/workflow-automation.md +0 -0
  128. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/docs_prev/index.html +0 -0
  129. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/flake.lock +0 -0
  130. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/flake.nix +0 -0
  131. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/github_secrets_to_dotenv.sh +0 -0
  132. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/guix-manifest.scm +0 -0
  133. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/Makefile +0 -0
  134. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/README.md +0 -0
  135. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/__init__.py +0 -0
  136. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/Froze_Core_2015_S2_0_10_7_Metab.json +0 -0
  137. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/MAGs_activity.json +0 -0
  138. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/biosample_test.json +0 -0
  139. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/changesheet-ex-01-screenshot.png +0 -0
  140. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/changesheet-ex-01.csv +0 -0
  141. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/emsl_data_object_test.json +0 -0
  142. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/emsl_project_test.json +0 -0
  143. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/feature-set.json +0 -0
  144. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/ftms_nom_data_products.json +0 -0
  145. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/functional-annotation.json +0 -0
  146. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/gcms_metabolomics_data_products.json +0 -0
  147. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/gold_project_test.json +0 -0
  148. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/img_mg_annotation_data_objects.json +0 -0
  149. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/img_mg_annotation_objects.json +0 -0
  150. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/metagenome_annotation_activity.json +0 -0
  151. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/mg_assembly_activities_test.json +0 -0
  152. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/mg_assembly_data_objects_test.json +0 -0
  153. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/migs-template-cedar.schema.json +0 -0
  154. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/nom_analysis_activity.json +0 -0
  155. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/readQC_activities_test.json +0 -0
  156. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/readQC_data_objects_test.json +0 -0
  157. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/read_based_analysis_activity.json +0 -0
  158. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/examples/study_test.json +0 -0
  159. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/images/nmdc-etl-workflow.drawio +0 -0
  160. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/images/nmdc-etl-workflow.png +0 -0
  161. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/images/nmdc-etl-workflow.svg +0 -0
  162. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/Description_MIxS_Packages_v5.docx +0 -0
  163. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/GOLD-Paths-to-MIxS-ENVO-triad-mapping.xlsx +0 -0
  164. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSair_20180621_GOLD_Mapping_04132020.xlsx +0 -0
  165. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSbuiltenv_20180621_GOLD_Mapping_04172020.xlsx +0 -0
  166. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShostassoc_20180621_GOLD_Mapping.xlsx +0 -0
  167. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShumanassoc_20180621_GOLD_Mapping_04142020.xlsx +0 -0
  168. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShumangut_20180621_GOLD_Mapping_04152020.xlsx +0 -0
  169. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShumanoral_20180621_GOLD_Mapping_04152020.xlsx +0 -0
  170. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShumanskin_20180621_GOLD_Mapping_04162020.xlsx +0 -0
  171. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShumanvaginal_20180621_GOLD_04162020.xlsx +0 -0
  172. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShydrocarbCores_20180621_Mapping_GOLD.xlsx +0 -0
  173. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxShydrocarbfs_20180621_v5_GOLD_Mapping.xlsx +0 -0
  174. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSmatbiofilm_20180621_v5_GOLD_Mapping.xlsx +0 -0
  175. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSmisc_20180621_GOLD_Mapping.xlsx +0 -0
  176. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSplantassoc_20180621_v5_GOLD_Mapping.xlsx +0 -0
  177. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSsediment_20180621_GOLD_Mapping_04102020.xlsx +0 -0
  178. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSsoil_20180621_GOLD_Mapping_04102020.xlsx +0 -0
  179. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSwastesludge_20180621_GOLD_Mapping_Apr-10.xlsx +0 -0
  180. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/MIxSwater_20180621_GOLD_Mapping_04122020.xlsx +0 -0
  181. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/Makefile +0 -0
  182. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/README.md +0 -0
  183. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/mixs_v4.xlsx +0 -0
  184. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/mapping-files/mixs_v5.xlsx +0 -0
  185. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/202106_curation_updates.ipynb +0 -0
  186. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/202106_workflow_execution_demo.ipynb +0 -0
  187. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/202109_metadata_ingest.ipynb +0 -0
  188. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/NMDC-GOLD-data-counts.ipynb +0 -0
  189. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/README.md +0 -0
  190. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/archive/generate-gold-sample-json.ipynb +0 -0
  191. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/archive/translate-30_FICUS_Proposals_Metadata_4_Emiley_Chris_11082019.ipynb +0 -0
  192. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/changesheets-example.ipynb +0 -0
  193. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/changesheets-testing.ipynb +0 -0
  194. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-array-item-nested-attributes.tsv +0 -0
  195. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-insert.tsv +0 -0
  196. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-remove-item.tsv +0 -0
  197. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-remove-property.tsv +0 -0
  198. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-replace.tsv +0 -0
  199. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-update-pi-websites.tsv +0 -0
  200. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-with-separator1.tsv +0 -0
  201. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-without-separator1.tsv +0 -0
  202. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-without-separator2.tsv +0 -0
  203. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/changesheet-without-separator3.tsv +0 -0
  204. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/study-data1.json +0 -0
  205. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/study-data2.json +0 -0
  206. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/data/study-data3.json +0 -0
  207. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/ensure_biosample_set_study_id.ipynb +0 -0
  208. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/ghissue_252_253_linked_samples.ipynb +0 -0
  209. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/ghissue_255.ipynb +0 -0
  210. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/ghissue_272.ipynb +0 -0
  211. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/gold-biosample-null-value-analysis.ipynb +0 -0
  212. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/gold_ids_to_igsns.ipynb +0 -0
  213. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/images/EMSL-data-translation.png +0 -0
  214. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/images/GOLD-data-objects-translation.png +0 -0
  215. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/images/GOLD-study-project-biosample-translation.png +0 -0
  216. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/images/NMDC-jupyter-translation-workflow.png +0 -0
  217. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/metaP_stegen.ipynb +0 -0
  218. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/metadata_db_admin.ipynb +0 -0
  219. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/mongo_etl_demo.ipynb +0 -0
  220. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/FICUS-projects-merged.owl +0 -0
  221. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/FICUS-projects-merged.owl.zip +0 -0
  222. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/FICUS-projects-translation.owl +0 -0
  223. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/catalog-v001.xml +0 -0
  224. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/gold-classification-paths-translation.json +0 -0
  225. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/gold-classification-paths-translation.json.zip +0 -0
  226. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/gold-classification-paths-translation.owl +0 -0
  227. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/gold-classification-paths-translation.owl.zip +0 -0
  228. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/gold-dataset-translation.owl +0 -0
  229. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json/biosample.json +0 -0
  230. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json/data_objects.json +0 -0
  231. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json/omics_processing.json +0 -0
  232. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json/study.json +0 -0
  233. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json_2020-02-01.zip +0 -0
  234. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json_2020-02-05.zip +0 -0
  235. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json_2020-02-06.zip +0 -0
  236. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json_2020-02-12.zip +0 -0
  237. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json_2020-02-18.zip +0 -0
  238. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/nmdc-json_2020-02-19.zip +0 -0
  239. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/schema-test-full.txt.zip +0 -0
  240. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/schema-test.json +0 -0
  241. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/schema-test.txt +0 -0
  242. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/schema-test.txt.zip +0 -0
  243. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/temp.txt +0 -0
  244. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-five-biosamples/biosample.json +0 -0
  245. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-five-biosamples/data_object.json +0 -0
  246. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-five-biosamples/project.json +0 -0
  247. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-five-biosamples/study.json +0 -0
  248. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/biosample.json +0 -0
  249. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/emsl_data_objects.json +0 -0
  250. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/emsl_omics_processing.json +0 -0
  251. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/faa_fna_fastq_data_objects.json +0 -0
  252. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/gold_omics_processing.json +0 -0
  253. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/gold_study.json +0 -0
  254. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline/nmdc-02.json +0 -0
  255. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/output/test-pipeline.zip +0 -0
  256. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test-changesheet-with-separator.ipynb +0 -0
  257. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test-changesheet-without-separator.ipynb +0 -0
  258. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test-output.ipynb +0 -0
  259. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test-pipeline-scratch.ipynb +0 -0
  260. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test-pipeline-temp.ipynb +0 -0
  261. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test-pipeline.ipynb +0 -0
  262. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test.json +0 -0
  263. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/test.txt +0 -0
  264. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/translate-EMSL-data.ipynb +0 -0
  265. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/translate-GOLD-data-objects.ipynb +0 -0
  266. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/translate-GOLD-study-project-biosample.ipynb +0 -0
  267. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/notebooks/translation-pipeline.ipynb +0 -0
  268. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/__init__.py +0 -0
  269. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/__init__.py +0 -0
  270. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/align_nmdc_datatypes.py +0 -0
  271. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/execute_etl_pipeline.py +0 -0
  272. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/fix_omics_processing_json.py +0 -0
  273. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/__init__.py +0 -0
  274. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/data_operations.py +0 -0
  275. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/extract_nmdc_data.py +0 -0
  276. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/load_nmdc_data.py +0 -0
  277. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/nmdc_data_source.yaml +0 -0
  278. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/nmdc_dataframes.py +0 -0
  279. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/nmdc_etl_class.py +0 -0
  280. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/lib/transform_nmdc_data.py +0 -0
  281. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/mandatory_mixs_terms.py +0 -0
  282. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/mandatory_mixs_terms.py.org +0 -0
  283. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/bin/validate_json.py +0 -0
  284. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/2020-23-12-brodie-Gs0135149-soil-metadata.csv +0 -0
  285. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/2021-02-03-stegen_biosample_linking_update.csv +0 -0
  286. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/2021-02-04-brodie_biosample_linking_update.csv +0 -0
  287. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/2021-02-04-stegen_biosample_template.json +0 -0
  288. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/2021-07-02-study-changes.csv +0 -0
  289. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/30_FICUS_Proposals_Metadata_4_Emiley_Chris_11082019.xlsx +0 -0
  290. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/EMSL_FICUS_project_process_data_export.xlsx +0 -0
  291. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/EMSL_Hess_Stegen_Blanchard_DatasetToMetagenomeMapping.tsv +0 -0
  292. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/EMSL_biosample_matches.tsv +0 -0
  293. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/FICUS - JGI-EMSL Proposal - Gold Study - ID mapping and PI.xlsx +0 -0
  294. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/GOLD-soil-mixs-envo-mappings.tsv +0 -0
  295. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/GOLD-to-mixs-map.tsv +0 -0
  296. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/GOLD_Ecosystem_Classification_Paths_10152019.xlsx +0 -0
  297. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/GOLD_ecosystem_classification_paths.xlsx +0 -0
  298. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/JGI-EMSL-FICUS-proposals.fnl.tsv +0 -0
  299. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/NMDC-GOLD-Fields.xlsx +0 -0
  300. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/README.md +0 -0
  301. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/__init__.py +0 -0
  302. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/Hess_emsl_analysis_data_objects.json +0 -0
  303. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/Hess_metaproteomic_analysis_activities.json +0 -0
  304. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/Stegen_emsl_analysis_data_objects.json +0 -0
  305. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/Stegen_metaproteomic_analysis_activities.json +0 -0
  306. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/metagenome_annotation_activities.json +0 -0
  307. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/metagenome_annotation_data_objects.json +0 -0
  308. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/metagenome_assembly_activities.json +0 -0
  309. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/metagenome_assembly_data_objects.json +0 -0
  310. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/readQC_activities.json +0 -0
  311. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/aim-2-workflows/readQC_data_objects.json +0 -0
  312. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/all_gold_fields.xlsx +0 -0
  313. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/ficus_project_faa.tsv +0 -0
  314. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/ficus_project_fastq.tsv +0 -0
  315. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/ficus_project_fna.tsv +0 -0
  316. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/mixs_v5.xlsx +0 -0
  317. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/nmdc-version2.zip +0 -0
  318. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/metadata-translation/src/data/nmdc-version5.zip +0 -0
  319. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/mkdocs.yml +0 -0
  320. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/mkdocs_overrides/partials/source.html +0 -0
  321. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/mongoKeyFile +0 -0
  322. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nersc-sshproxy.sh +0 -0
  323. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc-wfe.html +0 -0
  324. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/__init__.py +0 -0
  325. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/analytics.py +0 -0
  326. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/boot/__init__.py +0 -0
  327. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/boot/capabilities.py +0 -0
  328. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/boot/object_types.py +0 -0
  329. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/boot/triggers.py +0 -0
  330. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/boot/workflows.py +0 -0
  331. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/core/__init__.py +0 -0
  332. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/core/idgen.py +0 -0
  333. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/core/metadata.py +0 -0
  334. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/core/util.py +0 -0
  335. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/db/__init__.py +0 -0
  336. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/db/mongo.py +0 -0
  337. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/db/s3.py +0 -0
  338. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/db/terminus.py +0 -0
  339. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/__init__.py +0 -0
  340. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/capabilities.py +0 -0
  341. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/ids.py +0 -0
  342. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/jobs.py +0 -0
  343. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/metadata.py +0 -0
  344. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/object_types.py +0 -0
  345. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/objects.py +0 -0
  346. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/operations.py +0 -0
  347. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/runs.py +0 -0
  348. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/search.py +0 -0
  349. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/sites.py +0 -0
  350. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/triggers.py +0 -0
  351. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/endpoints/workflows.py +0 -0
  352. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/entrypoint.sh +0 -0
  353. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/__init__.py +0 -0
  354. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/capability.py +0 -0
  355. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/id.py +0 -0
  356. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/job.py +0 -0
  357. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/metadata.py +0 -0
  358. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/minter.py +0 -0
  359. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/nmdc_schema.py +0 -0
  360. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/object_type.py +0 -0
  361. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/operation.py +0 -0
  362. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/run.py +0 -0
  363. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/site.py +0 -0
  364. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/trigger.py +0 -0
  365. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/util.py +0 -0
  366. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/models/workflow.py +0 -0
  367. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/models/ingest.py +0 -0
  368. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/models/users.py +0 -0
  369. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/models/workflow_execution_activity.py +0 -0
  370. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/outputs.py +0 -0
  371. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/router.py +0 -0
  372. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/users.py +0 -0
  373. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/workflows/__init__.py +0 -0
  374. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/workflows/activities/router.py +0 -0
  375. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/api/v1/workflows/activities.py +0 -0
  376. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/client/__init__.py +0 -0
  377. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/core/__init__.py +0 -0
  378. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/core/db/Database.py +0 -0
  379. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/core/db/__init__.py +0 -0
  380. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/core/exceptions/__init__.py +0 -0
  381. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/core/exceptions/base.py +0 -0
  382. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/core/exceptions/token.py +0 -0
  383. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/dagster.Dockerfile +0 -0
  384. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/domain/__init__.py +0 -0
  385. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/domain/users/__init__.py +0 -0
  386. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/domain/users/queriesInterface.py +0 -0
  387. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/domain/users/userSchema.py +0 -0
  388. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/domain/users/userService.py +0 -0
  389. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/fastapi.Dockerfile +0 -0
  390. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/__init__.py +0 -0
  391. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/__init__.py +0 -0
  392. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/db.py +0 -0
  393. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/impl/mongo/__init__.py +0 -0
  394. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/impl/mongo/db.py +0 -0
  395. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/impl/mongo/models/__init__.py +0 -0
  396. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/impl/mongo/models/user.py +0 -0
  397. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/models/__init__.py +0 -0
  398. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/infrastructure/database/models/user.py +0 -0
  399. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/__init__.py +0 -0
  400. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/extract_nmdc_data.py +0 -0
  401. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/load_nmdc_data.py +0 -0
  402. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/nmdc_data_source.yaml +0 -0
  403. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/lib/nmdc_dataframes.py +0 -0
  404. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/main.py +0 -0
  405. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/__init__.py +0 -0
  406. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/adapters/__init__.py +0 -0
  407. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/adapters/repository.py +0 -0
  408. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/bootstrap.py +0 -0
  409. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/config.py +0 -0
  410. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/domain/__init__.py +0 -0
  411. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/domain/model.py +0 -0
  412. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/entrypoints/__init__.py +0 -0
  413. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/entrypoints/fastapi_app.py +0 -0
  414. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/minter/nmdc.schema.json +0 -0
  415. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/__init__.py +0 -0
  416. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/backup/__init__.py +0 -0
  417. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/backup/nmdcdb_mongodump.py +0 -0
  418. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/backup/nmdcdb_mongoexport.py +0 -0
  419. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/backup/nmdcdb_mongoimport.py +0 -0
  420. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/changesheets/__init__.py +0 -0
  421. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/changesheets/base.py +0 -0
  422. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/changesheets/data/OmicsProcessing-to-catted-Biosamples.tsv +0 -0
  423. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/changesheets/scripts/missing_neon_soils_ecosystem_data.py +0 -0
  424. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/changesheets/scripts/neon_soils_add_ncbi_ids.py +0 -0
  425. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/dagster.yaml +0 -0
  426. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/drsobjects/__init__.py +0 -0
  427. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/drsobjects/ingest.py +0 -0
  428. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/drsobjects/registration.py +0 -0
  429. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/entrypoint-daemon.sh +0 -0
  430. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/entrypoint-dagit-readonly.sh +0 -0
  431. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/entrypoint-dagit.sh +0 -0
  432. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/export/__init__.py +0 -0
  433. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/export/study_metadata.py +0 -0
  434. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/normalization/__init__.py +0 -0
  435. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/normalization/gold.py +0 -0
  436. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/resources.py +0 -0
  437. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/.TDB +0 -0
  438. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/__init__.py +0 -0
  439. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/config.json +0 -0
  440. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/generate.py +0 -0
  441. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/ingest.py +0 -0
  442. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/nmdc.schema.terminusdb.json +0 -0
  443. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/terminusdb/schema.py +0 -0
  444. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/__init__.py +0 -0
  445. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/emsl.py +0 -0
  446. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/gold.py +0 -0
  447. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/jgi.py +0 -0
  448. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/submission_portal_translator.py +0 -0
  449. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/translator.py +0 -0
  450. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/translation/util.py +0 -0
  451. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/util.py +0 -0
  452. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/validation/__init__.py +0 -0
  453. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/validation/emsl.py +0 -0
  454. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/validation/gold.py +0 -0
  455. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/validation/jgi.py +0 -0
  456. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/validation/util.py +0 -0
  457. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/site/workspace.yaml +0 -0
  458. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/templates/pipeline_search.html +0 -0
  459. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/templates/search.html +0 -0
  460. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/test.Dockerfile +0 -0
  461. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime/util.py +0 -0
  462. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime.egg-info/dependency_links.txt +0 -0
  463. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime.egg-info/entry_points.txt +0 -0
  464. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/nmdc_runtime.egg-info/top_level.txt +0 -0
  465. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/requirements/dev.in +0 -0
  466. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/setup.cfg +0 -0
  467. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/setup.py +0 -0
  468. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tasks.py +0 -0
  469. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/terminusdb +0 -0
  470. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/__init__.py +0 -0
  471. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/conftest.py +0 -0
  472. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/e2e/test_minter_api.py +0 -0
  473. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/files/nmdc_bsm-11-5nhz3402.json +0 -0
  474. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/files/nmdc_bsm-12-7mysck21.json +0 -0
  475. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/files/nmdc_dobj-11-000n1286.json +0 -0
  476. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/files/nmdc_sty-11-pzmd0x14.json +0 -0
  477. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/files/test_changesheet_update_one_ph.tsv +0 -0
  478. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/integration/test_minter_repository.py +0 -0
  479. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/mongodump-nmdc-testdb.sh +0 -0
  480. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/mongorestore-nmdc-testdb.sh +0 -0
  481. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/nmdcdb.test.archive.gz +0 -0
  482. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_api/__init__.py +0 -0
  483. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_api/test_db_mongo.py +0 -0
  484. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_api/test_endpoints.py +0 -0
  485. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_api/test_metadata.py +0 -0
  486. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_api/util.py +0 -0
  487. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/__init__.py +0 -0
  488. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/conftest.py +0 -0
  489. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_gold_translator.py +0 -0
  490. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_gold_translator_data.yaml +0 -0
  491. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_integrity.py +0 -0
  492. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_submission_portal_translator.py +0 -0
  493. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_data/test_submission_portal_translator_data.yaml +0 -0
  494. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_graphs/__init__.py +0 -0
  495. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_graphs/ensure_jobs.py +0 -0
  496. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_graphs/test_hello.py +0 -0
  497. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_graphs/test_submission_portal_graphs.py +0 -0
  498. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_normalization/__init__.py +0 -0
  499. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_normalization/test_gold.py +0 -0
  500. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_ops/__init__.py +0 -0
  501. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_ops/test_data_api_ops.py +0 -0
  502. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_ops/test_get_csv_rows_from_url.py +0 -0
  503. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_ops/test_gold_api_ops.py +0 -0
  504. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_ops/test_hello.py +0 -0
  505. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/test_util.py +0 -0
  506. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/unit/core_util.py +0 -0
  507. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests/unit/test_minter_model.py +0 -0
  508. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests2/__init__.py +0 -0
  509. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests2/domain/__init__.py +0 -0
  510. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests2/domain/service/__init__.py +0 -0
  511. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tests2/domain/service/test_user_service.py +0 -0
  512. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/tmp.json +0 -0
  513. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/util/mongodump-nmdc.sh +0 -0
  514. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/util/mongorestore-nmdc.sh +0 -0
  515. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/wait-for-it.sh +0 -0
  516. {nmdc_runtime-1.2.0 → nmdc_runtime-1.3.0}/workspace.toml +0 -0
@@ -37,4 +37,5 @@ NEON_API_TOKEN=y
37
37
  NEON_API_BASE_URL=https://data.neonscience.org/api/v0
38
38
 
39
39
  NERSC_USERNAME=replaceme
40
- ORCID_CLIENT_ID=replaceme
40
+ ORCID_NMDC_CLIENT_ID=replaceme
41
+ ORCID_NMDC_CLIENT_SECRET=replaceme
@@ -0,0 +1,33 @@
1
+ name: Lint-check + Style-normalize Python files
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - '.github/workflows/lint.yml'
7
+ - '**.py'
8
+
9
+
10
+ jobs:
11
+ build:
12
+ name: lint-check and style-normalize Python files
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ ref: ${{ github.event.pull_request.head.ref }}
19
+ - name: Set up Python 3.10
20
+ uses: actions/setup-python@v4
21
+ with:
22
+ python-version: '3.10'
23
+ - name: Lint with flake8 and Reformat with black
24
+ run: |
25
+ make init-lint-and-black
26
+ make lint
27
+ make black
28
+ - name: commit and push if reformatted
29
+ run: |
30
+ git config user.name github-actions
31
+ git config user.email github-actions@github.com
32
+ if git status --short | grep -q '\.py$'; then git add '*.py' && git commit -m "style: reformat" && git push; fi
33
+
@@ -165,4 +165,7 @@ neon_cache.sqlite
165
165
  # output of changesheet generation
166
166
  nmdc_runtime/site/changesheets/changesheets_output/
167
167
 
168
- mdb-nmdc-dev.tar.gz
168
+ mdb-nmdc-dev.tar.gz
169
+
170
+ # superceded by .github/workflows/build-and-release-to-spin.yml
171
+ docker-build.sh
@@ -9,4 +9,4 @@ tasks:
9
9
  - name: Start Dev on Fresh Gitpod
10
10
  before: cp .env.example .env
11
11
  init: docker compose up mongo --detach && make mongorestore-nmdc-dev
12
- command: make up-dev && docker-compose logs -f fastapi
12
+ command: make up-dev && docker compose logs -f fastapi
@@ -18,14 +18,14 @@ update-deps:
18
18
  update: update-deps init
19
19
 
20
20
  up-dev:
21
- docker-compose up --build --force-recreate --detach --remove-orphans
21
+ docker compose up --build --force-recreate --detach --remove-orphans
22
22
 
23
23
  dev-reset-db:
24
24
  docker compose \
25
25
  exec mongo /bin/bash -c "./app_tests/mongorestore-nmdc-testdb.sh"
26
26
 
27
27
  up-test:
28
- docker-compose --file docker-compose.test.yml \
28
+ docker compose --file docker-compose.test.yml \
29
29
  up --build --force-recreate --detach --remove-orphans
30
30
 
31
31
  test-build:
@@ -41,6 +41,9 @@ test-run:
41
41
 
42
42
  test: test-build test-run
43
43
 
44
+ black:
45
+ black nmdc_runtime
46
+
44
47
  lint:
45
48
  # Python syntax errors or undefined names
46
49
  flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --extend-ignore=F722
@@ -48,14 +51,21 @@ lint:
48
51
  flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 \
49
52
  --statistics --extend-exclude="./build/" --extend-ignore=F722
50
53
 
54
+ PIP_PINNED_FLAKE8 := $(shell grep 'flake8==' requirements/dev.txt)
55
+ PIP_PINNED_BLACK := $(shell grep 'black==' requirements/dev.txt)
56
+
57
+ init-lint-and-black:
58
+ pip install $(PIP_PINNED_FLAKE8)
59
+ pip install $(PIP_PINNED_BLACK)
60
+
51
61
  down-dev:
52
- docker-compose down
62
+ docker compose down
53
63
 
54
64
  down-test:
55
- docker-compose --file docker-compose.test.yml down
65
+ docker compose --file docker-compose.test.yml down
56
66
 
57
67
  follow-fastapi:
58
- docker-compose logs fastapi -f
68
+ docker compose logs fastapi -f
59
69
 
60
70
  fastapi-deploy-spin:
61
71
  rancher kubectl rollout restart deployment/runtime-fastapi --namespace=nmdc-dev
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nmdc_runtime
3
- Version: 1.2.0
3
+ Version: 1.3.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
@@ -0,0 +1,480 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "initial_id",
6
+ "metadata": {
7
+ "collapsed": true
8
+ },
9
+ "source": [
10
+ "# Migrate MongoDB database from `nmdc-schema` `v9.3.2` to `v10.0.0`"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "markdown",
15
+ "id": "f65ad4ab",
16
+ "metadata": {},
17
+ "source": [
18
+ "## Prerequisites"
19
+ ]
20
+ },
21
+ {
22
+ "cell_type": "markdown",
23
+ "id": "37d358ba",
24
+ "metadata": {},
25
+ "source": [
26
+ "### 1. Determine MongoDB collections involved.\n",
27
+ "\n",
28
+ "In this step, you will determine which MongoDB collections will be involved with this migration.\n",
29
+ "\n",
30
+ "1. In the [`nmdc-schema` repo](https://github.com/microbiomedata/nmdc-schema/tree/main/nmdc_schema/migrators), go to the `nmdc_schema/migrators` directory and open the Python module whose name reflects the initial and final schema versions.\n",
31
+ "2. In the `Migrator` class, note the collection names that are mentioned within the `upgrade` method.\n",
32
+ "3. Add their names to the `COLLECTION_NAMES` Python list below.\n",
33
+ " - > TODO: Distinguish between colletions being read vs. collections being transformed; and consider what happens when a collection is created, deleted, or renamed."
34
+ ]
35
+ },
36
+ {
37
+ "cell_type": "code",
38
+ "execution_count": null,
39
+ "id": "09966b0d",
40
+ "metadata": {},
41
+ "outputs": [],
42
+ "source": [
43
+ "COLLECTION_NAMES: list[str] = [\n",
44
+ " \"extraction_set\",\n",
45
+ "]"
46
+ ]
47
+ },
48
+ {
49
+ "cell_type": "markdown",
50
+ "id": "17f351e8",
51
+ "metadata": {},
52
+ "source": [
53
+ "### 2. Coordinate with stakeholders.\n",
54
+ "\n",
55
+ "In this step, you'll identify and reach out to the people that read/write to those collections; to agree on a migration schedule that works for you and them.\n",
56
+ "\n",
57
+ "Here's a table of MongoDB collections and the NMDC system components that write to them (according to [a conversation that occurred on September 11, 2023](https://nmdc-group.slack.com/archives/C01SVTKM8GK/p1694465755802979?thread_ts=1694216327.234519&cid=C01SVTKM8GK)).\n",
58
+ "\n",
59
+ "| Mongo collection | NMDC system components that write to it |\n",
60
+ "|---------------------------------------------|----------------------------------------------------------|\n",
61
+ "| `biosample_set` | Workflows (via manual entry via `nmdc-runtime` HTTP API) |\n",
62
+ "| `data_object_set` | Workflows (via `nmdc-runtime` HTTP API) |\n",
63
+ "| `mags_activity_set` | Workflows (via `nmdc-runtime` HTTP API) |\n",
64
+ "| `metagenome_annotation_activity_set` | Workflows (via `nmdc-runtime` HTTP API) |\n",
65
+ "| `metagenome_assembly_set` | Workflows (via `nmdc-runtime` HTTP API) |\n",
66
+ "| `read_based_taxonomy_analysis_activity_set` | Workflows (via `nmdc-runtime` HTTP API) |\n",
67
+ "| `read_qc_analysis_activity_set` | Workflows (via `nmdc-runtime` HTTP API) |\n",
68
+ "| `jobs` | Scheduler (via MongoDB directly; e.g. `pymongo`) |\n",
69
+ "| `*` | `nmdc-runtime` (via MongoDB directly; e.g. `pymongo`) |\n",
70
+ "\n",
71
+ "You can use that table to help determine which people read/write to those collections. You can then coordinate a migration time slot with them via Slack, email, etc."
72
+ ]
73
+ },
74
+ {
75
+ "cell_type": "markdown",
76
+ "id": "233a35c3",
77
+ "metadata": {},
78
+ "source": [
79
+ "### 3. Set up environment.\n",
80
+ "\n",
81
+ "In this step, you'll set up an environment in which you can run this notebook.\n",
82
+ "\n",
83
+ "1. Start a **MongoDB server** on your local machine (and ensure it does **not** already contain a database named `nmdc`).\n",
84
+ " 1. You can start a [Docker](https://hub.docker.com/_/mongo)-based MongoDB server at `localhost:27055` by running this command:\n",
85
+ " ```shell\n",
86
+ " # Run in any directory:\n",
87
+ " docker run --rm --detach --name mongo-migration-transformer -p 27055:27017 mongo:6.0.4\n",
88
+ " ```\n",
89
+ " > Note: A MongoDB server started via that command will have no access control (i.e. you will be able to access it without a username or password).\n",
90
+ "2. Create and populate a **notebook configuration file** named `.notebook.env`.\n",
91
+ " 1. You can use the `.notebook.env.example` file as a template:\n",
92
+ " ```shell\n",
93
+ " # Run in the same directory as this notebook:\n",
94
+ " $ cp .notebook.env.example .notebook.env\n",
95
+ " ```\n",
96
+ "3. Create and populate **MongoDB configuration files** for connecting to the origin (typically, local) and transformer (typically, remote) MongoDB servers.\n",
97
+ " 1. You can use the `.mongo.yaml.example` file as a template:\n",
98
+ " ```shell\n",
99
+ " # Run in the same directory as this notebook:\n",
100
+ " $ cp .mongo.yaml.example .mongo.origin.yaml\n",
101
+ " $ cp .mongo.yaml.example .mongo.transformer.yaml\n",
102
+ " ```\n",
103
+ " > When populating the file for the origin MongoDB server, use credentials that have write access to the `nmdc` database."
104
+ ]
105
+ },
106
+ {
107
+ "cell_type": "markdown",
108
+ "id": "69937b18",
109
+ "metadata": {},
110
+ "source": [
111
+ "## Procedure"
112
+ ]
113
+ },
114
+ {
115
+ "cell_type": "markdown",
116
+ "id": "fe81196a",
117
+ "metadata": {},
118
+ "source": [
119
+ "### Install Python dependencies\n",
120
+ "\n",
121
+ "In this step, you'll [install](https://saturncloud.io/blog/what-is-the-difference-between-and-in-jupyter-notebooks/) the Python packages upon which this notebook depends. You can do that by running this cell.\n",
122
+ "\n",
123
+ "> Note: If the output of this cell says \"Note: you may need to restart the kernel to use updated packages\", restart the kernel (not the notebook) now."
124
+ ]
125
+ },
126
+ {
127
+ "cell_type": "code",
128
+ "execution_count": null,
129
+ "id": "e25a0af308c3185b",
130
+ "metadata": {
131
+ "collapsed": false
132
+ },
133
+ "outputs": [],
134
+ "source": [
135
+ "%pip install -r requirements.txt\n",
136
+ "%pip install nmdc-schema==10.0.0"
137
+ ]
138
+ },
139
+ {
140
+ "cell_type": "markdown",
141
+ "id": "a407c354",
142
+ "metadata": {},
143
+ "source": [
144
+ "### Import Python dependencies\n",
145
+ "\n",
146
+ "Import the Python objects upon which this notebook depends.\n",
147
+ "\n",
148
+ "> Note: One of the Python objects is a Python class that is specific to this migration."
149
+ ]
150
+ },
151
+ {
152
+ "cell_type": "code",
153
+ "execution_count": null,
154
+ "id": "dbecd561",
155
+ "metadata": {},
156
+ "outputs": [],
157
+ "source": [
158
+ "# Third-party packages:\n",
159
+ "import pymongo\n",
160
+ "from nmdc_schema.nmdc_data import get_nmdc_jsonschema_dict\n",
161
+ "from nmdc_schema.migrators.adapters.mongo_adapter import MongoAdapter\n",
162
+ "from nmdc_schema.migrators.migrator_from_9_3_to_10_0 import Migrator\n",
163
+ "from jsonschema import Draft7Validator\n",
164
+ "\n",
165
+ "# First-party packages:\n",
166
+ "from helpers import Config"
167
+ ]
168
+ },
169
+ {
170
+ "cell_type": "markdown",
171
+ "id": "99b20ff4",
172
+ "metadata": {},
173
+ "source": [
174
+ "### Parse configuration files\n",
175
+ "\n",
176
+ "Parse the notebook and Mongo configuration files."
177
+ ]
178
+ },
179
+ {
180
+ "cell_type": "code",
181
+ "execution_count": null,
182
+ "id": "1eac645a",
183
+ "metadata": {},
184
+ "outputs": [],
185
+ "source": [
186
+ "cfg = Config()\n",
187
+ "\n",
188
+ "# Define some aliases we can use to make the shell commands in this notebook easier to read.\n",
189
+ "mongodump = cfg.mongodump_path\n",
190
+ "mongorestore = cfg.mongorestore_path\n",
191
+ "\n",
192
+ "# Perform a sanity test of the application paths.\n",
193
+ "!{mongodump} --version\n",
194
+ "!{mongorestore} --version"
195
+ ]
196
+ },
197
+ {
198
+ "cell_type": "markdown",
199
+ "id": "68245d2b",
200
+ "metadata": {},
201
+ "source": [
202
+ "### Create MongoDB clients\n",
203
+ "\n",
204
+ "Create MongoDB clients you can use to access the \"origin\" MongoDB server (i.e. the one containing the database you want to migrate) and the \"transformer\" MongoDB server (i.e. the one you want to use to perform the data transformations)."
205
+ ]
206
+ },
207
+ {
208
+ "cell_type": "code",
209
+ "execution_count": null,
210
+ "id": "8e95f559",
211
+ "metadata": {},
212
+ "outputs": [],
213
+ "source": [
214
+ "# Mongo client for origin MongoDB server.\n",
215
+ "origin_mongo_client = pymongo.MongoClient(host=cfg.origin_mongo_server_uri, directConnection=True)\n",
216
+ "\n",
217
+ "# Mongo client for transformer MongoDB server.\n",
218
+ "transformer_mongo_client = pymongo.MongoClient(host=cfg.transformer_mongo_server_uri)\n",
219
+ "\n",
220
+ "# Perform sanity tests of those MongoDB clients' abilities to access their respective MongoDB servers.\n",
221
+ "with pymongo.timeout(3):\n",
222
+ " # Display the MongoDB server version (running on the \"origin\" Mongo server).\n",
223
+ " print(\"Origin Mongo server version: \" + origin_mongo_client.server_info()[\"version\"])\n",
224
+ "\n",
225
+ " # Sanity test: Ensure the origin database exists.\n",
226
+ " assert \"nmdc\" in origin_mongo_client.list_database_names(), \"Origin database does not exist.\"\n",
227
+ "\n",
228
+ " # Display the MongoDB server version (running on the \"transformer\" Mongo server).\n",
229
+ " print(\"Transformer Mongo server version: \" + transformer_mongo_client.server_info()[\"version\"])\n",
230
+ "\n",
231
+ " # Sanity test: Ensure the transformation database does not exist.\n",
232
+ " assert \"nmdc\" not in transformer_mongo_client.list_database_names(), \"Transformation database already exists.\""
233
+ ]
234
+ },
235
+ {
236
+ "cell_type": "markdown",
237
+ "id": "3975ac24",
238
+ "metadata": {},
239
+ "source": [
240
+ "### Create JSON Schema validator\n",
241
+ "\n",
242
+ "In this step, you'll create a JSON Schema validator for the NMDC Schema."
243
+ ]
244
+ },
245
+ {
246
+ "cell_type": "code",
247
+ "execution_count": null,
248
+ "id": "9e2dbb92",
249
+ "metadata": {},
250
+ "outputs": [],
251
+ "source": [
252
+ "nmdc_jsonschema: dict = get_nmdc_jsonschema_dict()\n",
253
+ "nmdc_jsonschema_validator = Draft7Validator(nmdc_jsonschema)\n",
254
+ "\n",
255
+ "# Perform sanity tests of the NMDC Schema dictionary and the JSON Schema validator.\n",
256
+ "# Reference: https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/protocols/#jsonschema.protocols.Validator.check_schema\n",
257
+ "print(\"NMDC Schema title: \" + nmdc_jsonschema[\"title\"])\n",
258
+ "print(\"NMDC Schema version: \" + nmdc_jsonschema[\"version\"])\n",
259
+ "\n",
260
+ "nmdc_jsonschema_validator.check_schema(nmdc_jsonschema) # raises exception if schema is invalid"
261
+ ]
262
+ },
263
+ {
264
+ "cell_type": "markdown",
265
+ "id": "fd4994a0",
266
+ "metadata": {},
267
+ "source": [
268
+ "### Dump collections from the \"origin\" MongoDB server\n",
269
+ "\n",
270
+ "In this step, you'll use `mongodump` to dump the collections that will be impacted by this migration; from the \"origin\" MongoDB server.\n",
271
+ "\n",
272
+ "Since `mongodump` doesn't provide a CLI option that you can use to specify the collections you _want_ it to dump (unless you want it to dump only one collection), you can use a different CLI option to tell it all the collection you do _not_ want it to dump. \n",
273
+ "\n",
274
+ "The end result will be the same—there's just an extra step involved. That extra step is to generate an `--excludeCollection=\"{name}\"` CLI option for each collection that you do _not_ want it to dump; and then pass all those CLI options to the `mongodump` command."
275
+ ]
276
+ },
277
+ {
278
+ "cell_type": "code",
279
+ "execution_count": null,
280
+ "id": "cf8fa1ca",
281
+ "metadata": {},
282
+ "outputs": [],
283
+ "source": [
284
+ "# Build a string containing zero or more `--excludeCollection=\"...\"` options, \n",
285
+ "# which can be included in a `mongodump` command.\n",
286
+ "all_collection_names: list[str] = origin_mongo_client[\"nmdc\"].list_collection_names()\n",
287
+ "non_agenda_collection_names = [name for name in all_collection_names if name not in COLLECTION_NAMES]\n",
288
+ "exclusion_options = [f\"--excludeCollection='{name}'\" for name in non_agenda_collection_names]\n",
289
+ "exclusion_options_str = \" \".join(exclusion_options) # separates each option with a space\n",
290
+ "print(exclusion_options_str)\n",
291
+ "\n",
292
+ "# Dump the not-excluded collections from the origin database.\n",
293
+ "!{mongodump} \\\n",
294
+ " --config=\"{cfg.origin_mongo_config_file_path}\" \\\n",
295
+ " --db=\"nmdc\" \\\n",
296
+ " --gzip \\\n",
297
+ " --out=\"{cfg.origin_dump_folder_path}\" \\\n",
298
+ " {exclusion_options_str}"
299
+ ]
300
+ },
301
+ {
302
+ "cell_type": "markdown",
303
+ "id": "c3e3c9c4",
304
+ "metadata": {},
305
+ "source": [
306
+ "### Load the collections into the \"transformer\" MongoDB server\n",
307
+ "\n",
308
+ "In this step, you'll load the collections dumped from the \"origin\" MongoDB server, into the \"transformer\" MongoDB server.\n",
309
+ "\n",
310
+ "Since it's possible that the dump includes more collections than are on the agenda (due to someone creating a collection between the time you generated the exclusion list and the time you ran `mongodump`), you will use one or more of `mongorestore`'s `--nsInclude` CLI options to indicate which collections you want to load.\n",
311
+ "\n",
312
+ "So, we'll first generate the `--nsInclude=\"nmdc.{name}\"` CLI options; then include them in the `mongorestore` command that follows."
313
+ ]
314
+ },
315
+ {
316
+ "cell_type": "code",
317
+ "execution_count": null,
318
+ "id": "418571c5",
319
+ "metadata": {},
320
+ "outputs": [],
321
+ "source": [
322
+ "# Build a string containing zero or more `--nsInclude=\"...\"` options, \n",
323
+ "# which can be included in a `mongorestore` command.\n",
324
+ "inclusion_options = [f\"--nsInclude='nmdc.{name}'\" for name in COLLECTION_NAMES]\n",
325
+ "inclusion_options_str = \" \".join(inclusion_options) # separates each option with a space\n",
326
+ "print(inclusion_options_str)\n",
327
+ "\n",
328
+ "# Restore the dumped collections to the transformer MongoDB server.\n",
329
+ "!{mongorestore} \\\n",
330
+ " --config=\"{cfg.transformer_mongo_config_file_path}\" \\\n",
331
+ " --gzip \\\n",
332
+ " --drop \\\n",
333
+ " --preserveUUID \\\n",
334
+ " --dir=\"{cfg.origin_dump_folder_path}\" \\\n",
335
+ " {inclusion_options_str}"
336
+ ]
337
+ },
338
+ {
339
+ "cell_type": "markdown",
340
+ "id": "4c090068",
341
+ "metadata": {},
342
+ "source": [
343
+ "### Transform the collections within the \"transformer\" MongoDB server\n",
344
+ "\n",
345
+ "Now that the transformer database contains a copy of each collection on the agenda, you can freely transform those copies. **The \"origin\" database is not involved with this step.**\n",
346
+ "\n",
347
+ "The database transformation functions are defined in the `nmdc-schema` Python package installed earlier.\n",
348
+ "\n",
349
+ "> Note: This step also includes validation. Reference: https://github.com/microbiomedata/nmdc-runtime/blob/main/metadata-translation/src/bin/validate_json.py"
350
+ ]
351
+ },
352
+ {
353
+ "cell_type": "code",
354
+ "execution_count": null,
355
+ "id": "05869340",
356
+ "metadata": {},
357
+ "outputs": [],
358
+ "source": [
359
+ "# Instantiate a MongoAdapter bound to the transformer database.\n",
360
+ "adapter = MongoAdapter(database=transformer_mongo_client[\"nmdc\"])\n",
361
+ "\n",
362
+ "# Instantiate a Migrator bound to that adapter.\n",
363
+ "migrator = Migrator(adapter=adapter)\n",
364
+ "\n",
365
+ "# Execute the Migrator's `upgrade` method to perform the migration.\n",
366
+ "migrator.upgrade()"
367
+ ]
368
+ },
369
+ {
370
+ "cell_type": "markdown",
371
+ "id": "3edf77c7",
372
+ "metadata": {},
373
+ "source": [
374
+ "## Validate all documents in all collections involved\n",
375
+ "\n",
376
+ "> TODO: We could delegate this responsibility to the `Migrator` class; or have some `Migrator` methods accept a callback function to run on each document before and after transformation."
377
+ ]
378
+ },
379
+ {
380
+ "cell_type": "code",
381
+ "execution_count": null,
382
+ "id": "db6e432d",
383
+ "metadata": {},
384
+ "outputs": [],
385
+ "source": [
386
+ "for collection_name in COLLECTION_NAMES:\n",
387
+ " collection = transformer_mongo_client[\"nmdc\"][collection_name]\n",
388
+ " for document in collection.find():\n",
389
+ " # Validate the transformed document.\n",
390
+ " #\n",
391
+ " # Reference: https://github.com/microbiomedata/nmdc-schema/blob/main/src/docs/schema-validation.md\n",
392
+ " #\n",
393
+ " # Note: Dictionaries originating as Mongo documents include a Mongo-generated key named `_id`. However,\n",
394
+ " # the NMDC Schema does not describe that key and, indeed, data validators consider dictionaries\n",
395
+ " # containing that key to be invalid with respect to the NMDC Schema. So, here, we validate a\n",
396
+ " # copy (i.e. a shallow copy) of the document that lacks that specific key.\n",
397
+ " #\n",
398
+ " # Note: `root_to_validate` is a dictionary having the shape: { \"some_collection_name\": [ some_document ] }\n",
399
+ " # Reference: https://docs.python.org/3/library/stdtypes.html#dict (see the \"type constructor\" section)\n",
400
+ " #\n",
401
+ " document_without_underscore_id_key = {key: value for key, value in document.items() if key != \"_id\"}\n",
402
+ " root_to_validate = dict([(collection_name, [document_without_underscore_id_key])])\n",
403
+ " nmdc_jsonschema_validator.validate(root_to_validate) # raises exception if invalid"
404
+ ]
405
+ },
406
+ {
407
+ "cell_type": "markdown",
408
+ "id": "1e0c8891",
409
+ "metadata": {},
410
+ "source": [
411
+ "### Dump the collections from the \"transformer\" MongoDB server"
412
+ ]
413
+ },
414
+ {
415
+ "cell_type": "code",
416
+ "execution_count": null,
417
+ "id": "ca49f61a",
418
+ "metadata": {},
419
+ "outputs": [],
420
+ "source": [
421
+ "# Dump the database from the transformer MongoDB server.\n",
422
+ "!{mongodump} \\\n",
423
+ " --config=\"{cfg.transformer_mongo_config_file_path}\" \\\n",
424
+ " --db=\"nmdc\" \\\n",
425
+ " --gzip \\\n",
426
+ " --out=\"{cfg.transformer_dump_folder_path}\" \\\n",
427
+ " {exclusion_options_str}"
428
+ ]
429
+ },
430
+ {
431
+ "cell_type": "markdown",
432
+ "id": "d84bdc11",
433
+ "metadata": {},
434
+ "source": [
435
+ "### Load the collections into the \"origin\" MongoDB server\n",
436
+ "\n",
437
+ "In this step, you'll put the referenced collection(s) into the origin MongoDB server, replacing the original collection(s) that have the same name(s)."
438
+ ]
439
+ },
440
+ {
441
+ "cell_type": "code",
442
+ "execution_count": null,
443
+ "id": "1dfbcf0a",
444
+ "metadata": {},
445
+ "outputs": [],
446
+ "source": [
447
+ "# Replace the same-named collection(s) on the origin server, with the transformed one(s).\n",
448
+ "!{mongorestore} \\\n",
449
+ " --config=\"{cfg.origin_mongo_config_file_path}\" \\\n",
450
+ " --gzip \\\n",
451
+ " --verbose \\\n",
452
+ " --dir=\"{cfg.transformer_dump_folder_path}\" \\\n",
453
+ " --drop \\\n",
454
+ " --preserveUUID \\\n",
455
+ " {inclusion_options_str}"
456
+ ]
457
+ }
458
+ ],
459
+ "metadata": {
460
+ "kernelspec": {
461
+ "display_name": "Python 3",
462
+ "language": "python",
463
+ "name": "python3"
464
+ },
465
+ "language_info": {
466
+ "codemirror_mode": {
467
+ "name": "ipython",
468
+ "version": 3
469
+ },
470
+ "file_extension": ".py",
471
+ "mimetype": "text/x-python",
472
+ "name": "python",
473
+ "nbconvert_exporter": "python",
474
+ "pygments_lexer": "ipython3",
475
+ "version": "3.10.12"
476
+ }
477
+ },
478
+ "nbformat": 4,
479
+ "nbformat_minor": 5
480
+ }
@@ -6,17 +6,25 @@ from fastapi import Depends
6
6
  from fastapi.exceptions import HTTPException
7
7
  from fastapi.openapi.models import OAuthFlows as OAuthFlowsModel
8
8
  from fastapi.param_functions import Form
9
- from fastapi.security import OAuth2, HTTPBasic, HTTPBasicCredentials
9
+ from fastapi.security import (
10
+ OAuth2,
11
+ HTTPBasic,
12
+ HTTPBasicCredentials,
13
+ HTTPBearer,
14
+ HTTPAuthorizationCredentials,
15
+ )
10
16
  from fastapi.security.utils import get_authorization_scheme_param
11
17
  from jose import JWTError, jwt
12
18
  from passlib.context import CryptContext
13
19
  from pydantic import BaseModel
20
+ from starlette import status
14
21
  from starlette.requests import Request
15
22
  from starlette.status import HTTP_400_BAD_REQUEST, HTTP_401_UNAUTHORIZED
16
23
 
17
24
  SECRET_KEY = os.getenv("JWT_SECRET_KEY")
18
25
  ALGORITHM = "HS256"
19
- ORCID_CLIENT_ID = os.getenv("ORCID_CLIENT_ID")
26
+ ORCID_NMDC_CLIENT_ID = os.getenv("ORCID_NMDC_CLIENT_ID")
27
+ ORCID_NMDC_CLIENT_SECRET = os.getenv("ORCID_NMDC_CLIENT_SECRET")
20
28
 
21
29
  # https://orcid.org/.well-known/openid-configuration
22
30
  # XXX do we want to live-load this?
@@ -129,15 +137,24 @@ optional_oauth2_scheme = OAuth2PasswordOrClientCredentialsBearer(
129
137
  tokenUrl="token", auto_error=False
130
138
  )
131
139
 
140
+ bearer_scheme = HTTPBearer(scheme_name="bearerAuth", auto_error=False)
141
+
132
142
 
133
143
  async def basic_credentials(req: Request):
134
144
  return await HTTPBasic(auto_error=False)(req)
135
145
 
136
146
 
147
+ async def bearer_credentials(req: Request):
148
+ return await HTTPBearer(scheme_name="bearerAuth", auto_error=False)(req)
149
+
150
+
137
151
  class OAuth2PasswordOrClientCredentialsRequestForm:
138
152
  def __init__(
139
153
  self,
140
154
  basic_creds: Optional[HTTPBasicCredentials] = Depends(basic_credentials),
155
+ bearer_creds: Optional[HTTPAuthorizationCredentials] = Depends(
156
+ bearer_credentials
157
+ ),
141
158
  grant_type: str = Form(None, regex="^password$|^client_credentials$"),
142
159
  username: Optional[str] = Form(None),
143
160
  password: Optional[str] = Form(None),
@@ -145,14 +162,18 @@ class OAuth2PasswordOrClientCredentialsRequestForm:
145
162
  client_id: Optional[str] = Form(None),
146
163
  client_secret: Optional[str] = Form(None),
147
164
  ):
148
- if grant_type == "password" and (username is None or password is None):
165
+ if bearer_creds:
166
+ self.grant_type = "client_credentials"
167
+ self.username, self.password = None, None
168
+ self.scopes = scope.split()
169
+ self.client_id = bearer_creds.credentials
170
+ self.client_secret = None
171
+ elif grant_type == "password" and (username is None or password is None):
149
172
  raise HTTPException(
150
173
  status_code=HTTP_400_BAD_REQUEST,
151
174
  detail="grant_type password requires username and password",
152
175
  )
153
- if grant_type == "client_credentials" and (
154
- client_id is None or client_secret is None
155
- ):
176
+ elif grant_type == "client_credentials" and (client_id is None):
156
177
  if basic_creds:
157
178
  client_id = basic_creds.username
158
179
  client_secret = basic_creds.password