tol-sdk 1.8.1__tar.gz → 1.8.4__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 (361) hide show
  1. {tol_sdk-1.8.1/src/tol_sdk.egg-info → tol_sdk-1.8.4}/PKG-INFO +1 -1
  2. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/pyproject.toml +1 -1
  3. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/client.py +2 -2
  4. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/http_client.py +2 -2
  5. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/__init__.py +1 -0
  6. tol_sdk-1.8.4/src/tol/flows/converters/auto_detect_manifest_type_converter.py +46 -0
  7. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/auth/blueprint.py +7 -1
  8. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/pipeline_step/factory.py +20 -5
  9. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/__init__.py +4 -0
  10. tol_sdk-1.8.4/src/tol/validators/branching.py +160 -0
  11. tol_sdk-1.8.4/src/tol/validators/date_sorting.py +58 -0
  12. tol_sdk-1.8.4/src/tol/validators/unique_value_check.py +41 -0
  13. tol_sdk-1.8.4/src/tol/validators/value_check.py +36 -0
  14. {tol_sdk-1.8.1 → tol_sdk-1.8.4/src/tol_sdk.egg-info}/PKG-INFO +1 -1
  15. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol_sdk.egg-info/SOURCES.txt +5 -0
  16. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/LICENSE +0 -0
  17. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/MANIFEST.in +0 -0
  18. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/README.md +0 -0
  19. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/setup.cfg +0 -0
  20. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/certs/cacert.pem +0 -0
  21. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/__init__.py +0 -0
  22. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/actions/__init__.py +0 -0
  23. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/actions/action.py +0 -0
  24. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/actions/upsert_action.py +0 -0
  25. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/__init__.py +0 -0
  26. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/action.py +0 -0
  27. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/__init__.py +0 -0
  28. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/abc/__init__.py +0 -0
  29. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/abc/auth.py +0 -0
  30. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/abc/authorisation.py +0 -0
  31. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/asserts.py +0 -0
  32. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/blueprint.py +0 -0
  33. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/composite.py +0 -0
  34. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/config.py +0 -0
  35. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/auth/error.py +0 -0
  36. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/blueprint.py +0 -0
  37. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/controller.py +0 -0
  38. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/data_upload.py +0 -0
  39. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/__init__.py +0 -0
  40. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/aggregation_body.py +0 -0
  41. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
  42. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/auth_context.py +0 -0
  43. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/authenticate.py +0 -0
  44. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/data_body.py +0 -0
  45. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/filter_utils.py +0 -0
  46. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/list_get_parameters.py +0 -0
  47. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/relation_url.py +0 -0
  48. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/misc/stats_parameters.py +0 -0
  49. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/pipeline_steps.py +0 -0
  50. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_base/system.py +0 -0
  51. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/__init__.py +0 -0
  52. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/api_datasource.py +0 -0
  53. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/converter.py +0 -0
  54. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/exception.py +0 -0
  55. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/factory.py +0 -0
  56. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/filter.py +0 -0
  57. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/parser.py +0 -0
  58. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/validate.py +0 -0
  59. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/api_client/view.py +0 -0
  60. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/barcodes/__init__.py +0 -0
  61. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/barcodes/main.py +0 -0
  62. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/__init__.py +0 -0
  63. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/benchling_converter.py +0 -0
  64. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/benchling_datasource.py +0 -0
  65. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/benchling_warehouse_datasource.py +0 -0
  66. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/__init__.py +0 -0
  67. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/extraction_containers_dna.sql +0 -0
  68. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/extraction_extraction_type_dna.sql +0 -0
  69. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +0 -0
  70. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
  71. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
  72. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
  73. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
  74. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
  75. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
  76. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
  77. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
  78. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
  79. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/sample.sql +0 -0
  80. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
  81. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +0 -0
  82. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
  83. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
  84. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/benchling/sql/tissue_prep.sql +0 -0
  85. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/board/__init__.py +0 -0
  86. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/board/blueprint.py +0 -0
  87. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/bold/__init__.py +0 -0
  88. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/bold/bold_datasource.py +0 -0
  89. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/bold/client.py +0 -0
  90. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/bold/converter.py +0 -0
  91. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/bold/factory.py +0 -0
  92. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/bold/parser.py +0 -0
  93. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/cli/__init__.py +0 -0
  94. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/cli/cli.py +0 -0
  95. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/converter/__init__.py +0 -0
  96. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/converter/yaml/__init__.py +0 -0
  97. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/converter/yaml/model.py +0 -0
  98. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/converter/yaml/yaml_converter.py +0 -0
  99. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/copo/__init__.py +0 -0
  100. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/copo/client.py +0 -0
  101. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/copo/converter.py +0 -0
  102. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/copo/copo_datasource.py +0 -0
  103. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/copo/factory.py +0 -0
  104. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/copo/parser.py +0 -0
  105. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/__init__.py +0 -0
  106. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/attribute_metadata.py +0 -0
  107. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/core_converter.py +0 -0
  108. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/data_loader.py +0 -0
  109. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/data_object.py +0 -0
  110. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/data_object_converter.py +0 -0
  111. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/data_source_attribute_metadata.py +0 -0
  112. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/data_source_dict.py +0 -0
  113. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/datasource.py +0 -0
  114. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/datasource_error.py +0 -0
  115. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/datasource_filter.py +0 -0
  116. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/datasource_utils.py +0 -0
  117. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/factory.py +0 -0
  118. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/__init__.py +0 -0
  119. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/_filterable.py +0 -0
  120. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/_writer.py +0 -0
  121. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/aggregator.py +0 -0
  122. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/counter.py +0 -0
  123. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/cursor.py +0 -0
  124. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/declare.py +0 -0
  125. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/deleter.py +0 -0
  126. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/detail_getter.py +0 -0
  127. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/enricher.py +0 -0
  128. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/enum.py +0 -0
  129. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/group_statter.py +0 -0
  130. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/inserter.py +0 -0
  131. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/list_getter.py +0 -0
  132. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/operator_config.py +0 -0
  133. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/page_getter.py +0 -0
  134. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/relational.py +0 -0
  135. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/statter.py +0 -0
  136. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/summariser.py +0 -0
  137. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/updater.py +0 -0
  138. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/operator/upserter.py +0 -0
  139. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/relationship.py +0 -0
  140. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/requested_fields.py +0 -0
  141. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/session.py +0 -0
  142. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/core/validate.py +0 -0
  143. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/elastic/__init__.py +0 -0
  144. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/elastic/elastic_datasource.py +0 -0
  145. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/elastic/runtime_fields.py +0 -0
  146. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/eln/__init__.py +0 -0
  147. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/eln/auth.py +0 -0
  148. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/eln/eln_datasource.py +0 -0
  149. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/eln/entities.py +0 -0
  150. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/eln/generators.py +0 -0
  151. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/eln/sanitise.py +0 -0
  152. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/__init__.py +0 -0
  153. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/client.py +0 -0
  154. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/converter.py +0 -0
  155. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/ena_datasource.py +0 -0
  156. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/ena_methods.py +0 -0
  157. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/factory.py +0 -0
  158. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/filter.py +0 -0
  159. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/ena/parser.py +0 -0
  160. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/excel/__init__.py +0 -0
  161. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/excel/excel.py +0 -0
  162. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/excel/excel_datasource.py +0 -0
  163. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/excel/s3_factory.py +0 -0
  164. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/__init__.py +0 -0
  165. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py +0 -0
  166. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -0
  167. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -0
  168. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
  169. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
  170. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  171. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_tissue_prep_to_elastic_tissue_prep_converter.py +0 -0
  172. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
  173. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/bioscan_extra_pantheon_species_to_elastic_sample_update_converter.py +0 -0
  174. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +0 -0
  175. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/bioscan_qc_specimen_to_elastic_sample_update_converter.py +0 -0
  176. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/bioscan_qc_uksi_entry_to_elastic_sample_update_converter.py +0 -0
  177. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +0 -0
  178. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
  179. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
  180. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
  181. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +0 -0
  182. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
  183. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sample_to_elastic_sequencing_request_update_converter.py +0 -0
  184. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
  185. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sequencing_request_to_elastic_run_data_update_converter.py +0 -0
  186. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_sequencing_request_to_sts_sequencing_request_converter.py +0 -0
  187. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
  188. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
  189. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_tolid_to_elastic_genome_note_update_converter.py +0 -0
  190. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +0 -0
  191. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
  192. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
  193. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/genome_notes_genome_note_to_elastic_genome_note_converter.py +0 -0
  194. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
  195. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
  196. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +0 -0
  197. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/incoming_sample_to_incoming_sample_with_lists_converter.py +0 -0
  198. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
  199. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
  200. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
  201. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
  202. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/mlwh_run_data_to_elastic_run_data_converter.py +0 -0
  203. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/mlwh_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  204. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/skip_null_fields_converter.py +0 -0
  205. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +0 -0
  206. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
  207. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
  208. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +0 -0
  209. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
  210. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
  211. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
  212. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
  213. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +0 -0
  214. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
  215. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +0 -0
  216. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
  217. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
  218. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/logger.py +0 -0
  219. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/secrets.py +0 -0
  220. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/flows/sequencing_submissions.py +0 -0
  221. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/gap/__init__.py +0 -0
  222. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/gap/gap_datasource.py +0 -0
  223. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/__init__.py +0 -0
  224. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/client.py +0 -0
  225. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/converter.py +0 -0
  226. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/factory.py +0 -0
  227. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/filter.py +0 -0
  228. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/goat_datasource.py +0 -0
  229. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/goat/parser.py +0 -0
  230. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/google_sheets/__init__.py +0 -0
  231. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
  232. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/irods/__init__.py +0 -0
  233. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/irods/irods_datasource.py +0 -0
  234. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/__init__.py +0 -0
  235. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/client.py +0 -0
  236. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/converter.py +0 -0
  237. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/factory.py +0 -0
  238. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/filter.py +0 -0
  239. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/jira_datasource.py +0 -0
  240. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/mapper.py +0 -0
  241. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/parser.py +0 -0
  242. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/jira/sort.py +0 -0
  243. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/json/__init__.py +0 -0
  244. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/json/json_datasource.py +0 -0
  245. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/json/s3_json_datasource.py +0 -0
  246. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/labwhere/__init__.py +0 -0
  247. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/labwhere/client.py +0 -0
  248. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/labwhere/converter.py +0 -0
  249. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/labwhere/factory.py +0 -0
  250. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/labwhere/labwhere_datasource.py +0 -0
  251. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/labwhere/parser.py +0 -0
  252. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/markdown.py +0 -0
  253. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/mlwh/__init__.py +0 -0
  254. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/mlwh/mlwh_datasource.py +0 -0
  255. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/prefect/__init__.py +0 -0
  256. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/prefect/converter.py +0 -0
  257. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/prefect/factory.py +0 -0
  258. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/prefect/filter.py +0 -0
  259. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/prefect/prefect_datasource.py +0 -0
  260. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/prefect/prefect_object.py +0 -0
  261. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/s3/__init__.py +0 -0
  262. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/s3/converter.py +0 -0
  263. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/s3/factory.py +0 -0
  264. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/s3/parser.py +0 -0
  265. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/s3/s3_datasource.py +0 -0
  266. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/__init__.py +0 -0
  267. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/configuration.py +0 -0
  268. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/consumer.py +0 -0
  269. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/message_builder.py +0 -0
  270. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/messages.py +0 -0
  271. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/response_processors.py +0 -0
  272. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sciops/sequencing_datasource.py +0 -0
  273. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/services/__init__.py +0 -0
  274. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/services/s3_client.py +0 -0
  275. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/__init__.py +0 -0
  276. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/benchling.py +0 -0
  277. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/benchling_warehouse.py +0 -0
  278. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/bioscan.py +0 -0
  279. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/bioscan_extra.py +0 -0
  280. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/bioscan_image.py +0 -0
  281. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/bioscan_qc.py +0 -0
  282. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/bold.py +0 -0
  283. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/copo.py +0 -0
  284. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/defaults.py +0 -0
  285. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/elastic.py +0 -0
  286. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/ena.py +0 -0
  287. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/gap.py +0 -0
  288. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/genome_notes.py +0 -0
  289. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/goat.py +0 -0
  290. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/grit.py +0 -0
  291. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/informatics.py +0 -0
  292. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/labwhere.py +0 -0
  293. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/mlwh.py +0 -0
  294. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/portal.py +0 -0
  295. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/portal_attributes.py +0 -0
  296. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/portaldb.py +0 -0
  297. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/prefect.py +0 -0
  298. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/sciops.py +0 -0
  299. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/sts.py +0 -0
  300. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/sts_legacy.py +0 -0
  301. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/tolid.py +0 -0
  302. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/tolqc.py +0 -0
  303. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/tolqc_legacy.py +0 -0
  304. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/treeofsex.py +0 -0
  305. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/uksi_qc.py.py +0 -0
  306. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sources/workflows.py +0 -0
  307. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/__init__.py +0 -0
  308. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/action/__init__.py +0 -0
  309. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/action/factory.py +0 -0
  310. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/auth/__init__.py +0 -0
  311. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/auth/models.py +0 -0
  312. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/cast.py +0 -0
  313. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/database.py +0 -0
  314. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/ds_session.py +0 -0
  315. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/exception.py +0 -0
  316. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/ext.py +0 -0
  317. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/factory.py +0 -0
  318. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/filter.py +0 -0
  319. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/model.py +0 -0
  320. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/pipeline_step/__init__.py +0 -0
  321. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/relationship.py +0 -0
  322. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/session.py +0 -0
  323. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/sort.py +0 -0
  324. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/sql_converter.py +0 -0
  325. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/sql_datasource.py +0 -0
  326. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/standard/__init__.py +0 -0
  327. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sql/standard/factory.py +0 -0
  328. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/status/__init__.py +0 -0
  329. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/status/status_datasource.py +0 -0
  330. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sts/__init__.py +0 -0
  331. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sts/sts.py +0 -0
  332. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sts/sts_datasource.py +0 -0
  333. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/sts/sts_requests.py +0 -0
  334. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/treeval/__init__.py +0 -0
  335. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/treeval/treeval_datasource.py +0 -0
  336. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/utils/__init__.py +0 -0
  337. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/utils/csv.py +0 -0
  338. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/utils/s3.py +0 -0
  339. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/allowed_keys.py +0 -0
  340. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/allowed_values.py +0 -0
  341. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/allowed_values_from_datasource.py +0 -0
  342. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/assert_on_condition.py +0 -0
  343. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/converter_and_validate.py +0 -0
  344. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/ena_checklist.py +0 -0
  345. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/ena_submittable.py +0 -0
  346. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/interfaces/__init__.py +0 -0
  347. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/interfaces/condition_evaluator.py +0 -0
  348. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/min_one_valid_value.py +0 -0
  349. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/mutually_exclusive.py +0 -0
  350. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/regex.py +0 -0
  351. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/regex_by_value.py +0 -0
  352. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/specimens_have_same_taxon.py +0 -0
  353. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/sts_fields.py +0 -0
  354. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/tolid.py +0 -0
  355. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/types.py +0 -0
  356. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/unique_values.py +0 -0
  357. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol/validators/unique_whole_organisms.py +0 -0
  358. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
  359. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol_sdk.egg-info/entry_points.txt +0 -0
  360. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/src/tol_sdk.egg-info/requires.txt +0 -0
  361. {tol_sdk-1.8.1 → tol_sdk-1.8.4}/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.1
3
+ Version: 1.8.4
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.1"
11
+ version = "1.8.4"
12
12
  description = "SDK for interaction with ToL, Sanger and external services"
13
13
  readme = "README.md"
14
14
  authors = [
@@ -206,7 +206,7 @@ class JsonApiClient(HttpClient):
206
206
  )
207
207
 
208
208
  headers = self._merge_headers()
209
- session = self._get_session()
209
+ session = self.get_session()
210
210
  r = session.post(
211
211
  url,
212
212
  headers=headers,
@@ -228,7 +228,7 @@ class JsonApiClient(HttpClient):
228
228
 
229
229
  url = self.__insert_url(object_type)
230
230
  headers = self._merge_headers()
231
- session = self._get_session()
231
+ session = self.get_session()
232
232
  r = session.post(url, headers=headers, json=transfer)
233
233
  self.__assert_no_error(r)
234
234
  return r.json()
@@ -55,7 +55,7 @@ class HttpClient:
55
55
  **__empty_if_none(self.__token)
56
56
  }
57
57
 
58
- def _get_session(self) -> requests.Session:
58
+ def get_session(self) -> requests.Session:
59
59
 
60
60
  cert_path = os.path.join(
61
61
  os.path.dirname(__file__),
@@ -74,7 +74,7 @@ class HttpClient:
74
74
  """
75
75
  Attempts a call to the endpoint 5 times, with a delay of 1 second
76
76
  """
77
- session = self._get_session()
77
+ session = self.get_session()
78
78
 
79
79
  retry_strategy = Retry(
80
80
  total=self.__retries,
@@ -56,3 +56,4 @@ from .sts_sample_to_casm_benchling_converter import StsSampleToCasmBenchlingConv
56
56
  from .treeofsex_species_to_treeofsexwh_species_converter import TreeofsexSpeciesToTreeofsexwhSpeciesConverter # noqa F401
57
57
  from .treeofsex_upload_to_treeofsex_attribute_converter import TreeofsexUploadToTreeofsexAttributeConverter # noqa F401
58
58
  from .skip_null_fields_converter import SkipNullFieldsConverter # noqa F401
59
+ from .auto_detect_manifest_type_converter import AutoDetectManifestTypeConverter # noqa F401
@@ -0,0 +1,46 @@
1
+ # SPDX-FileCopyrightText: 2025 Genome Research Ltd.
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ import re
5
+ from dataclasses import dataclass
6
+ from typing import Iterable
7
+
8
+ from tol.core import DataObject, DataObjectToDataObjectOrUpdateConverter
9
+
10
+
11
+ class AutoDetectManifestTypeConverter(DataObjectToDataObjectOrUpdateConverter):
12
+
13
+ @dataclass(slots=True, frozen=True, kw_only=True)
14
+ class Config:
15
+ rack_or_plate: str
16
+
17
+ __slots__ = ['__config']
18
+ __config: Config
19
+
20
+ def __init__(self, data_object_factory, config: Config) -> None:
21
+ super().__init__(data_object_factory)
22
+ self.__config = config
23
+ self._data_object_factory = data_object_factory
24
+
25
+ def convert(self, data_object: DataObject) -> Iterable[DataObject]:
26
+ """
27
+ converting the samples DataObject into ENA format
28
+ """
29
+ s = data_object
30
+ attributes = {}
31
+ rack_or_plate_based_manifest = bool(
32
+ re.fullmatch(r'^[A-P][12]?[0-9]$',
33
+ s.attributes.get(self.__config.rack_or_plate))
34
+ )
35
+
36
+ if rack_or_plate_based_manifest:
37
+ attributes['manifest_type'] = 'PLATE_WELL'
38
+ else:
39
+ attributes['manifest_type'] = 'RACK_TUBE'
40
+
41
+ ret = self._data_object_factory(
42
+ data_object.type,
43
+ s.id,
44
+ attributes=attributes,
45
+ )
46
+ yield ret
@@ -22,6 +22,7 @@ from ...api_base.auth import (
22
22
  )
23
23
  from ...api_base.auth.abc import AuthorisationManager
24
24
  from ...api_base.misc import AuthContext
25
+ from ...core import HttpClient
25
26
 
26
27
 
27
28
  class DbAuthManager(AuthManager):
@@ -194,7 +195,12 @@ class DbAuthManager(AuthManager):
194
195
  Raises:
195
196
  requests.HTTPError: If the revocation request fails
196
197
  """
197
- r = requests.post(
198
+
199
+ client = HttpClient()
200
+
201
+ session = client.get_session()
202
+
203
+ r = session.post(
198
204
  self.__config.revoke_url,
199
205
  data={
200
206
  'token': token,
@@ -9,7 +9,7 @@ from dataclasses import dataclass
9
9
  from datetime import datetime
10
10
  from typing import Any, Dict, Iterator, List
11
11
 
12
- from sqlalchemy import ForeignKey, UniqueConstraint
12
+ from sqlalchemy import ForeignKey, Text, UniqueConstraint
13
13
  from sqlalchemy.dialects.postgresql import JSONB
14
14
  from sqlalchemy.orm import (
15
15
  Mapped,
@@ -64,7 +64,7 @@ def create_pipeline_step_models(
64
64
  class Pipeline(base_model_class):
65
65
  __tablename__ = 'pipeline'
66
66
 
67
- id: Mapped[int] = mapped_column( # noqa A003
67
+ id: Mapped[int] = mapped_column( # noqa A003
68
68
  primary_key=True,
69
69
  autoincrement=True
70
70
  )
@@ -100,7 +100,7 @@ def create_pipeline_step_models(
100
100
  ),
101
101
  )
102
102
 
103
- id: Mapped[int] = mapped_column( # noqa A003
103
+ id: Mapped[int] = mapped_column( # noqa A003
104
104
  primary_key=True,
105
105
  autoincrement=True
106
106
  )
@@ -121,6 +121,16 @@ def create_pipeline_step_models(
121
121
  nullable=False
122
122
  )
123
123
 
124
+ description: Mapped[str | None] = mapped_column(
125
+ Text,
126
+ nullable=True
127
+ )
128
+
129
+ is_visible: Mapped[bool] = mapped_column(
130
+ nullable=False,
131
+ default=True
132
+ )
133
+
124
134
  config: Mapped[dict[str, Any]] = mapped_column(
125
135
  JSONB,
126
136
  nullable=False,
@@ -135,7 +145,7 @@ def create_pipeline_step_models(
135
145
  class Upload(base_model_class):
136
146
  __tablename__ = 'upload'
137
147
 
138
- id: Mapped[int] = mapped_column( # noqa A003
148
+ id: Mapped[int] = mapped_column( # noqa A003
139
149
  primary_key=True,
140
150
  autoincrement=True
141
151
  )
@@ -173,6 +183,11 @@ def create_pipeline_step_models(
173
183
  default=False
174
184
  )
175
185
 
186
+ is_ready: Mapped[bool] = mapped_column(
187
+ nullable=False,
188
+ default=False
189
+ )
190
+
176
191
  failure_message: Mapped[str | None] = mapped_column(
177
192
  nullable=True,
178
193
  )
@@ -182,7 +197,7 @@ def create_pipeline_step_models(
182
197
  foreign_keys=[pipeline_id]
183
198
  )
184
199
 
185
- user: Mapped['User'] = relationship( # noqa F821
200
+ user: Mapped['User'] = relationship( # noqa F821
186
201
  back_populates='user_uploads',
187
202
  foreign_keys=[user_id]
188
203
  )
@@ -20,3 +20,7 @@ from .unique_values import UniqueValuesValidator # noqa
20
20
  from .unique_whole_organisms import UniqueWholeOrganismsValidator # noqa
21
21
  from .interfaces import Condition # noqa
22
22
  from .min_one_valid_value import MinOneValidValueValidator # noqa
23
+ from .value_check import ValueCheckValidator # noqa
24
+ from .branching import BranchingValidator # noqa
25
+ from .unique_value_check import UniqueValueCheckValidator # noqa
26
+ from .date_sorting import DateSortingValidator # noqa
@@ -0,0 +1,160 @@
1
+ # SPDX-FileCopyrightText: 2026 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ import importlib
6
+ from dataclasses import dataclass
7
+ from typing import Dict, List, cast
8
+
9
+ from tol.core import DataObject
10
+ from tol.core.validate import ValidationResult, Validator
11
+
12
+ from .interfaces import Condition, ConditionDict, ConditionEvaluator
13
+
14
+
15
+ Subvalidation = Dict[str, ConditionDict | str | Dict]
16
+
17
+
18
+ class BranchingValidator(Validator, ConditionEvaluator):
19
+ """
20
+ This validator is configured with a list of conditions.
21
+ If a condition passes, the corresponding sub-validator will be run.
22
+ """
23
+ @dataclass(slots=True, frozen=True, kw_only=True)
24
+ class Config:
25
+ """
26
+ ```
27
+ validations=[
28
+ {
29
+ 'condition': {
30
+ 'field': 'column_name',
31
+ 'operator': '==',
32
+ 'value': 'expected_value',
33
+ },
34
+ 'module': '<path.to.module>',
35
+ 'class_name': '<path.to.ValidatorClass>',
36
+ 'config_details': { ... },
37
+ },
38
+ {
39
+ ...
40
+ }
41
+ ]
42
+ ```
43
+ """
44
+ validations: List[Subvalidation]
45
+
46
+ __slots__ = ['__config', '_cached_validators']
47
+ __config: Config
48
+ _cached_validators: Dict[int, Validator]
49
+ """
50
+ Stores all sub-validators that have already been seen so that they can be used again.
51
+ Their keys are their indexes in the `validations` list in the validator config
52
+ """
53
+
54
+ def __init__(
55
+ self,
56
+ config: Config,
57
+ **kwargs
58
+ ) -> None:
59
+ super().__init__()
60
+
61
+ del kwargs
62
+ self.__config = config
63
+ self._cached_validators = {}
64
+
65
+ def _validate_data_object(
66
+ self,
67
+ obj: DataObject
68
+ ) -> None:
69
+ for subvalidator_index, subvalidation in enumerate(self.__config.validations):
70
+ # Do not run this sub-validation if its condition does not pass
71
+ condition_dict = cast(ConditionDict, subvalidation['condition'])
72
+ if not self._does_condition_pass(Condition.from_dict(condition_dict), obj):
73
+ continue
74
+
75
+ # Obtain validator, either from cache or anew
76
+ validator: Validator
77
+ if subvalidator_index in self._cached_validators:
78
+ # Use existing validator to perform subvalidation
79
+ validator = self._cached_validators[subvalidator_index]
80
+ else:
81
+ # Create a new validator and use that for the subvalidation
82
+ validator = self.__instantiate_validator(subvalidation)
83
+
84
+ # Add the new validator to the store of cached validators
85
+ self._cached_validators[subvalidator_index] = validator
86
+
87
+ # Validate data object
88
+ validator._validate_data_object(obj)
89
+
90
+ # At this point, I initially added `break` so that once a condition passed, the rest
91
+ # did not need to be checked. However, I decided against it because it is more flexible
92
+ # to have the opportunity to allow multiple conditions to pass, and thus execute
93
+ # multiple subvalidations, on the same `DataObject` in the same iteration
94
+
95
+ def __instantiate_validator(self, subvalidation: Subvalidation) -> Validator:
96
+ # Before attempting to extract items from the subvalidation, ensure all of the required
97
+ # keys are there and that they contain values of the correct types.
98
+ # This allows the dictionary to be safely queried thereafter
99
+ try:
100
+ # Accessing with square brackets will also check whether the key exists or not
101
+ if not isinstance(subvalidation['module'], str):
102
+ raise TypeError('module')
103
+ elif not isinstance(subvalidation['class_name'], str):
104
+ raise TypeError('class_name')
105
+ except (KeyError, TypeError) as e:
106
+ # Make errors more specific to validators
107
+ if isinstance(e, KeyError):
108
+ raise KeyError(
109
+ f'Invalid config in BranchingValidator: `{e.args[0]}` not found'
110
+ )
111
+ else:
112
+ raise TypeError(
113
+ f'Invalid config in BranchingValidator: '
114
+ f'`{e.args[0]}` contains an erroneous value type'
115
+ )
116
+
117
+ # Dynamically retrieve the validator class
118
+ validator_module = importlib.import_module(subvalidation['module'])
119
+ validator_class = getattr(validator_module, subvalidation['class_name'])
120
+
121
+ # Construct and return the new validator
122
+ validator_config = validator_class.Config(
123
+ subvalidation['config_details']
124
+ )
125
+ return validator_class(
126
+ config=validator_config,
127
+ )
128
+
129
+ @property
130
+ def results(self) -> List[ValidationResult]:
131
+ """
132
+ Fetches results from all sub-validators, collated into a single list
133
+ """
134
+ return [
135
+ result
136
+ for validator in self._cached_validators.values()
137
+ for result in validator.results
138
+ ]
139
+
140
+ @property
141
+ def warnings(self) -> List[ValidationResult]:
142
+ """
143
+ Fetches warnings from all sub-validators, collated into a single list
144
+ """
145
+ return [
146
+ warning
147
+ for validator in self._cached_validators.values()
148
+ for warning in validator.warnings
149
+ ]
150
+
151
+ @property
152
+ def errors(self) -> List[ValidationResult]:
153
+ """
154
+ Fetches errors from all sub-validators, collated into a single list
155
+ """
156
+ return [
157
+ error
158
+ for validator in self._cached_validators.values()
159
+ for error in validator.errors
160
+ ]
@@ -0,0 +1,58 @@
1
+ # SPDX-FileCopyrightText: 2026 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ from dataclasses import dataclass
6
+ from datetime import date, datetime
7
+
8
+ from tol.core import Validator
9
+ from tol.core.data_object import DataObject
10
+
11
+
12
+ class DateSortingValidator(Validator):
13
+ """
14
+ Validates an incoming stream of `DataObject` instances.
15
+ For each data object (sample) check the collection date
16
+ is not preceding the plating date
17
+ """
18
+ @dataclass(slots=True, frozen=True, kw_only=True)
19
+ class Config:
20
+ dates: list[str]
21
+
22
+ __slots__ = ['__config']
23
+ __config: Config
24
+
25
+ def __init__(self, config: Config, **kwargs) -> None:
26
+ super().__init__()
27
+ self.__config = config
28
+
29
+ def _validate_data_object(self, obj: DataObject) -> None:
30
+ # This function is used to check if the dates obtained
31
+ # are in the standard format and the date of collection
32
+ # is not preceding the date of plating
33
+
34
+ previous_date = None
35
+
36
+ for date_field in self.__config.dates:
37
+ date_value = obj.get_field_by_name(date_field)
38
+
39
+ # Validate that the value is a date or datetime object
40
+ if not isinstance(date_value, (date, datetime)):
41
+ self.add_error(
42
+ object_id=obj.id,
43
+ detail=f'{date_field} of {date_value} is not in the right date format',
44
+ field=self.__config.dates,
45
+ )
46
+ return
47
+
48
+ # Check if dates are in ascending order
49
+ if previous_date is not None and date_value < previous_date:
50
+ self.add_error(
51
+ object_id=obj.id,
52
+ detail=f'Date {date_field} ({date_value})'
53
+ f'is before previous date ({previous_date})',
54
+ field=self.__config.dates,
55
+ )
56
+ return
57
+
58
+ previous_date = date_value
@@ -0,0 +1,41 @@
1
+ # SPDX-FileCopyrightText: 2025 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ from dataclasses import dataclass
6
+
7
+ from tol.core import Validator
8
+ from tol.core.data_object import DataObject
9
+
10
+
11
+ class UniqueValueCheckValidator(Validator):
12
+ """
13
+ Validates an incoming stream of `DataObject` instances.
14
+ For each data object (sample) it checks if the GAL column has only one value
15
+ """
16
+ @dataclass(slots=True, frozen=True, kw_only=True)
17
+ class Config:
18
+ field: str
19
+
20
+ __slots__ = ['__config', '_cached']
21
+ __config: Config
22
+ _cached: str | None
23
+
24
+ def __init__(self, config: Config, **kwargs) -> None:
25
+ super().__init__()
26
+ self.__config = config
27
+ self._cached = None
28
+
29
+ def _validate_data_object(self, obj: DataObject) -> None:
30
+ # This function is used to check if the data object has a single value for GAL column
31
+
32
+ if not self._cached:
33
+ self._cached = obj.attributes.get(self.__config.field)
34
+
35
+ else:
36
+ if obj.attributes.get(self.__config.field) != self._cached:
37
+ self.add_error(
38
+ object_id=obj.id,
39
+ detail=f'More than one value detected in {self.__config.field}',
40
+ field=self.__config.field,
41
+ )
@@ -0,0 +1,36 @@
1
+ # SPDX-FileCopyrightText: 2025 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ from dataclasses import dataclass
6
+
7
+ from tol.core import Validator
8
+ from tol.core.data_object import DataObject
9
+
10
+
11
+ class ValueCheckValidator(Validator):
12
+ """
13
+ Validates an incoming stream of `DataObject` instances.
14
+ For each data object (sample) it checks if it is a SYMBIONT
15
+ """
16
+ @dataclass(slots=True, frozen=True, kw_only=True)
17
+ class Config:
18
+ field: str
19
+ value: str
20
+
21
+ __slots__ = ['__config']
22
+ __config: Config
23
+
24
+ def __init__(self, config: Config, **kwargs) -> None:
25
+ super().__init__()
26
+ self.__config = config
27
+
28
+ def _validate_data_object(self, obj: DataObject) -> None:
29
+ # This function is used to check if the data object is SYMBIONT or not
30
+
31
+ if obj.attributes.get(self.__config.field) == self.__config.value:
32
+ self.add_error(
33
+ object_id=obj.id,
34
+ detail=f'{self.__config.value} is detected',
35
+ field=self.__config.field,
36
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tol-sdk
3
- Version: 1.8.1
3
+ Version: 1.8.4
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
@@ -155,6 +155,7 @@ src/tol/flows/logger.py
155
155
  src/tol/flows/secrets.py
156
156
  src/tol/flows/sequencing_submissions.py
157
157
  src/tol/flows/converters/__init__.py
158
+ src/tol/flows/converters/auto_detect_manifest_type_converter.py
158
159
  src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py
159
160
  src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py
160
161
  src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py
@@ -332,7 +333,9 @@ src/tol/validators/allowed_keys.py
332
333
  src/tol/validators/allowed_values.py
333
334
  src/tol/validators/allowed_values_from_datasource.py
334
335
  src/tol/validators/assert_on_condition.py
336
+ src/tol/validators/branching.py
335
337
  src/tol/validators/converter_and_validate.py
338
+ src/tol/validators/date_sorting.py
336
339
  src/tol/validators/ena_checklist.py
337
340
  src/tol/validators/ena_submittable.py
338
341
  src/tol/validators/min_one_valid_value.py
@@ -343,8 +346,10 @@ src/tol/validators/specimens_have_same_taxon.py
343
346
  src/tol/validators/sts_fields.py
344
347
  src/tol/validators/tolid.py
345
348
  src/tol/validators/types.py
349
+ src/tol/validators/unique_value_check.py
346
350
  src/tol/validators/unique_values.py
347
351
  src/tol/validators/unique_whole_organisms.py
352
+ src/tol/validators/value_check.py
348
353
  src/tol/validators/interfaces/__init__.py
349
354
  src/tol/validators/interfaces/condition_evaluator.py
350
355
  src/tol_sdk.egg-info/PKG-INFO
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes