tol-sdk 1.8.8__tar.gz → 1.8.9__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.
Files changed (374) hide show
  1. {tol_sdk-1.8.8/src/tol_sdk.egg-info → tol_sdk-1.8.9}/PKG-INFO +1 -1
  2. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/pyproject.toml +1 -1
  3. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/ena_datasource.py +8 -3
  4. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/__init__.py +3 -2
  5. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/allowed_keys.py +1 -0
  6. tol_sdk-1.8.9/src/tol/validators/taxon_matches_goat.py +86 -0
  7. {tol_sdk-1.8.8 → tol_sdk-1.8.9/src/tol_sdk.egg-info}/PKG-INFO +1 -1
  8. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol_sdk.egg-info/SOURCES.txt +1 -0
  9. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/LICENSE +0 -0
  10. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/MANIFEST.in +0 -0
  11. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/README.md +0 -0
  12. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/setup.cfg +0 -0
  13. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/certs/cacert.pem +0 -0
  14. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/__init__.py +0 -0
  15. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/actions/__init__.py +0 -0
  16. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/actions/action.py +0 -0
  17. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/actions/upsert_action.py +0 -0
  18. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/__init__.py +0 -0
  19. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/action.py +0 -0
  20. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/__init__.py +0 -0
  21. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/abc/__init__.py +0 -0
  22. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/abc/auth.py +0 -0
  23. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/abc/authorisation.py +0 -0
  24. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/asserts.py +0 -0
  25. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/blueprint.py +0 -0
  26. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/composite.py +0 -0
  27. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/config.py +0 -0
  28. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/auth/error.py +0 -0
  29. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/blueprint.py +0 -0
  30. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/controller.py +0 -0
  31. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/data_upload.py +0 -0
  32. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/__init__.py +0 -0
  33. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/aggregation_body.py +0 -0
  34. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
  35. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/auth_context.py +0 -0
  36. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/authenticate.py +0 -0
  37. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/data_body.py +0 -0
  38. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/filter_utils.py +0 -0
  39. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/list_get_parameters.py +0 -0
  40. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/relation_url.py +0 -0
  41. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/misc/stats_parameters.py +0 -0
  42. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/pipeline_steps.py +0 -0
  43. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_base/system.py +0 -0
  44. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/__init__.py +0 -0
  45. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/api_datasource.py +0 -0
  46. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/client.py +0 -0
  47. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/converter.py +0 -0
  48. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/exception.py +0 -0
  49. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/factory.py +0 -0
  50. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/filter.py +0 -0
  51. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/parser.py +0 -0
  52. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/validate.py +0 -0
  53. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/api_client/view.py +0 -0
  54. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/barcodes/__init__.py +0 -0
  55. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/barcodes/main.py +0 -0
  56. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/__init__.py +0 -0
  57. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/benchling_converter.py +0 -0
  58. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/benchling_datasource.py +0 -0
  59. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/benchling_warehouse_datasource.py +0 -0
  60. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/__init__.py +0 -0
  61. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/extraction_container_extraction_extraction_type_dna.sql +0 -0
  62. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/extraction_extraction_type_dna.sql +0 -0
  63. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +0 -0
  64. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
  65. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
  66. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
  67. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
  68. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
  69. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
  70. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
  71. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
  72. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
  73. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/sample.sql +0 -0
  74. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
  75. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +0 -0
  76. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
  77. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
  78. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/benchling/sql/tissue_prep.sql +0 -0
  79. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/board/__init__.py +0 -0
  80. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/board/blueprint.py +0 -0
  81. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/bold/__init__.py +0 -0
  82. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/bold/bold_datasource.py +0 -0
  83. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/bold/client.py +0 -0
  84. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/bold/converter.py +0 -0
  85. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/bold/factory.py +0 -0
  86. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/bold/parser.py +0 -0
  87. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/cli/__init__.py +0 -0
  88. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/cli/cli.py +0 -0
  89. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/converter/__init__.py +0 -0
  90. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/converter/yaml/__init__.py +0 -0
  91. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/converter/yaml/model.py +0 -0
  92. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/converter/yaml/yaml_converter.py +0 -0
  93. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/copo/__init__.py +0 -0
  94. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/copo/client.py +0 -0
  95. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/copo/converter.py +0 -0
  96. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/copo/copo_datasource.py +0 -0
  97. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/copo/factory.py +0 -0
  98. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/copo/parser.py +0 -0
  99. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/__init__.py +0 -0
  100. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/attribute_metadata.py +0 -0
  101. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/core_converter.py +0 -0
  102. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/data_loader.py +0 -0
  103. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/data_object.py +0 -0
  104. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/data_object_converter.py +0 -0
  105. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/data_source_attribute_metadata.py +0 -0
  106. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/data_source_dict.py +0 -0
  107. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/datasource.py +0 -0
  108. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/datasource_error.py +0 -0
  109. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/datasource_filter.py +0 -0
  110. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/datasource_utils.py +0 -0
  111. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/factory.py +0 -0
  112. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/http_client.py +0 -0
  113. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/__init__.py +0 -0
  114. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/_filterable.py +0 -0
  115. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/_writer.py +0 -0
  116. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/aggregator.py +0 -0
  117. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/counter.py +0 -0
  118. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/cursor.py +0 -0
  119. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/declare.py +0 -0
  120. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/deleter.py +0 -0
  121. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/detail_getter.py +0 -0
  122. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/enricher.py +0 -0
  123. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/enum.py +0 -0
  124. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/group_statter.py +0 -0
  125. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/inserter.py +0 -0
  126. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/list_getter.py +0 -0
  127. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/operator_config.py +0 -0
  128. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/page_getter.py +0 -0
  129. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/relational.py +0 -0
  130. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/statter.py +0 -0
  131. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/summariser.py +0 -0
  132. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/updater.py +0 -0
  133. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/operator/upserter.py +0 -0
  134. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/relationship.py +0 -0
  135. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/requested_fields.py +0 -0
  136. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/session.py +0 -0
  137. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/core/validate.py +0 -0
  138. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/dummy/__init__.py +0 -0
  139. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/dummy/client.py +0 -0
  140. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/dummy/converter.py +0 -0
  141. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/dummy/dummy_datasource.py +0 -0
  142. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/dummy/factory.py +0 -0
  143. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/dummy/parser.py +0 -0
  144. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/elastic/__init__.py +0 -0
  145. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/elastic/elastic_datasource.py +0 -0
  146. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/elastic/runtime_fields.py +0 -0
  147. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/eln/__init__.py +0 -0
  148. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/eln/auth.py +0 -0
  149. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/eln/eln_datasource.py +0 -0
  150. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/eln/entities.py +0 -0
  151. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/eln/generators.py +0 -0
  152. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/eln/sanitise.py +0 -0
  153. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/__init__.py +0 -0
  154. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/client.py +0 -0
  155. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/converter.py +0 -0
  156. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/ena_methods.py +0 -0
  157. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/factory.py +0 -0
  158. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/filter.py +0 -0
  159. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/ena/parser.py +0 -0
  160. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/excel/__init__.py +0 -0
  161. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/excel/excel.py +0 -0
  162. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/excel/excel_datasource.py +0 -0
  163. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/excel/s3_factory.py +0 -0
  164. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/__init__.py +0 -0
  165. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/__init__.py +0 -0
  166. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/auto_detect_manifest_type_converter.py +0 -0
  167. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py +0 -0
  168. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_extraction_container_to_elastic_extraction_container_converter.py +0 -0
  169. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -0
  170. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -0
  171. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
  172. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
  173. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  174. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_tissue_prep_to_elastic_tissue_prep_converter.py +0 -0
  175. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
  176. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/bioscan_extra_pantheon_species_to_elastic_sample_update_converter.py +0 -0
  177. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +0 -0
  178. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/bioscan_qc_specimen_to_elastic_sample_update_converter.py +0 -0
  179. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/bioscan_qc_uksi_entry_to_elastic_sample_update_converter.py +0 -0
  180. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +0 -0
  181. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
  182. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/combine_fields_converter.py +0 -0
  183. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/default_field_value_if_missing_converter.py +0 -0
  184. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
  185. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
  186. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +0 -0
  187. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
  188. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sample_to_elastic_sequencing_request_update_converter.py +0 -0
  189. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
  190. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sequencing_request_to_elastic_run_data_update_converter.py +0 -0
  191. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_sequencing_request_to_sts_sequencing_request_converter.py +0 -0
  192. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
  193. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
  194. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_tolid_to_elastic_genome_note_update_converter.py +0 -0
  195. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +0 -0
  196. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
  197. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
  198. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/genome_notes_genome_note_to_elastic_genome_note_converter.py +0 -0
  199. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
  200. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
  201. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +0 -0
  202. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/incoming_sample_to_incoming_sample_with_lists_converter.py +0 -0
  203. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
  204. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
  205. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
  206. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
  207. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/mlwh_run_data_to_elastic_run_data_converter.py +0 -0
  208. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/mlwh_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  209. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/prefix_field_converter.py +0 -0
  210. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/skip_null_fields_converter.py +0 -0
  211. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +0 -0
  212. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
  213. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
  214. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +0 -0
  215. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
  216. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
  217. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
  218. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/time_string_to_time.py +0 -0
  219. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
  220. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +0 -0
  221. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
  222. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +0 -0
  223. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
  224. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
  225. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/logger.py +0 -0
  226. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/secrets.py +0 -0
  227. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/flows/sequencing_submissions.py +0 -0
  228. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/gap/__init__.py +0 -0
  229. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/gap/gap_datasource.py +0 -0
  230. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/__init__.py +0 -0
  231. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/client.py +0 -0
  232. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/converter.py +0 -0
  233. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/factory.py +0 -0
  234. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/filter.py +0 -0
  235. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/goat_datasource.py +0 -0
  236. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/goat/parser.py +0 -0
  237. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/google_sheets/__init__.py +0 -0
  238. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
  239. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/irods/__init__.py +0 -0
  240. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/irods/irods_datasource.py +0 -0
  241. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/__init__.py +0 -0
  242. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/client.py +0 -0
  243. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/converter.py +0 -0
  244. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/factory.py +0 -0
  245. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/filter.py +0 -0
  246. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/jira_datasource.py +0 -0
  247. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/mapper.py +0 -0
  248. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/parser.py +0 -0
  249. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/jira/sort.py +0 -0
  250. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/json/__init__.py +0 -0
  251. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/json/json_datasource.py +0 -0
  252. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/json/s3_json_datasource.py +0 -0
  253. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/labwhere/__init__.py +0 -0
  254. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/labwhere/client.py +0 -0
  255. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/labwhere/converter.py +0 -0
  256. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/labwhere/factory.py +0 -0
  257. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/labwhere/labwhere_datasource.py +0 -0
  258. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/labwhere/parser.py +0 -0
  259. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/markdown.py +0 -0
  260. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/mlwh/__init__.py +0 -0
  261. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/mlwh/mlwh_datasource.py +0 -0
  262. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/prefect/__init__.py +0 -0
  263. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/prefect/converter.py +0 -0
  264. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/prefect/factory.py +0 -0
  265. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/prefect/filter.py +0 -0
  266. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/prefect/prefect_datasource.py +0 -0
  267. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/prefect/prefect_object.py +0 -0
  268. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/s3/__init__.py +0 -0
  269. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/s3/converter.py +0 -0
  270. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/s3/factory.py +0 -0
  271. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/s3/parser.py +0 -0
  272. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/s3/s3_datasource.py +0 -0
  273. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/__init__.py +0 -0
  274. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/configuration.py +0 -0
  275. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/consumer.py +0 -0
  276. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/message_builder.py +0 -0
  277. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/messages.py +0 -0
  278. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/response_processors.py +0 -0
  279. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sciops/sequencing_datasource.py +0 -0
  280. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/services/__init__.py +0 -0
  281. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/services/s3_client.py +0 -0
  282. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/__init__.py +0 -0
  283. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/benchling.py +0 -0
  284. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/benchling_warehouse.py +0 -0
  285. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/bioscan.py +0 -0
  286. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/bioscan_extra.py +0 -0
  287. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/bioscan_image.py +0 -0
  288. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/bioscan_qc.py +0 -0
  289. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/bold.py +0 -0
  290. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/copo.py +0 -0
  291. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/defaults.py +0 -0
  292. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/dummy.py +0 -0
  293. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/elastic.py +0 -0
  294. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/ena.py +0 -0
  295. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/gap.py +0 -0
  296. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/genome_notes.py +0 -0
  297. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/goat.py +0 -0
  298. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/grit.py +0 -0
  299. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/informatics.py +0 -0
  300. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/labwhere.py +0 -0
  301. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/mlwh.py +0 -0
  302. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/portal.py +0 -0
  303. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/portal_attributes.py +0 -0
  304. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/portaldb.py +0 -0
  305. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/prefect.py +0 -0
  306. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/sciops.py +0 -0
  307. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/sts.py +0 -0
  308. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/sts_legacy.py +0 -0
  309. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/tolid.py +0 -0
  310. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/tolqc.py +0 -0
  311. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/tolqc_legacy.py +0 -0
  312. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/treeofsex.py +0 -0
  313. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/uksi_qc.py.py +0 -0
  314. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sources/workflows.py +0 -0
  315. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/__init__.py +0 -0
  316. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/action/__init__.py +0 -0
  317. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/action/factory.py +0 -0
  318. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/auth/__init__.py +0 -0
  319. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/auth/blueprint.py +0 -0
  320. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/auth/models.py +0 -0
  321. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/cast.py +0 -0
  322. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/database.py +0 -0
  323. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/ds_session.py +0 -0
  324. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/exception.py +0 -0
  325. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/ext.py +0 -0
  326. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/factory.py +0 -0
  327. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/filter.py +0 -0
  328. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/model.py +0 -0
  329. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/pipeline_step/__init__.py +0 -0
  330. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/pipeline_step/factory.py +0 -0
  331. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/relationship.py +0 -0
  332. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/session.py +0 -0
  333. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/sort.py +0 -0
  334. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/sql_converter.py +0 -0
  335. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/sql_datasource.py +0 -0
  336. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/standard/__init__.py +0 -0
  337. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sql/standard/factory.py +0 -0
  338. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/status/__init__.py +0 -0
  339. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/status/status_datasource.py +0 -0
  340. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sts/__init__.py +0 -0
  341. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sts/sts.py +0 -0
  342. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sts/sts_datasource.py +0 -0
  343. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/sts/sts_requests.py +0 -0
  344. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/treeval/__init__.py +0 -0
  345. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/treeval/treeval_datasource.py +0 -0
  346. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/utils/__init__.py +0 -0
  347. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/utils/csv.py +0 -0
  348. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/utils/s3.py +0 -0
  349. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/allowed_values.py +0 -0
  350. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/allowed_values_from_datasource.py +0 -0
  351. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/assert_on_condition.py +0 -0
  352. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/branching.py +0 -0
  353. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/converter_and_validate.py +0 -0
  354. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/date_sorting.py +0 -0
  355. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/ena_checklist.py +0 -0
  356. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/ena_submittable.py +0 -0
  357. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/interfaces/__init__.py +0 -0
  358. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/interfaces/condition_evaluator.py +0 -0
  359. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/min_one_valid_value.py +0 -0
  360. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/mutually_exclusive.py +0 -0
  361. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/regex.py +0 -0
  362. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/regex_by_value.py +0 -0
  363. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/specimens_have_same_taxon.py +0 -0
  364. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/sts_fields.py +0 -0
  365. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/tolid.py +0 -0
  366. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/types.py +0 -0
  367. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/unique_value_check.py +0 -0
  368. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/unique_values.py +0 -0
  369. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/unique_whole_organisms.py +0 -0
  370. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol/validators/value_check.py +0 -0
  371. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
  372. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol_sdk.egg-info/entry_points.txt +0 -0
  373. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol_sdk.egg-info/requires.txt +0 -0
  374. {tol_sdk-1.8.8 → tol_sdk-1.8.9}/src/tol_sdk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tol-sdk
3
- Version: 1.8.8
3
+ Version: 1.8.9
4
4
  Summary: SDK for interaction with ToL, Sanger and external services
5
5
  Author-email: ToL Platforms Team <tol-platforms@sanger.ac.uk>
6
6
  License: MIT
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
8
8
 
9
9
  [project]
10
10
  name = "tol-sdk"
11
- version = "1.8.8"
11
+ version = "1.8.9"
12
12
  description = "SDK for interaction with ToL, Sanger and external services"
13
13
  readme = "README.md"
14
14
  authors = [
@@ -11,6 +11,7 @@ from cachetools.func import ttl_cache
11
11
 
12
12
  import requests
13
13
  from requests.auth import HTTPBasicAuth
14
+ from requests.exceptions import HTTPError
14
15
 
15
16
 
16
17
  from .client import EnaApiClient
@@ -118,9 +119,13 @@ class EnaDataSource(
118
119
  if object_type == 'submittable_taxon':
119
120
  ena_response = []
120
121
  for object_id in object_ids:
121
- response = client.get_detail(object_type, [object_id])
122
- if response and isinstance(response, list):
123
- ena_response.extend(response)
122
+ try:
123
+ response = client.get_detail(object_type, [object_id])
124
+ if response and isinstance(response, list):
125
+ ena_response.extend(response)
126
+ except HTTPError as http_error:
127
+ if http_error.response.status_code != 400:
128
+ raise
124
129
  else:
125
130
  ena_response = client.get_detail(object_type, object_ids)
126
131
  # For a checklist we need to convert into a list of dicts
@@ -19,8 +19,9 @@ from .types import TypesValidator # noqa
19
19
  from .unique_values import UniqueValuesValidator # noqa
20
20
  from .unique_whole_organisms import UniqueWholeOrganismsValidator # noqa
21
21
  from .interfaces import Condition # noqa
22
- from .min_one_valid_value import MinOneValidValueValidator # noqa
22
+ from .min_one_valid_value import MinOneValidValueValidator # noqa
23
23
  from .value_check import ValueCheckValidator # noqa
24
24
  from .branching import BranchingValidator # noqa
25
25
  from .unique_value_check import UniqueValueCheckValidator # noqa
26
- from .date_sorting import DateSortingValidator # noqa
26
+ from .date_sorting import DateSortingValidator # noqa
27
+ from .taxon_matches_goat import TaxonMatchesGoatValidator # noqa
@@ -30,6 +30,7 @@ class AllowedKeysValidator(Validator):
30
30
  **kwargs
31
31
  ) -> None:
32
32
 
33
+ del kwargs
33
34
  super().__init__()
34
35
  self.__config = config
35
36
 
@@ -0,0 +1,86 @@
1
+ # SPDX-FileCopyrightText: 2026 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ from dataclasses import dataclass
6
+
7
+ from tol.core import DataObject, Validator
8
+ from tol.sources.goat import GoatDataSource, goat
9
+
10
+
11
+ class TaxonMatchesGoatValidator(Validator):
12
+ """
13
+ Validates a stream of `DataObject` instances, checking whether its Taxonomy information
14
+ matches that in GoaT
15
+ """
16
+ @dataclass(slots=True, frozen=True, kw_only=True)
17
+ class Config:
18
+ species_field: str | None = None
19
+ genus_field: str | None = None
20
+ family_field: str | None = None
21
+ superfamily_field: str | None = None
22
+ phylum_field: str | None = None
23
+ kingdom_field: str | None = None
24
+ superkingdom_field: str | None = None
25
+ domain_field: str | None = None
26
+
27
+ __slots__ = ['__config', '__goat_datasource', '_cached_taxa']
28
+ __config: Config
29
+ __goat_datasource: GoatDataSource
30
+ _cached_taxa: dict[str, DataObject]
31
+
32
+ def __init__(self, config: Config) -> None:
33
+ super().__init__()
34
+ self.__config = config
35
+ self.__goat_datasource = goat()
36
+ self._cached_taxa = {}
37
+
38
+ def _validate_data_object(self, obj: DataObject) -> None:
39
+ taxon_id = obj.get_field_by_name('TAXON_ID')
40
+
41
+ # Check whether we already have the information for this id in the cache.
42
+ # If we don't, fetch it from GoaT and add it to the cache
43
+ taxon: DataObject | None
44
+ if taxon_id in self._cached_taxa:
45
+ taxon = self._cached_taxa[taxon_id]
46
+ else:
47
+ taxon = self.__goat_datasource.get_one('taxon', taxon_id)
48
+
49
+ # Add this taxon to cached taxa.
50
+ # Error if GoaT has no taxon with this id
51
+ if taxon is not None:
52
+ self._cached_taxa[taxon_id] = taxon
53
+ else:
54
+ self.add_error(
55
+ object_id=obj.id,
56
+ detail=f'Invalid Taxon ID: {taxon_id}',
57
+ field='taxon_id'
58
+ )
59
+
60
+ # We can't validate a taxon that doesn't exist, so after this error move on
61
+ # to the next DataObject
62
+ return
63
+
64
+ # Check that each associated taxonomy rank for this taxon matches those in GoaT
65
+ taxonomic_ranks = ('species', 'genus', 'family', 'superfamily',
66
+ 'phylum', 'kingdom', 'superkingdom', 'domain')
67
+ for rank in taxonomic_ranks:
68
+ # From the rank to check, get the name of its field in the data object we're validating
69
+ # from the validator config. If this field name is `None`, then this taxonomic rank
70
+ # isn't being checked (likely because the data object does not have this field)
71
+ field_name: str | None = getattr(self.__config, f'{rank}_field')
72
+ if field_name is None:
73
+ continue
74
+
75
+ # Fetch the values of these taxonomic ranks
76
+ value_in_data_object = obj.get_field_by_name(field_name)
77
+ value_in_goat = taxon.get_field_by_name(f'{rank}.scientific_name')
78
+
79
+ # Ensure the value in the data object matches the one in GoaT
80
+ if value_in_data_object != value_in_goat:
81
+ self.add_warning(
82
+ object_id=obj.id,
83
+ detail=(f'Value for {field_name} ({value_in_data_object}) '
84
+ f'does not match the value in GoaT ({value_in_goat})'),
85
+ field=field_name,
86
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tol-sdk
3
- Version: 1.8.8
3
+ Version: 1.8.9
4
4
  Summary: SDK for interaction with ToL, Sanger and external services
5
5
  Author-email: ToL Platforms Team <tol-platforms@sanger.ac.uk>
6
6
  License: MIT
@@ -356,6 +356,7 @@ src/tol/validators/regex.py
356
356
  src/tol/validators/regex_by_value.py
357
357
  src/tol/validators/specimens_have_same_taxon.py
358
358
  src/tol/validators/sts_fields.py
359
+ src/tol/validators/taxon_matches_goat.py
359
360
  src/tol/validators/tolid.py
360
361
  src/tol/validators/types.py
361
362
  src/tol/validators/unique_value_check.py
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes