tol-sdk 1.8.8__tar.gz → 1.8.10__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 (375) hide show
  1. {tol_sdk-1.8.8/src/tol_sdk.egg-info → tol_sdk-1.8.10}/PKG-INFO +1 -1
  2. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/pyproject.toml +1 -1
  3. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/datasource_utils.py +8 -5
  4. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/ena_datasource.py +8 -3
  5. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/portaldb.py +4 -2
  6. tol_sdk-1.8.10/src/tol/sources/sql.py +25 -0
  7. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/sql_datasource.py +1 -0
  8. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/__init__.py +3 -2
  9. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/allowed_keys.py +1 -0
  10. tol_sdk-1.8.10/src/tol/validators/taxon_matches_goat.py +86 -0
  11. {tol_sdk-1.8.8 → tol_sdk-1.8.10/src/tol_sdk.egg-info}/PKG-INFO +1 -1
  12. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol_sdk.egg-info/SOURCES.txt +2 -0
  13. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/LICENSE +0 -0
  14. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/MANIFEST.in +0 -0
  15. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/README.md +0 -0
  16. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/setup.cfg +0 -0
  17. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/certs/cacert.pem +0 -0
  18. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/__init__.py +0 -0
  19. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/actions/__init__.py +0 -0
  20. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/actions/action.py +0 -0
  21. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/actions/upsert_action.py +0 -0
  22. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/__init__.py +0 -0
  23. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/action.py +0 -0
  24. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/__init__.py +0 -0
  25. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/abc/__init__.py +0 -0
  26. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/abc/auth.py +0 -0
  27. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/abc/authorisation.py +0 -0
  28. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/asserts.py +0 -0
  29. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/blueprint.py +0 -0
  30. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/composite.py +0 -0
  31. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/config.py +0 -0
  32. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/auth/error.py +0 -0
  33. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/blueprint.py +0 -0
  34. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/controller.py +0 -0
  35. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/data_upload.py +0 -0
  36. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/__init__.py +0 -0
  37. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/aggregation_body.py +0 -0
  38. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
  39. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/auth_context.py +0 -0
  40. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/authenticate.py +0 -0
  41. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/data_body.py +0 -0
  42. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/filter_utils.py +0 -0
  43. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/list_get_parameters.py +0 -0
  44. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/relation_url.py +0 -0
  45. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/misc/stats_parameters.py +0 -0
  46. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/pipeline_steps.py +0 -0
  47. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_base/system.py +0 -0
  48. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/__init__.py +0 -0
  49. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/api_datasource.py +0 -0
  50. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/client.py +0 -0
  51. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/converter.py +0 -0
  52. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/exception.py +0 -0
  53. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/factory.py +0 -0
  54. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/filter.py +0 -0
  55. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/parser.py +0 -0
  56. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/validate.py +0 -0
  57. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/api_client/view.py +0 -0
  58. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/barcodes/__init__.py +0 -0
  59. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/barcodes/main.py +0 -0
  60. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/__init__.py +0 -0
  61. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/benchling_converter.py +0 -0
  62. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/benchling_datasource.py +0 -0
  63. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/benchling_warehouse_datasource.py +0 -0
  64. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/__init__.py +0 -0
  65. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/extraction_container_extraction_extraction_type_dna.sql +0 -0
  66. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/extraction_extraction_type_dna.sql +0 -0
  67. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +0 -0
  68. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
  69. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
  70. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
  71. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
  72. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
  73. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
  74. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
  75. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
  76. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
  77. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/sample.sql +0 -0
  78. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
  79. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +0 -0
  80. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
  81. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
  82. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/benchling/sql/tissue_prep.sql +0 -0
  83. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/board/__init__.py +0 -0
  84. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/board/blueprint.py +0 -0
  85. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/bold/__init__.py +0 -0
  86. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/bold/bold_datasource.py +0 -0
  87. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/bold/client.py +0 -0
  88. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/bold/converter.py +0 -0
  89. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/bold/factory.py +0 -0
  90. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/bold/parser.py +0 -0
  91. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/cli/__init__.py +0 -0
  92. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/cli/cli.py +0 -0
  93. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/converter/__init__.py +0 -0
  94. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/converter/yaml/__init__.py +0 -0
  95. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/converter/yaml/model.py +0 -0
  96. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/converter/yaml/yaml_converter.py +0 -0
  97. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/copo/__init__.py +0 -0
  98. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/copo/client.py +0 -0
  99. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/copo/converter.py +0 -0
  100. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/copo/copo_datasource.py +0 -0
  101. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/copo/factory.py +0 -0
  102. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/copo/parser.py +0 -0
  103. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/__init__.py +0 -0
  104. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/attribute_metadata.py +0 -0
  105. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/core_converter.py +0 -0
  106. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/data_loader.py +0 -0
  107. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/data_object.py +0 -0
  108. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/data_object_converter.py +0 -0
  109. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/data_source_attribute_metadata.py +0 -0
  110. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/data_source_dict.py +0 -0
  111. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/datasource.py +0 -0
  112. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/datasource_error.py +0 -0
  113. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/datasource_filter.py +0 -0
  114. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/factory.py +0 -0
  115. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/http_client.py +0 -0
  116. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/__init__.py +0 -0
  117. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/_filterable.py +0 -0
  118. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/_writer.py +0 -0
  119. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/aggregator.py +0 -0
  120. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/counter.py +0 -0
  121. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/cursor.py +0 -0
  122. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/declare.py +0 -0
  123. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/deleter.py +0 -0
  124. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/detail_getter.py +0 -0
  125. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/enricher.py +0 -0
  126. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/enum.py +0 -0
  127. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/group_statter.py +0 -0
  128. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/inserter.py +0 -0
  129. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/list_getter.py +0 -0
  130. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/operator_config.py +0 -0
  131. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/page_getter.py +0 -0
  132. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/relational.py +0 -0
  133. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/statter.py +0 -0
  134. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/summariser.py +0 -0
  135. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/updater.py +0 -0
  136. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/operator/upserter.py +0 -0
  137. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/relationship.py +0 -0
  138. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/requested_fields.py +0 -0
  139. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/session.py +0 -0
  140. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/core/validate.py +0 -0
  141. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/dummy/__init__.py +0 -0
  142. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/dummy/client.py +0 -0
  143. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/dummy/converter.py +0 -0
  144. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/dummy/dummy_datasource.py +0 -0
  145. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/dummy/factory.py +0 -0
  146. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/dummy/parser.py +0 -0
  147. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/elastic/__init__.py +0 -0
  148. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/elastic/elastic_datasource.py +0 -0
  149. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/elastic/runtime_fields.py +0 -0
  150. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/eln/__init__.py +0 -0
  151. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/eln/auth.py +0 -0
  152. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/eln/eln_datasource.py +0 -0
  153. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/eln/entities.py +0 -0
  154. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/eln/generators.py +0 -0
  155. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/eln/sanitise.py +0 -0
  156. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/__init__.py +0 -0
  157. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/client.py +0 -0
  158. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/converter.py +0 -0
  159. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/ena_methods.py +0 -0
  160. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/factory.py +0 -0
  161. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/filter.py +0 -0
  162. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/ena/parser.py +0 -0
  163. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/excel/__init__.py +0 -0
  164. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/excel/excel.py +0 -0
  165. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/excel/excel_datasource.py +0 -0
  166. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/excel/s3_factory.py +0 -0
  167. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/__init__.py +0 -0
  168. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/__init__.py +0 -0
  169. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/auto_detect_manifest_type_converter.py +0 -0
  170. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py +0 -0
  171. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_extraction_container_to_elastic_extraction_container_converter.py +0 -0
  172. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -0
  173. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -0
  174. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
  175. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
  176. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  177. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_tissue_prep_to_elastic_tissue_prep_converter.py +0 -0
  178. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
  179. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/bioscan_extra_pantheon_species_to_elastic_sample_update_converter.py +0 -0
  180. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +0 -0
  181. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/bioscan_qc_specimen_to_elastic_sample_update_converter.py +0 -0
  182. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/bioscan_qc_uksi_entry_to_elastic_sample_update_converter.py +0 -0
  183. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +0 -0
  184. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
  185. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/combine_fields_converter.py +0 -0
  186. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/default_field_value_if_missing_converter.py +0 -0
  187. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
  188. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
  189. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +0 -0
  190. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
  191. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sample_to_elastic_sequencing_request_update_converter.py +0 -0
  192. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
  193. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sequencing_request_to_elastic_run_data_update_converter.py +0 -0
  194. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_sequencing_request_to_sts_sequencing_request_converter.py +0 -0
  195. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
  196. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
  197. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_tolid_to_elastic_genome_note_update_converter.py +0 -0
  198. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +0 -0
  199. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
  200. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
  201. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/genome_notes_genome_note_to_elastic_genome_note_converter.py +0 -0
  202. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
  203. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
  204. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +0 -0
  205. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/incoming_sample_to_incoming_sample_with_lists_converter.py +0 -0
  206. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
  207. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
  208. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
  209. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
  210. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/mlwh_run_data_to_elastic_run_data_converter.py +0 -0
  211. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/mlwh_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  212. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/prefix_field_converter.py +0 -0
  213. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/skip_null_fields_converter.py +0 -0
  214. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +0 -0
  215. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
  216. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
  217. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +0 -0
  218. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
  219. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
  220. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
  221. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/time_string_to_time.py +0 -0
  222. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
  223. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +0 -0
  224. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
  225. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +0 -0
  226. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
  227. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
  228. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/logger.py +0 -0
  229. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/secrets.py +0 -0
  230. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/flows/sequencing_submissions.py +0 -0
  231. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/gap/__init__.py +0 -0
  232. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/gap/gap_datasource.py +0 -0
  233. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/__init__.py +0 -0
  234. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/client.py +0 -0
  235. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/converter.py +0 -0
  236. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/factory.py +0 -0
  237. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/filter.py +0 -0
  238. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/goat_datasource.py +0 -0
  239. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/goat/parser.py +0 -0
  240. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/google_sheets/__init__.py +0 -0
  241. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
  242. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/irods/__init__.py +0 -0
  243. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/irods/irods_datasource.py +0 -0
  244. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/__init__.py +0 -0
  245. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/client.py +0 -0
  246. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/converter.py +0 -0
  247. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/factory.py +0 -0
  248. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/filter.py +0 -0
  249. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/jira_datasource.py +0 -0
  250. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/mapper.py +0 -0
  251. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/parser.py +0 -0
  252. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/jira/sort.py +0 -0
  253. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/json/__init__.py +0 -0
  254. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/json/json_datasource.py +0 -0
  255. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/json/s3_json_datasource.py +0 -0
  256. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/labwhere/__init__.py +0 -0
  257. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/labwhere/client.py +0 -0
  258. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/labwhere/converter.py +0 -0
  259. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/labwhere/factory.py +0 -0
  260. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/labwhere/labwhere_datasource.py +0 -0
  261. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/labwhere/parser.py +0 -0
  262. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/markdown.py +0 -0
  263. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/mlwh/__init__.py +0 -0
  264. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/mlwh/mlwh_datasource.py +0 -0
  265. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/prefect/__init__.py +0 -0
  266. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/prefect/converter.py +0 -0
  267. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/prefect/factory.py +0 -0
  268. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/prefect/filter.py +0 -0
  269. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/prefect/prefect_datasource.py +0 -0
  270. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/prefect/prefect_object.py +0 -0
  271. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/s3/__init__.py +0 -0
  272. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/s3/converter.py +0 -0
  273. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/s3/factory.py +0 -0
  274. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/s3/parser.py +0 -0
  275. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/s3/s3_datasource.py +0 -0
  276. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/__init__.py +0 -0
  277. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/configuration.py +0 -0
  278. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/consumer.py +0 -0
  279. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/message_builder.py +0 -0
  280. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/messages.py +0 -0
  281. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/response_processors.py +0 -0
  282. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sciops/sequencing_datasource.py +0 -0
  283. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/services/__init__.py +0 -0
  284. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/services/s3_client.py +0 -0
  285. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/__init__.py +0 -0
  286. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/benchling.py +0 -0
  287. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/benchling_warehouse.py +0 -0
  288. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/bioscan.py +0 -0
  289. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/bioscan_extra.py +0 -0
  290. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/bioscan_image.py +0 -0
  291. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/bioscan_qc.py +0 -0
  292. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/bold.py +0 -0
  293. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/copo.py +0 -0
  294. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/defaults.py +0 -0
  295. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/dummy.py +0 -0
  296. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/elastic.py +0 -0
  297. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/ena.py +0 -0
  298. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/gap.py +0 -0
  299. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/genome_notes.py +0 -0
  300. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/goat.py +0 -0
  301. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/grit.py +0 -0
  302. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/informatics.py +0 -0
  303. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/labwhere.py +0 -0
  304. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/mlwh.py +0 -0
  305. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/portal.py +0 -0
  306. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/portal_attributes.py +0 -0
  307. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/prefect.py +0 -0
  308. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/sciops.py +0 -0
  309. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/sts.py +0 -0
  310. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/sts_legacy.py +0 -0
  311. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/tolid.py +0 -0
  312. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/tolqc.py +0 -0
  313. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/tolqc_legacy.py +0 -0
  314. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/treeofsex.py +0 -0
  315. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/uksi_qc.py.py +0 -0
  316. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sources/workflows.py +0 -0
  317. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/__init__.py +0 -0
  318. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/action/__init__.py +0 -0
  319. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/action/factory.py +0 -0
  320. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/auth/__init__.py +0 -0
  321. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/auth/blueprint.py +0 -0
  322. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/auth/models.py +0 -0
  323. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/cast.py +0 -0
  324. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/database.py +0 -0
  325. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/ds_session.py +0 -0
  326. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/exception.py +0 -0
  327. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/ext.py +0 -0
  328. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/factory.py +0 -0
  329. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/filter.py +0 -0
  330. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/model.py +0 -0
  331. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/pipeline_step/__init__.py +0 -0
  332. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/pipeline_step/factory.py +0 -0
  333. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/relationship.py +0 -0
  334. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/session.py +0 -0
  335. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/sort.py +0 -0
  336. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/sql_converter.py +0 -0
  337. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/standard/__init__.py +0 -0
  338. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sql/standard/factory.py +0 -0
  339. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/status/__init__.py +0 -0
  340. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/status/status_datasource.py +0 -0
  341. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sts/__init__.py +0 -0
  342. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sts/sts.py +0 -0
  343. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sts/sts_datasource.py +0 -0
  344. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/sts/sts_requests.py +0 -0
  345. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/treeval/__init__.py +0 -0
  346. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/treeval/treeval_datasource.py +0 -0
  347. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/utils/__init__.py +0 -0
  348. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/utils/csv.py +0 -0
  349. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/utils/s3.py +0 -0
  350. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/allowed_values.py +0 -0
  351. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/allowed_values_from_datasource.py +0 -0
  352. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/assert_on_condition.py +0 -0
  353. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/branching.py +0 -0
  354. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/converter_and_validate.py +0 -0
  355. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/date_sorting.py +0 -0
  356. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/ena_checklist.py +0 -0
  357. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/ena_submittable.py +0 -0
  358. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/interfaces/__init__.py +0 -0
  359. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/interfaces/condition_evaluator.py +0 -0
  360. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/min_one_valid_value.py +0 -0
  361. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/mutually_exclusive.py +0 -0
  362. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/regex.py +0 -0
  363. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/regex_by_value.py +0 -0
  364. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/specimens_have_same_taxon.py +0 -0
  365. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/sts_fields.py +0 -0
  366. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/tolid.py +0 -0
  367. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/types.py +0 -0
  368. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/unique_value_check.py +0 -0
  369. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/unique_values.py +0 -0
  370. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/unique_whole_organisms.py +0 -0
  371. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol/validators/value_check.py +0 -0
  372. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
  373. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol_sdk.egg-info/entry_points.txt +0 -0
  374. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/src/tol_sdk.egg-info/requires.txt +0 -0
  375. {tol_sdk-1.8.8 → tol_sdk-1.8.10}/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.10
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.10"
12
12
  description = "SDK for interaction with ToL, Sanger and external services"
13
13
  readme = "README.md"
14
14
  authors = [
@@ -30,10 +30,13 @@ class DataSourceUtils:
30
30
  @classmethod
31
31
  def get_datasource_by_datasource_instance(
32
32
  cls,
33
- datasource_instance: DataObject
33
+ datasource_instance: DataObject,
34
+ **kwargs
34
35
  ) -> DataSource:
35
36
  datasource_config = datasource_instance.data_source_config
36
- kwargs = dict(datasource_instance.kwargs) if datasource_instance.kwargs else {}
37
+ new_kwargs = dict(datasource_instance.kwargs) if datasource_instance.kwargs else {}
38
+ if kwargs:
39
+ new_kwargs.update(kwargs)
37
40
  if datasource_config:
38
41
  relationship_config = cls.get_relationship_config_from_data_source_config(
39
42
  datasource_config
@@ -44,14 +47,14 @@ class DataSourceUtils:
44
47
  runtime_fields = cls.get_runtime_fields_from_data_source_config(
45
48
  datasource_config
46
49
  )
47
- kwargs.update({
50
+ new_kwargs.update({
48
51
  'relationship_cfg': relationship_config,
49
52
  'attribute_metadata': amd,
50
53
  'runtime_fields': runtime_fields
51
54
  })
52
55
  return DataSourceUtils.get_datasource_by_name(
53
56
  datasource_instance.builtin_name,
54
- **kwargs
57
+ **new_kwargs
55
58
  )
56
59
 
57
60
  @classmethod
@@ -83,7 +86,6 @@ class DataSourceUtils:
83
86
  cls,
84
87
  datasource_config: DataObject
85
88
  ) -> dict:
86
- from ..elastic.runtime_fields import RuntimeFields # Break circular import cycle
87
89
  runtime_fields = {}
88
90
  f = DataSourceFilter()
89
91
  f.and_ = {
@@ -95,6 +97,7 @@ class DataSourceUtils:
95
97
  if dsa.object_type not in runtime_fields:
96
98
  runtime_fields[dsa.object_type] = {}
97
99
  if 'function' in dsa.runtime_definition:
100
+ from ..elastic.runtime_fields import RuntimeFields # Break circular import cycle
98
101
  method = getattr(RuntimeFields, dsa.runtime_definition['function'])
99
102
  runtime_fields[dsa.object_type][dsa.name] = \
100
103
  method(**dsa.runtime_definition.get('function_kwargs', {}))
@@ -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
@@ -4,6 +4,7 @@
4
4
 
5
5
  import os
6
6
 
7
+ from .defaults import Defaults
7
8
  from ..api_client import (
8
9
  ApiDataSource,
9
10
  create_api_datasource
@@ -15,9 +16,10 @@ from ..core import (
15
16
 
16
17
  def portaldb(retries: int = 5, **kwargs) -> ApiDataSource:
17
18
  portaldb = create_api_datasource(
18
- api_url=os.getenv('PORTAL_URL') + os.getenv('PORTAL_API_PATH') + '/local',
19
+ api_url=os.getenv('PORTAL_URL', Defaults.PORTAL_URL)
20
+ + os.getenv('PORTAL_API_PATH', Defaults.PORTAL_API_PATH),
19
21
  token=os.getenv('PORTAL_API_KEY'),
20
- data_prefix='',
22
+ data_prefix='/local',
21
23
  retries=retries
22
24
  )
23
25
  core_data_object(portaldb)
@@ -0,0 +1,25 @@
1
+ # SPDX-FileCopyrightText: 2023 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ from ..core import (
6
+ core_data_object
7
+ )
8
+ from ..sql import (
9
+ SqlDataSource,
10
+ create_sql_datasource
11
+ )
12
+
13
+
14
+ # Create a SQL datasource. This is also expecting the models to be passed in
15
+ # so would most likely be used within an app
16
+ def sql(models, db_uri, behind_api, database_factory, **kwargs) -> SqlDataSource:
17
+ sql_ds = create_sql_datasource(
18
+ models=models,
19
+ db_uri=db_uri,
20
+ behind_api=True,
21
+ database_factory=database_factory,
22
+ **kwargs
23
+ )
24
+ core_data_object(sql_ds)
25
+ return sql_ds
@@ -86,6 +86,7 @@ class SqlDataSource(
86
86
  sorter_factory: SorterFactory,
87
87
  user_id_getter: Optional[UserIdGetter] = None,
88
88
  attribute_metadata: AttributeMetadata = DefaultAttributeMetadata,
89
+ **kwargs
89
90
  ) -> None:
90
91
  self.__db = db
91
92
  self.__type_tablename_map = type_tablename_map
@@ -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, **kwargs) -> 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.10
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
@@ -298,6 +298,7 @@ src/tol/sources/portal_attributes.py
298
298
  src/tol/sources/portaldb.py
299
299
  src/tol/sources/prefect.py
300
300
  src/tol/sources/sciops.py
301
+ src/tol/sources/sql.py
301
302
  src/tol/sources/sts.py
302
303
  src/tol/sources/sts_legacy.py
303
304
  src/tol/sources/tolid.py
@@ -356,6 +357,7 @@ src/tol/validators/regex.py
356
357
  src/tol/validators/regex_by_value.py
357
358
  src/tol/validators/specimens_have_same_taxon.py
358
359
  src/tol/validators/sts_fields.py
360
+ src/tol/validators/taxon_matches_goat.py
359
361
  src/tol/validators/tolid.py
360
362
  src/tol/validators/types.py
361
363
  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