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.
- {tol_sdk-1.8.4/src/tol_sdk.egg-info → tol_sdk-1.8.5}/PKG-INFO +1 -1
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/pyproject.toml +1 -1
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/view.py +1 -1
- tol_sdk-1.8.5/src/tol/flows/converters/time_string_to_time.py +35 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/ena_checklist.py +29 -9
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/specimens_have_same_taxon.py +1 -1
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/types.py +13 -6
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/value_check.py +5 -4
- {tol_sdk-1.8.4 → tol_sdk-1.8.5/src/tol_sdk.egg-info}/PKG-INFO +1 -1
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/SOURCES.txt +1 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/LICENSE +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/MANIFEST.in +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/README.md +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/setup.cfg +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/certs/cacert.pem +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/actions/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/actions/action.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/actions/upsert_action.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/action.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/abc/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/abc/auth.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/abc/authorisation.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/asserts.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/blueprint.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/composite.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/config.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/auth/error.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/blueprint.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/controller.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/data_upload.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/aggregation_body.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/auth_context.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/authenticate.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/data_body.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/filter_utils.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/list_get_parameters.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/relation_url.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/misc/stats_parameters.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/pipeline_steps.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_base/system.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/api_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/exception.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/api_client/validate.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/barcodes/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/barcodes/main.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/benchling_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/benchling_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/benchling_warehouse_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_containers_dna.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_dna.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sample.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/tissue_prep.sql +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/board/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/board/blueprint.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/bold_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/bold/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/cli/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/cli/cli.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/yaml/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/yaml/model.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/converter/yaml/yaml_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/copo_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/copo/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/attribute_metadata.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/core_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_loader.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_object.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_object_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_source_attribute_metadata.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/data_source_dict.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource_error.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource_filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/datasource_utils.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/http_client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/_filterable.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/_writer.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/aggregator.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/counter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/cursor.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/declare.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/deleter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/detail_getter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/enricher.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/enum.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/group_statter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/inserter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/list_getter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/operator_config.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/page_getter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/relational.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/statter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/summariser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/updater.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/operator/upserter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/relationship.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/requested_fields.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/session.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/core/validate.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/elastic/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/elastic/elastic_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/elastic/runtime_fields.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/auth.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/eln_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/entities.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/generators.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/eln/sanitise.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/ena_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/ena_methods.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/ena/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/excel.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/excel_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/excel/s3_factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/auto_detect_manifest_type_converter.py +0 -0
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
- {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
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +0 -0
- {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
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
- {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
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +0 -0
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
- {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
- {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
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/skip_null_fields_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/logger.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/secrets.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/flows/sequencing_submissions.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/gap/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/gap/gap_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/goat_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/goat/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/google_sheets/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/irods/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/irods/irods_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/jira_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/mapper.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/jira/sort.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/json/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/json/json_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/json/s3_json_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/labwhere_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/labwhere/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/markdown.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/mlwh/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/mlwh/mlwh_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/prefect_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/prefect/prefect_object.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/parser.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/s3/s3_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/configuration.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/consumer.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/message_builder.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/messages.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/response_processors.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sciops/sequencing_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/services/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/services/s3_client.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/benchling.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/benchling_warehouse.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan_extra.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan_image.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bioscan_qc.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/bold.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/copo.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/defaults.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/elastic.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/ena.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/gap.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/genome_notes.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/goat.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/grit.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/informatics.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/labwhere.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/mlwh.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/portal.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/portal_attributes.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/portaldb.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/prefect.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/sciops.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/sts.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/sts_legacy.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/tolid.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/tolqc.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/tolqc_legacy.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/treeofsex.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/uksi_qc.py.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sources/workflows.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/action/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/action/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/auth/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/auth/blueprint.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/auth/models.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/cast.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/database.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/ds_session.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/exception.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/ext.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/filter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/model.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/pipeline_step/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/pipeline_step/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/relationship.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/session.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/sort.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/sql_converter.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/sql_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/standard/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sql/standard/factory.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/status/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/status/status_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/sts.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/sts_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/sts/sts_requests.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/treeval/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/treeval/treeval_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/utils/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/utils/csv.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/utils/s3.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/allowed_keys.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/allowed_values.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/allowed_values_from_datasource.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/assert_on_condition.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/branching.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/converter_and_validate.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/date_sorting.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/ena_submittable.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/interfaces/__init__.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/interfaces/condition_evaluator.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/min_one_valid_value.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/mutually_exclusive.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/regex.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/regex_by_value.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/sts_fields.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/tolid.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/unique_value_check.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/unique_values.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/validators/unique_whole_organisms.py +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/entry_points.txt +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/requires.txt +0 -0
- {tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol_sdk.egg-info/top_level.txt +0 -0
|
@@ -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=[
|
|
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=[
|
|
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=[
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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=[
|
|
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='
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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=
|
|
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
|
)
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql
RENAMED
|
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
|
{tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tol_sdk-1.8.4 → tol_sdk-1.8.5}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|