tol-sdk 1.8.4__tar.gz → 1.8.5__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 (362) hide show
  1. {tol_sdk-1.8.4/src/tol_sdk.egg-info → tol_sdk-1.8.5}/PKG-INFO +1 -1
  2. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/pyproject.toml +1 -1
  3. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/view.py +1 -1
  4. tol_sdk-1.8.5/src/tol/flows/converters/time_string_to_time.py +35 -0
  5. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/ena_checklist.py +29 -9
  6. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/specimens_have_same_taxon.py +1 -1
  7. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/types.py +13 -6
  8. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/value_check.py +5 -4
  9. {tol_sdk-1.8.4 → tol_sdk-1.8.5/src/tol_sdk.egg-info}/PKG-INFO +1 -1
  10. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/SOURCES.txt +1 -0
  11. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/LICENSE +0 -0
  12. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/MANIFEST.in +0 -0
  13. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/README.md +0 -0
  14. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/setup.cfg +0 -0
  15. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/certs/cacert.pem +0 -0
  16. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/__init__.py +0 -0
  17. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/actions/__init__.py +0 -0
  18. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/actions/action.py +0 -0
  19. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/actions/upsert_action.py +0 -0
  20. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/__init__.py +0 -0
  21. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/action.py +0 -0
  22. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/__init__.py +0 -0
  23. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/abc/__init__.py +0 -0
  24. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/abc/auth.py +0 -0
  25. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/abc/authorisation.py +0 -0
  26. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/asserts.py +0 -0
  27. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/blueprint.py +0 -0
  28. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/composite.py +0 -0
  29. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/config.py +0 -0
  30. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/error.py +0 -0
  31. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/blueprint.py +0 -0
  32. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/controller.py +0 -0
  33. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/data_upload.py +0 -0
  34. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/__init__.py +0 -0
  35. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/aggregation_body.py +0 -0
  36. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
  37. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/auth_context.py +0 -0
  38. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/authenticate.py +0 -0
  39. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/data_body.py +0 -0
  40. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/filter_utils.py +0 -0
  41. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/list_get_parameters.py +0 -0
  42. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/relation_url.py +0 -0
  43. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/stats_parameters.py +0 -0
  44. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/pipeline_steps.py +0 -0
  45. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/system.py +0 -0
  46. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/__init__.py +0 -0
  47. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/api_datasource.py +0 -0
  48. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/client.py +0 -0
  49. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/converter.py +0 -0
  50. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/exception.py +0 -0
  51. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/factory.py +0 -0
  52. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/filter.py +0 -0
  53. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/parser.py +0 -0
  54. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/validate.py +0 -0
  55. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/barcodes/__init__.py +0 -0
  56. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/barcodes/main.py +0 -0
  57. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/__init__.py +0 -0
  58. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/benchling_converter.py +0 -0
  59. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/benchling_datasource.py +0 -0
  60. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/benchling_warehouse_datasource.py +0 -0
  61. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/__init__.py +0 -0
  62. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_containers_dna.sql +0 -0
  63. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_dna.sql +0 -0
  64. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +0 -0
  65. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
  66. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
  67. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
  68. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
  69. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
  70. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
  71. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
  72. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
  73. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
  74. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sample.sql +0 -0
  75. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
  76. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +0 -0
  77. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
  78. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
  79. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/tissue_prep.sql +0 -0
  80. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/board/__init__.py +0 -0
  81. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/board/blueprint.py +0 -0
  82. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/__init__.py +0 -0
  83. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/bold_datasource.py +0 -0
  84. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/client.py +0 -0
  85. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/converter.py +0 -0
  86. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/factory.py +0 -0
  87. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/parser.py +0 -0
  88. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/cli/__init__.py +0 -0
  89. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/cli/cli.py +0 -0
  90. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/__init__.py +0 -0
  91. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/yaml/__init__.py +0 -0
  92. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/yaml/model.py +0 -0
  93. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/yaml/yaml_converter.py +0 -0
  94. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/__init__.py +0 -0
  95. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/client.py +0 -0
  96. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/converter.py +0 -0
  97. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/copo_datasource.py +0 -0
  98. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/factory.py +0 -0
  99. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/parser.py +0 -0
  100. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/__init__.py +0 -0
  101. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/attribute_metadata.py +0 -0
  102. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/core_converter.py +0 -0
  103. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_loader.py +0 -0
  104. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_object.py +0 -0
  105. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_object_converter.py +0 -0
  106. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_source_attribute_metadata.py +0 -0
  107. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_source_dict.py +0 -0
  108. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource.py +0 -0
  109. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource_error.py +0 -0
  110. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource_filter.py +0 -0
  111. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource_utils.py +0 -0
  112. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/factory.py +0 -0
  113. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/http_client.py +0 -0
  114. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/__init__.py +0 -0
  115. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/_filterable.py +0 -0
  116. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/_writer.py +0 -0
  117. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/aggregator.py +0 -0
  118. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/counter.py +0 -0
  119. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/cursor.py +0 -0
  120. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/declare.py +0 -0
  121. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/deleter.py +0 -0
  122. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/detail_getter.py +0 -0
  123. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/enricher.py +0 -0
  124. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/enum.py +0 -0
  125. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/group_statter.py +0 -0
  126. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/inserter.py +0 -0
  127. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/list_getter.py +0 -0
  128. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/operator_config.py +0 -0
  129. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/page_getter.py +0 -0
  130. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/relational.py +0 -0
  131. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/statter.py +0 -0
  132. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/summariser.py +0 -0
  133. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/updater.py +0 -0
  134. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/upserter.py +0 -0
  135. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/relationship.py +0 -0
  136. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/requested_fields.py +0 -0
  137. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/session.py +0 -0
  138. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/validate.py +0 -0
  139. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/elastic/__init__.py +0 -0
  140. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/elastic/elastic_datasource.py +0 -0
  141. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/elastic/runtime_fields.py +0 -0
  142. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/__init__.py +0 -0
  143. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/auth.py +0 -0
  144. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/eln_datasource.py +0 -0
  145. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/entities.py +0 -0
  146. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/generators.py +0 -0
  147. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/sanitise.py +0 -0
  148. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/__init__.py +0 -0
  149. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/client.py +0 -0
  150. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/converter.py +0 -0
  151. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/ena_datasource.py +0 -0
  152. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/ena_methods.py +0 -0
  153. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/factory.py +0 -0
  154. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/filter.py +0 -0
  155. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/parser.py +0 -0
  156. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/__init__.py +0 -0
  157. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/excel.py +0 -0
  158. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/excel_datasource.py +0 -0
  159. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/s3_factory.py +0 -0
  160. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/__init__.py +0 -0
  161. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/__init__.py +0 -0
  162. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/auto_detect_manifest_type_converter.py +0 -0
  163. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py +0 -0
  164. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -0
  165. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -0
  166. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
  167. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
  168. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  169. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_tissue_prep_to_elastic_tissue_prep_converter.py +0 -0
  170. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
  171. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bioscan_extra_pantheon_species_to_elastic_sample_update_converter.py +0 -0
  172. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +0 -0
  173. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bioscan_qc_specimen_to_elastic_sample_update_converter.py +0 -0
  174. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bioscan_qc_uksi_entry_to_elastic_sample_update_converter.py +0 -0
  175. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +0 -0
  176. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
  177. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
  178. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
  179. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +0 -0
  180. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
  181. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_elastic_sequencing_request_update_converter.py +0 -0
  182. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
  183. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sequencing_request_to_elastic_run_data_update_converter.py +0 -0
  184. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sequencing_request_to_sts_sequencing_request_converter.py +0 -0
  185. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
  186. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
  187. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_tolid_to_elastic_genome_note_update_converter.py +0 -0
  188. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +0 -0
  189. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
  190. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
  191. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/genome_notes_genome_note_to_elastic_genome_note_converter.py +0 -0
  192. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
  193. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
  194. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +0 -0
  195. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/incoming_sample_to_incoming_sample_with_lists_converter.py +0 -0
  196. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
  197. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
  198. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
  199. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
  200. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/mlwh_run_data_to_elastic_run_data_converter.py +0 -0
  201. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/mlwh_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
  202. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/skip_null_fields_converter.py +0 -0
  203. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +0 -0
  204. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
  205. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
  206. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +0 -0
  207. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
  208. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
  209. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
  210. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
  211. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +0 -0
  212. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
  213. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +0 -0
  214. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
  215. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
  216. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/logger.py +0 -0
  217. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/secrets.py +0 -0
  218. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/sequencing_submissions.py +0 -0
  219. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/gap/__init__.py +0 -0
  220. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/gap/gap_datasource.py +0 -0
  221. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/__init__.py +0 -0
  222. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/client.py +0 -0
  223. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/converter.py +0 -0
  224. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/factory.py +0 -0
  225. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/filter.py +0 -0
  226. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/goat_datasource.py +0 -0
  227. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/parser.py +0 -0
  228. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/google_sheets/__init__.py +0 -0
  229. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
  230. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/irods/__init__.py +0 -0
  231. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/irods/irods_datasource.py +0 -0
  232. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/__init__.py +0 -0
  233. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/client.py +0 -0
  234. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/converter.py +0 -0
  235. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/factory.py +0 -0
  236. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/filter.py +0 -0
  237. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/jira_datasource.py +0 -0
  238. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/mapper.py +0 -0
  239. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/parser.py +0 -0
  240. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/sort.py +0 -0
  241. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/json/__init__.py +0 -0
  242. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/json/json_datasource.py +0 -0
  243. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/json/s3_json_datasource.py +0 -0
  244. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/__init__.py +0 -0
  245. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/client.py +0 -0
  246. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/converter.py +0 -0
  247. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/factory.py +0 -0
  248. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/labwhere_datasource.py +0 -0
  249. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/parser.py +0 -0
  250. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/markdown.py +0 -0
  251. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/mlwh/__init__.py +0 -0
  252. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/mlwh/mlwh_datasource.py +0 -0
  253. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/__init__.py +0 -0
  254. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/converter.py +0 -0
  255. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/factory.py +0 -0
  256. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/filter.py +0 -0
  257. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/prefect_datasource.py +0 -0
  258. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/prefect_object.py +0 -0
  259. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/__init__.py +0 -0
  260. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/converter.py +0 -0
  261. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/factory.py +0 -0
  262. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/parser.py +0 -0
  263. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/s3_datasource.py +0 -0
  264. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/__init__.py +0 -0
  265. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/configuration.py +0 -0
  266. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/consumer.py +0 -0
  267. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/message_builder.py +0 -0
  268. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/messages.py +0 -0
  269. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/response_processors.py +0 -0
  270. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/sequencing_datasource.py +0 -0
  271. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/services/__init__.py +0 -0
  272. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/services/s3_client.py +0 -0
  273. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/__init__.py +0 -0
  274. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/benchling.py +0 -0
  275. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/benchling_warehouse.py +0 -0
  276. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan.py +0 -0
  277. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan_extra.py +0 -0
  278. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan_image.py +0 -0
  279. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan_qc.py +0 -0
  280. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bold.py +0 -0
  281. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/copo.py +0 -0
  282. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/defaults.py +0 -0
  283. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/elastic.py +0 -0
  284. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/ena.py +0 -0
  285. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/gap.py +0 -0
  286. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/genome_notes.py +0 -0
  287. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/goat.py +0 -0
  288. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/grit.py +0 -0
  289. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/informatics.py +0 -0
  290. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/labwhere.py +0 -0
  291. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/mlwh.py +0 -0
  292. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/portal.py +0 -0
  293. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/portal_attributes.py +0 -0
  294. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/portaldb.py +0 -0
  295. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/prefect.py +0 -0
  296. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/sciops.py +0 -0
  297. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/sts.py +0 -0
  298. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/sts_legacy.py +0 -0
  299. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/tolid.py +0 -0
  300. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/tolqc.py +0 -0
  301. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/tolqc_legacy.py +0 -0
  302. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/treeofsex.py +0 -0
  303. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/uksi_qc.py.py +0 -0
  304. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/workflows.py +0 -0
  305. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/__init__.py +0 -0
  306. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/action/__init__.py +0 -0
  307. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/action/factory.py +0 -0
  308. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/auth/__init__.py +0 -0
  309. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/auth/blueprint.py +0 -0
  310. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/auth/models.py +0 -0
  311. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/cast.py +0 -0
  312. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/database.py +0 -0
  313. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/ds_session.py +0 -0
  314. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/exception.py +0 -0
  315. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/ext.py +0 -0
  316. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/factory.py +0 -0
  317. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/filter.py +0 -0
  318. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/model.py +0 -0
  319. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/pipeline_step/__init__.py +0 -0
  320. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/pipeline_step/factory.py +0 -0
  321. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/relationship.py +0 -0
  322. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/session.py +0 -0
  323. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/sort.py +0 -0
  324. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/sql_converter.py +0 -0
  325. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/sql_datasource.py +0 -0
  326. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/standard/__init__.py +0 -0
  327. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/standard/factory.py +0 -0
  328. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/status/__init__.py +0 -0
  329. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/status/status_datasource.py +0 -0
  330. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/__init__.py +0 -0
  331. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/sts.py +0 -0
  332. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/sts_datasource.py +0 -0
  333. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/sts_requests.py +0 -0
  334. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/treeval/__init__.py +0 -0
  335. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/treeval/treeval_datasource.py +0 -0
  336. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/utils/__init__.py +0 -0
  337. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/utils/csv.py +0 -0
  338. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/utils/s3.py +0 -0
  339. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/__init__.py +0 -0
  340. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/allowed_keys.py +0 -0
  341. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/allowed_values.py +0 -0
  342. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/allowed_values_from_datasource.py +0 -0
  343. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/assert_on_condition.py +0 -0
  344. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/branching.py +0 -0
  345. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/converter_and_validate.py +0 -0
  346. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/date_sorting.py +0 -0
  347. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/ena_submittable.py +0 -0
  348. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/interfaces/__init__.py +0 -0
  349. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/interfaces/condition_evaluator.py +0 -0
  350. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/min_one_valid_value.py +0 -0
  351. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/mutually_exclusive.py +0 -0
  352. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/regex.py +0 -0
  353. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/regex_by_value.py +0 -0
  354. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/sts_fields.py +0 -0
  355. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/tolid.py +0 -0
  356. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/unique_value_check.py +0 -0
  357. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/unique_values.py +0 -0
  358. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/unique_whole_organisms.py +0 -0
  359. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
  360. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/entry_points.txt +0 -0
  361. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/requires.txt +0 -0
  362. {tol_sdk-1.8.4 → tol_sdk-1.8.5}/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.4
3
+ Version: 1.8.5
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.4"
11
+ version = "1.8.5"
12
12
  description = "SDK for interaction with ToL, Sanger and external services"
13
13
  readme = "README.md"
14
14
  authors = [
@@ -197,7 +197,7 @@ class DefaultView(View):
197
197
  sub_tree = tree.get_sub_tree(rel)
198
198
  if sub_tree and rel in data_object._to_many_objects:
199
199
  many_obj = data_object._to_many_objects.get(rel)
200
- to_many[rel] = [self.__dump_stub(x, rel) for x in many_obj]
200
+ to_many[rel] = {'data': [self.__dump_stub(x, rel) for x in many_obj]}
201
201
  for obj in many_obj:
202
202
  included.add_dump(self.__dump_object(obj, included, sub_tree))
203
203
  elif quoted_id:
@@ -0,0 +1,35 @@
1
+ # SPDX-FileCopyrightText: 2025 Genome Research Ltd.
2
+ #
3
+ # SPDX-License-Identifier: MIT
4
+
5
+ import re
6
+ from datetime import time
7
+
8
+ from tol.core import DataObject
9
+
10
+
11
+ class Converter:
12
+ def convert(self, obj):
13
+ raise NotImplementedError()
14
+
15
+
16
+ class TimeStringToTimeConverter(Converter):
17
+ """
18
+ Converts string fields representing time in HH:MM (24-hour) format to Python time objects.
19
+ If the string is not in HH:MM, tries to append ':00' and parse as HH:MM:SS.
20
+ """
21
+ def __init__(self, field: str):
22
+ self.field = field
23
+
24
+ def convert(self, obj: DataObject) -> DataObject:
25
+ value = obj.attributes.get(self.field)
26
+ if isinstance(value, str):
27
+ match = re.match(r'^(\d{1,2}):(\d{2})(?::(\d{2}))?$', value)
28
+ if match:
29
+ h, m = int(match.group(1)), int(match.group(2))
30
+ s = int(match.group(3)) if match.group(3) else 0
31
+ try:
32
+ obj.attributes[self.field] = time(h, m, s)
33
+ except ValueError:
34
+ pass
35
+ return obj
@@ -12,6 +12,11 @@ from tol.sources.ena import ena
12
12
 
13
13
 
14
14
  class EnaChecklistValidator(Validator):
15
+ ENA_TO_INTERNAL_FIELD_MAP = {
16
+ 'geographic location (longitude)': 'DECIMAL_LONGITUDE',
17
+ 'geographic location (latitude)': 'DECIMAL_LATITUDE',
18
+ }
19
+
15
20
  """
16
21
  validates the ENA_CHECKLIST for each samples
17
22
  """
@@ -37,16 +42,18 @@ class EnaChecklistValidator(Validator):
37
42
  field_name = key
38
43
  if 'field' in validation:
39
44
  field_name = validation['field']
45
+ internal_field = self.ENA_TO_INTERNAL_FIELD_MAP.get(field_name, field_name)
46
+
40
47
  if 'mandatory' in validation and key not in obj.attributes:
41
- self.add_error(object_id=obj.id, detail='Must be given', field=[field_name])
48
+ self.add_error(object_id=obj.id, detail='Must be given', field=[internal_field])
42
49
  continue
43
50
  if 'mandatory' in validation and obj.attributes[key] is None:
44
- self.add_error(object_id=obj.id, detail='Must be given', field=[field_name])
51
+ self.add_error(object_id=obj.id, detail='Must be given', field=[internal_field])
45
52
  continue
46
53
  if 'mandatory' in validation and obj.attributes.get(key) == '':
47
54
  self.add_error(
48
55
  object_id=obj.id,
49
- detail='Must not be empty', field=[field_name]
56
+ detail='Must not be empty', field=[internal_field]
50
57
  )
51
58
 
52
59
  if 'restricted text' in validation and key in obj.attributes:
@@ -55,12 +62,25 @@ class EnaChecklistValidator(Validator):
55
62
  regex = condition
56
63
  compiled_re = re.compile(regex)
57
64
  if not compiled_re.search(obj.attributes.get(key)):
58
- self.add_error(
59
- object_id=obj.id,
60
- detail='Must match specific pattern', field=[field_name]
61
- )
65
+ if internal_field in ('DECIMAL_LONGITUDE', 'DECIMAL_LATITUDE'):
66
+ self.add_error(
67
+ object_id=obj.id,
68
+ detail=(
69
+ f'Value for {internal_field} must be a valid decimal in the'
70
+ f' format required by ENA (e.g. 12.3456). '
71
+ f'See ENA checklist for accepted format.',
72
+ ),
73
+ field=[internal_field]
74
+ )
75
+ else:
76
+ self.add_error(
77
+ object_id=obj.id,
78
+ detail=(
79
+ f'Value for {internal_field} must match the required pattern.'
80
+ ),
81
+ field=[internal_field]
82
+ )
62
83
 
63
- # Check against allowed values
64
84
  if 'text choice' in validation and key in obj.attributes:
65
85
  for condition in validation:
66
86
  if isinstance(condition, list):
@@ -69,5 +89,5 @@ class EnaChecklistValidator(Validator):
69
89
  [x.lower() for x in allowed_values]:
70
90
  self.add_error(
71
91
  object_id=obj.id,
72
- detail='Must be in allowed values', field=[field_name]
92
+ detail='Must be in allowed values', field=[internal_field]
73
93
  )
@@ -53,7 +53,7 @@ class SpecimensHaveSameTaxonValidator(Validator):
53
53
  if specimen_id in self.__seen and taxon_id != self.__seen[specimen_id]:
54
54
  self.add_error(
55
55
  object_id=obj.id,
56
- detail='A non-symbiont must have a matching Specimen ID and Taxon ID',
56
+ detail='All samples from the same specimen_ID must have the same TAXON_ID.',
57
57
  field=self.__config.specimen_id_field,
58
58
  )
59
59
  if specimen_id not in self.__seen:
@@ -55,12 +55,19 @@ class TypesValidator(Validator):
55
55
  continue
56
56
  type_class = type_map.get(expected_type)
57
57
  if type_class and not isinstance(actual_value, type_class):
58
- self.__add_result(
59
- obj,
60
- key,
61
- detail=f'Field {key} value "{actual_value}" is not of type '
62
- f'"{expected_type}"',
63
- )
58
+ if expected_type == 'time':
59
+ self.__add_result(
60
+ obj,
61
+ key,
62
+ detail='Only HH:MM format is accepted.',
63
+ )
64
+ else:
65
+ self.__add_result(
66
+ obj,
67
+ key,
68
+ detail=f'Field {key} value "{actual_value}" is not of type '
69
+ f'"{expected_type}"',
70
+ )
64
71
  if type_class and isinstance(actual_value, type_class):
65
72
  # Special case for bool since isinstance(True, int) is True
66
73
  if expected_type == 'int' and isinstance(actual_value, bool):
@@ -26,11 +26,12 @@ class ValueCheckValidator(Validator):
26
26
  self.__config = config
27
27
 
28
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:
29
+ if obj.attributes.get(self.__config.field) != self.__config.value:
32
30
  self.add_error(
33
31
  object_id=obj.id,
34
- detail=f'{self.__config.value} is detected',
32
+ detail=(
33
+ f"Expected '{self.__config.value}' for field "
34
+ f"'{self.__config.field}', but got '{obj.attributes.get(self.__config.field)}'"
35
+ ),
35
36
  field=self.__config.field,
36
37
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tol-sdk
3
- Version: 1.8.4
3
+ Version: 1.8.5
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
@@ -203,6 +203,7 @@ src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py
203
203
  src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py
204
204
  src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py
205
205
  src/tol/flows/converters/sts_species_to_elastic_species_converter.py
206
+ src/tol/flows/converters/time_string_to_time.py
206
207
  src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py
207
208
  src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py
208
209
  src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.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