tol-sdk 1.8.6__tar.gz → 1.8.8__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.6/src/tol_sdk.egg-info → tol_sdk-1.8.8}/PKG-INFO +1 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/pyproject.toml +1 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/api_datasource.py +1 -14
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/client.py +5 -3
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/factory.py +8 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/benchling_warehouse_datasource.py +6 -3
- tol_sdk-1.8.6/src/tol/benchling/sql/extraction_containers_dna.sql → tol_sdk-1.8.8/src/tol/benchling/sql/extraction_container_extraction_extraction_type_dna.sql +25 -23
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +8 -8
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/factory.py +1 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/requested_fields.py +6 -6
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/__init__.py +1 -0
- tol_sdk-1.8.8/src/tol/flows/converters/benchling_extraction_container_to_elastic_extraction_container_converter.py +53 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +8 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sequencing_request_to_elastic_run_data_update_converter.py +8 -0
- tol_sdk-1.8.8/src/tol/flows/converters/time_string_to_time.py +44 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/allowed_values_from_datasource.py +1 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/tolid.py +1 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8/src/tol_sdk.egg-info}/PKG-INFO +1 -1
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol_sdk.egg-info/SOURCES.txt +2 -1
- tol_sdk-1.8.6/src/tol/flows/converters/time_string_to_time.py +0 -35
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/LICENSE +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/MANIFEST.in +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/README.md +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/setup.cfg +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/certs/cacert.pem +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/actions/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/actions/action.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/actions/upsert_action.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/action.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/abc/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/abc/auth.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/abc/authorisation.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/asserts.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/blueprint.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/composite.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/config.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/auth/error.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/blueprint.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/controller.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/data_upload.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/aggregation_body.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/auth_context.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/authenticate.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/data_body.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/filter_utils.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/list_get_parameters.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/relation_url.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/misc/stats_parameters.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/pipeline_steps.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_base/system.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/exception.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/validate.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/api_client/view.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/barcodes/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/barcodes/main.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/benchling_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/benchling_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/extraction_extraction_type_dna.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/sample.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/benchling/sql/tissue_prep.sql +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/board/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/board/blueprint.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/bold/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/bold/bold_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/bold/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/bold/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/bold/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/bold/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/cli/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/cli/cli.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/converter/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/converter/yaml/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/converter/yaml/model.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/converter/yaml/yaml_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/copo/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/copo/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/copo/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/copo/copo_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/copo/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/copo/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/attribute_metadata.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/core_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/data_loader.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/data_object.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/data_object_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/data_source_attribute_metadata.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/data_source_dict.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/datasource_error.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/datasource_filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/datasource_utils.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/http_client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/_filterable.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/_writer.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/aggregator.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/counter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/cursor.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/declare.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/deleter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/detail_getter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/enricher.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/enum.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/group_statter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/inserter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/list_getter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/operator_config.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/page_getter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/relational.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/statter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/summariser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/updater.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/operator/upserter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/relationship.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/session.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/core/validate.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/dummy/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/dummy/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/dummy/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/dummy/dummy_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/dummy/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/dummy/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/elastic/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/elastic/elastic_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/elastic/runtime_fields.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/eln/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/eln/auth.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/eln/eln_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/eln/entities.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/eln/generators.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/eln/sanitise.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/ena_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/ena_methods.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/ena/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/excel/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/excel/excel.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/excel/excel_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/excel/s3_factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/auto_detect_manifest_type_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_tissue_prep_to_elastic_tissue_prep_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/bioscan_extra_pantheon_species_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/bioscan_qc_specimen_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/bioscan_qc_uksi_entry_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/combine_fields_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/default_field_value_if_missing_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sample_to_elastic_sequencing_request_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_sequencing_request_to_sts_sequencing_request_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_tolid_to_elastic_genome_note_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/genome_notes_genome_note_to_elastic_genome_note_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/incoming_sample_to_incoming_sample_with_lists_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/mlwh_run_data_to_elastic_run_data_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/mlwh_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/prefix_field_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/skip_null_fields_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/logger.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/secrets.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/flows/sequencing_submissions.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/gap/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/gap/gap_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/goat_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/goat/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/google_sheets/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/irods/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/irods/irods_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/jira_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/mapper.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/jira/sort.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/json/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/json/json_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/json/s3_json_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/labwhere/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/labwhere/client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/labwhere/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/labwhere/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/labwhere/labwhere_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/labwhere/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/markdown.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/mlwh/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/mlwh/mlwh_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/prefect/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/prefect/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/prefect/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/prefect/filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/prefect/prefect_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/prefect/prefect_object.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/s3/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/s3/converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/s3/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/s3/parser.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/s3/s3_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/configuration.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/consumer.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/message_builder.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/messages.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/response_processors.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sciops/sequencing_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/services/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/services/s3_client.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/benchling.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/benchling_warehouse.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/bioscan.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/bioscan_extra.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/bioscan_image.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/bioscan_qc.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/bold.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/copo.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/defaults.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/dummy.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/elastic.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/ena.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/gap.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/genome_notes.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/goat.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/grit.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/informatics.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/labwhere.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/mlwh.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/portal.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/portal_attributes.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/portaldb.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/prefect.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/sciops.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/sts.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/sts_legacy.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/tolid.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/tolqc.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/tolqc_legacy.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/treeofsex.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/uksi_qc.py.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sources/workflows.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/action/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/action/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/auth/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/auth/blueprint.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/auth/models.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/cast.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/database.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/ds_session.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/exception.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/ext.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/filter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/model.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/pipeline_step/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/pipeline_step/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/relationship.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/session.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/sort.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/sql_converter.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/sql_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/standard/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sql/standard/factory.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/status/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/status/status_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sts/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sts/sts.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sts/sts_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/sts/sts_requests.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/treeval/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/treeval/treeval_datasource.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/utils/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/utils/csv.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/utils/s3.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/allowed_keys.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/allowed_values.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/assert_on_condition.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/branching.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/converter_and_validate.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/date_sorting.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/ena_checklist.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/ena_submittable.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/interfaces/__init__.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/interfaces/condition_evaluator.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/min_one_valid_value.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/mutually_exclusive.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/regex.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/regex_by_value.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/specimens_have_same_taxon.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/sts_fields.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/types.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/unique_value_check.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/unique_values.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/unique_whole_organisms.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol/validators/value_check.py +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol_sdk.egg-info/entry_points.txt +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol_sdk.egg-info/requires.txt +0 -0
- {tol_sdk-1.8.6 → tol_sdk-1.8.8}/src/tol_sdk.egg-info/top_level.txt +0 -0
|
@@ -134,28 +134,17 @@ class ApiDataSource(
|
|
|
134
134
|
for k, v in transfer.items()
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
+
@requested_fields_to_tree
|
|
137
138
|
@validate('detailGet')
|
|
138
139
|
def get_by_id(
|
|
139
140
|
self,
|
|
140
141
|
object_type: str,
|
|
141
142
|
object_ids: Iterable[str],
|
|
142
143
|
session: Optional[OperableSession] = None,
|
|
143
|
-
requested_fields: list[str] | None = None,
|
|
144
144
|
requested_tree: ReqFieldsTree | None = None,
|
|
145
145
|
) -> Iterable[Optional[DataObject]]:
|
|
146
146
|
|
|
147
147
|
client = self.__client_factory()
|
|
148
|
-
# This would be better handled in the decorator but there is a slight
|
|
149
|
-
# difference in handling here with the requested_tree when requested_fields is None
|
|
150
|
-
requested_tree = (
|
|
151
|
-
ReqFieldsTree(
|
|
152
|
-
object_type,
|
|
153
|
-
self,
|
|
154
|
-
requested_fields=requested_fields,
|
|
155
|
-
)
|
|
156
|
-
if object_type
|
|
157
|
-
else None
|
|
158
|
-
)
|
|
159
148
|
|
|
160
149
|
json_responses = (
|
|
161
150
|
client.get_detail(
|
|
@@ -182,7 +171,6 @@ class ApiDataSource(
|
|
|
182
171
|
object_filters: Optional[DataSourceFilter] = None,
|
|
183
172
|
sort_by: Optional[str] = None,
|
|
184
173
|
session: Optional[OperableSession] = None,
|
|
185
|
-
requested_fields: list[str] | None = None,
|
|
186
174
|
requested_tree: ReqFieldsTree | None = None,
|
|
187
175
|
) -> tuple[Iterable[DataObject], int]:
|
|
188
176
|
|
|
@@ -204,7 +192,6 @@ class ApiDataSource(
|
|
|
204
192
|
object_type: str,
|
|
205
193
|
object_filters: Optional[DataSourceFilter] = None,
|
|
206
194
|
session: Optional[OperableSession] = None,
|
|
207
|
-
requested_fields: list[str] | None = None,
|
|
208
195
|
requested_tree: ReqFieldsTree | None = None,
|
|
209
196
|
) -> Iterable[DataObject]:
|
|
210
197
|
if self.__can_cursor(object_type, object_filters):
|
|
@@ -54,11 +54,13 @@ class JsonApiClient(HttpClient):
|
|
|
54
54
|
url = self.__detail_url(object_type, object_id)
|
|
55
55
|
headers = self._merge_headers()
|
|
56
56
|
|
|
57
|
+
params = {}
|
|
58
|
+
if requested_tree:
|
|
59
|
+
params['requested_fields'] = requested_tree.to_paths()
|
|
60
|
+
|
|
57
61
|
return self.__fetch_detail(
|
|
58
62
|
url,
|
|
59
|
-
params=
|
|
60
|
-
'requested_fields': requested_tree.to_paths() if requested_tree else None,
|
|
61
|
-
},
|
|
63
|
+
params=params,
|
|
62
64
|
headers=headers,
|
|
63
65
|
)
|
|
64
66
|
|
|
@@ -64,6 +64,14 @@ class _ConverterFactory:
|
|
|
64
64
|
"""
|
|
65
65
|
Returns an instantiated `JsonApiConverter`.
|
|
66
66
|
"""
|
|
67
|
+
|
|
68
|
+
# If we're going to parse a JSON:API data object (i.e. we have been
|
|
69
|
+
# passed an `object_type`), we need to add a ReqFieldsTree so that
|
|
70
|
+
# DataSources with default loading of to-one objects correctly
|
|
71
|
+
# process the to-ones from the `included` array.
|
|
72
|
+
if object_type and not requested_tree:
|
|
73
|
+
requested_tree = ReqFieldsTree(object_type, self.__data_source)
|
|
74
|
+
|
|
67
75
|
parser = DefaultParser(self.__ds_dict, requested_tree)
|
|
68
76
|
return JsonApiConverter(parser)
|
|
69
77
|
|
|
@@ -45,6 +45,7 @@ class BenchlingWarehouseDataSource(DataSource, ListGetter):
|
|
|
45
45
|
'sample': 'sts_id',
|
|
46
46
|
'sequencing_request': 'sanger_sample_id',
|
|
47
47
|
'extraction': 'extraction_id',
|
|
48
|
+
'extraction_container': 'fluidx_container_id',
|
|
48
49
|
'tissue_prep': 'eln_tissue_prep_id'
|
|
49
50
|
}
|
|
50
51
|
|
|
@@ -70,7 +71,7 @@ class BenchlingWarehouseDataSource(DataSource, ListGetter):
|
|
|
70
71
|
yield self.data_object_factory(
|
|
71
72
|
object_type,
|
|
72
73
|
id_=obj[id_col],
|
|
73
|
-
attributes=obj
|
|
74
|
+
attributes={k: v for k, v in obj.items() if k != id_col}
|
|
74
75
|
)
|
|
75
76
|
|
|
76
77
|
def get_list(
|
|
@@ -82,7 +83,9 @@ class BenchlingWarehouseDataSource(DataSource, ListGetter):
|
|
|
82
83
|
file_suffix = ''
|
|
83
84
|
if object_filters is not None:
|
|
84
85
|
if isinstance(object_filters.and_, dict):
|
|
85
|
-
for field_name in [
|
|
86
|
+
for field_name in [
|
|
87
|
+
'sequencing_platform', 'extraction_type', 'extraction.extraction_type'
|
|
88
|
+
]:
|
|
86
89
|
if field_name in object_filters.and_:
|
|
87
90
|
# For an in_list, treat as multiple eq
|
|
88
91
|
if 'in_list' in object_filters.and_[field_name]:
|
|
@@ -101,7 +104,7 @@ class BenchlingWarehouseDataSource(DataSource, ListGetter):
|
|
|
101
104
|
) for val in object_filters.and_[field_name]['in_list']['value']
|
|
102
105
|
)
|
|
103
106
|
elif 'eq' in object_filters.and_[field_name]:
|
|
104
|
-
file_suffix = '_' + field_name + '_' \
|
|
107
|
+
file_suffix = '_' + field_name.replace('.', '_') + '_' \
|
|
105
108
|
+ object_filters.and_[field_name]['eq']['value']
|
|
106
109
|
else:
|
|
107
110
|
raise DataSourceError('Filtering only on sequencing platform and extraction '
|
|
@@ -9,28 +9,29 @@ Output: Table with columns:
|
|
|
9
9
|
|
|
10
10
|
1) taxon_id: [character] Tissue metadata. Origin: STS
|
|
11
11
|
2) eln_tissue_id: [character] Benchling ID for the tissue the extraction is derived from.
|
|
12
|
-
3)
|
|
13
|
-
4)
|
|
14
|
-
5)
|
|
15
|
-
6)
|
|
16
|
-
7)
|
|
17
|
-
8)
|
|
18
|
-
9)
|
|
19
|
-
10)
|
|
20
|
-
11)
|
|
21
|
-
12)
|
|
22
|
-
13)
|
|
23
|
-
14)
|
|
24
|
-
15)
|
|
25
|
-
16)
|
|
26
|
-
17)
|
|
27
|
-
18)
|
|
28
|
-
19)
|
|
29
|
-
20)
|
|
30
|
-
21)
|
|
31
|
-
22)
|
|
32
|
-
23)
|
|
33
|
-
24)
|
|
12
|
+
3) tissue_sts_id: [character] STS ID for the tissue the extraction is derived from.
|
|
13
|
+
4) eln_tissue_prep_id: [character] Benchling ID for the tissue prep the extraction is derived from.
|
|
14
|
+
5) extraction_id: [character] DNA extraction entity ID (Benchling).
|
|
15
|
+
6) programme_id: [character] ToLID. Origin: BWH.
|
|
16
|
+
7) specimen_id: [character] Specimen ID. Origin: STS.
|
|
17
|
+
8) creation_date: [date] Date the container was created.
|
|
18
|
+
9) fluidx_container_id: [character] Primary key for the FluidX container.
|
|
19
|
+
10) fluidx_id: [character] FluidX barcode.
|
|
20
|
+
11) tube_type: [character] Type of tube/container.
|
|
21
|
+
12) volume_ul: [numeric] Volume in microliters (0 if archived as 'Retired' or 'Expended').
|
|
22
|
+
13) location: [character] Storage location name.
|
|
23
|
+
14) rack: [character] Box/rack barcode.
|
|
24
|
+
15) archive_purpose: [character] Reason for archiving the DNA extraction.
|
|
25
|
+
16) nanodrop_concentration_ngul: [numeric] Latest Nanodrop concentration (ng/µL).
|
|
26
|
+
17) dna_260_280_ratio: [numeric] Latest Nanodrop 260/280 ratio.
|
|
27
|
+
18) dna_260_230_ratio: [numeric] Latest Nanodrop 260/230 ratio.
|
|
28
|
+
19) qubit_concentration_ngul: [numeric] Latest Qubit concentration (ng/µL).
|
|
29
|
+
20) yield_ng: [numeric] Latest yield (ng).
|
|
30
|
+
21) femto_date_code: [character] Latest Femto date code.
|
|
31
|
+
22) femto_description: [character] Latest Femto profile description.
|
|
32
|
+
23) gqn_index: [numeric] Latest GQN index from Femto.
|
|
33
|
+
24) next_step: [character] Latest decision making next step.
|
|
34
|
+
25) extraction_qc_result: [character] Latest extraction QC result.
|
|
34
35
|
|
|
35
36
|
NOTES:
|
|
36
37
|
1) Only extractions from the 'ToL Core Lab' project and relevant folders are included.
|
|
@@ -109,6 +110,7 @@ latest_decision_making AS (
|
|
|
109
110
|
SELECT DISTINCT
|
|
110
111
|
t.taxon_id,
|
|
111
112
|
t.id AS eln_tissue_id,
|
|
113
|
+
t.sts_id AS tissue_sts_id,
|
|
112
114
|
tp.id AS eln_tissue_prep_id,
|
|
113
115
|
dna.id AS extraction_id,
|
|
114
116
|
t.programme_id,
|
|
@@ -170,4 +172,4 @@ LEFT JOIN entry$raw AS ent
|
|
|
170
172
|
WHERE proj.name = 'ToL Core Lab'
|
|
171
173
|
AND (f.name IN ('Routine Throughput', 'DNA', 'Core Lab Entities', 'Benchling MS Project Move') OR f.name IS NULL)
|
|
172
174
|
AND (con.archive_purpose$ != ('Made in error') OR con.archive_purpose$ IS NULL)
|
|
173
|
-
AND ent.name NOT LIKE '%Nuclei isolation and tagmentation%'
|
|
175
|
+
AND COALESCE(ent.name, '') NOT LIKE '%Nuclei isolation and tagmentation%'
|
|
@@ -24,7 +24,7 @@ Output: Table with cols:
|
|
|
24
24
|
4) eln_file_registry_id: [character] id in Benchling Registry. Origin: BWH
|
|
25
25
|
5) extraction_id: [character] Original DNA extract entity name. For pooled samples, the first DNA extract pooled. Origin: BWH
|
|
26
26
|
6) submission_sample_name: [character] Entity name. Origin: BWH
|
|
27
|
-
7)
|
|
27
|
+
7) fluidx_container_id: [character] Container id of the DNA fluidx tube. Origin: BWH
|
|
28
28
|
8) programme_id: [character] ToLID. Origin: BWH
|
|
29
29
|
9) specimen_id: [character] Specimen ID. Origin: STS
|
|
30
30
|
10) tube_name: [character] Name of the submission tube/container.
|
|
@@ -73,7 +73,7 @@ pacbio_submissions_container_routine AS (
|
|
|
73
73
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
74
74
|
subsam.original_dna_extract AS extraction_id,
|
|
75
75
|
subsam.name$ AS submission_sample_name,
|
|
76
|
-
c_dna.
|
|
76
|
+
c_dna.id AS fluidx_container_id,
|
|
77
77
|
t.programme_id,
|
|
78
78
|
t.specimen_id,
|
|
79
79
|
con.name AS tube_name,
|
|
@@ -145,7 +145,7 @@ pacbio_submissions_container_pooled AS (
|
|
|
145
145
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
146
146
|
subsam.pooled_sample AS extraction_id,
|
|
147
147
|
subsam.name$ AS eln_submission_sample_name,
|
|
148
|
-
c_pool.
|
|
148
|
+
c_pool.id AS fluidx_container_id,
|
|
149
149
|
t.programme_id,
|
|
150
150
|
t.specimen_id,
|
|
151
151
|
con.name AS tube_name,
|
|
@@ -219,7 +219,7 @@ pacbio_submissions_container_legacy_deprecated AS (
|
|
|
219
219
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
220
220
|
subsam.original_dna_extract AS extraction_id,
|
|
221
221
|
subsam.name$ AS submission_sample_name,
|
|
222
|
-
c_dna.
|
|
222
|
+
c_dna.id AS fluidx_container_id,
|
|
223
223
|
t.programme_id,
|
|
224
224
|
t.specimen_id,
|
|
225
225
|
con.name AS tube_name,
|
|
@@ -283,7 +283,7 @@ pacbio_submissions_plate_automated_manifest AS (
|
|
|
283
283
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
284
284
|
subsam.originaL_dna_extract AS extraction_id,
|
|
285
285
|
subsam.name$ AS submission_sample_name,
|
|
286
|
-
c_dna.
|
|
286
|
+
c_dna.id AS fluidx_container_id,
|
|
287
287
|
t.programme_id,
|
|
288
288
|
t.specimen_id,
|
|
289
289
|
con.name AS tube_name,
|
|
@@ -350,7 +350,7 @@ pacbio_submissions_plate_automated_manifest_pooled AS (
|
|
|
350
350
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
351
351
|
subsam.pooled_sample AS extraction_id,
|
|
352
352
|
subsam.name$ AS submission_sample_name,
|
|
353
|
-
c_pool.
|
|
353
|
+
c_pool.id AS fluidx_container_id,
|
|
354
354
|
t.programme_id,
|
|
355
355
|
t.specimen_id,
|
|
356
356
|
con.name AS tube_name,
|
|
@@ -415,7 +415,7 @@ pacbio_submissions_plate_routine AS (
|
|
|
415
415
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
416
416
|
subsam.original_dna_extract AS extraction_id,
|
|
417
417
|
subsam.name$ AS submission_sample_name,
|
|
418
|
-
c_dna.
|
|
418
|
+
c_dna.id AS fluidx_container_id,
|
|
419
419
|
t.programme_id,
|
|
420
420
|
t.specimen_id,
|
|
421
421
|
c_subsam.name AS tube_name,
|
|
@@ -485,7 +485,7 @@ pacbio_submissions_plate_routine_pooled AS (
|
|
|
485
485
|
subsam.file_registry_id$ AS eln_file_registry_id,
|
|
486
486
|
subsam.pooled_sample AS extraction_id,
|
|
487
487
|
subsam.name$ AS submission_sample_name,
|
|
488
|
-
c_pool.
|
|
488
|
+
c_pool.id AS fluidx_container_id,
|
|
489
489
|
t.programme_id,
|
|
490
490
|
t.specimen_id,
|
|
491
491
|
c_subsam.name AS tube_name,
|
|
@@ -189,7 +189,7 @@ def core_data_object(
|
|
|
189
189
|
if object_from_datasource is not None:
|
|
190
190
|
self.__type = object_from_datasource.type
|
|
191
191
|
self.__attributes = object_from_datasource.attributes
|
|
192
|
-
self.__to_one_objects = object_from_datasource.
|
|
192
|
+
self.__to_one_objects = object_from_datasource._to_one_objects
|
|
193
193
|
break
|
|
194
194
|
|
|
195
195
|
@property
|
|
@@ -17,17 +17,17 @@ def requested_fields_to_tree(func):
|
|
|
17
17
|
`requested_tree` object has not been given.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
def wrapper(self,
|
|
20
|
+
def wrapper(self, object_type, *args, **kwargs):
|
|
21
21
|
if 'requested_fields' in kwargs:
|
|
22
22
|
if 'requested_tree' in kwargs:
|
|
23
23
|
msg = 'Both requested_fields and requested_tree arguments given'
|
|
24
24
|
raise TypeError(msg)
|
|
25
25
|
flds = kwargs.pop('requested_fields')
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
if flds and object_type:
|
|
27
|
+
kwargs['requested_tree'] = ReqFieldsTree(
|
|
28
|
+
object_type, self, requested_fields=flds
|
|
29
|
+
)
|
|
30
|
+
return func(self, object_type, *args, **kwargs)
|
|
31
31
|
return wrapper
|
|
32
32
|
|
|
33
33
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# SPDX-License-Identifier: MIT
|
|
4
4
|
|
|
5
|
+
from .benchling_extraction_container_to_elastic_extraction_container_converter import BenchlingExtractionContainerToElasticExtractionContainerConverter # noqa F401
|
|
5
6
|
from .benchling_extraction_to_elastic_extraction_converter import BenchlingExtractionToElasticExtractionConverter # noqa F401
|
|
6
7
|
from .benchling_extraction_to_elastic_sequencing_request_converter import BenchlingExtractionToElasticSequencingRequestConverter # noqa F401
|
|
7
8
|
from .benchling_sequencing_request_to_elastic_sequencing_request_converter import ( # noqa F401
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 Genome Research Ltd.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
|
|
5
|
+
from typing import Iterable
|
|
6
|
+
|
|
7
|
+
from ...core import (
|
|
8
|
+
DataObject,
|
|
9
|
+
DataObjectToDataObjectOrUpdateConverter
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class BenchlingExtractionContainerToElasticExtractionContainerConverter(
|
|
14
|
+
DataObjectToDataObjectOrUpdateConverter):
|
|
15
|
+
def convert(self, data_object: DataObject) -> Iterable[DataObject]:
|
|
16
|
+
if data_object.tissue_sts_id is not None:
|
|
17
|
+
ret = self._data_object_factory(
|
|
18
|
+
'extraction_container',
|
|
19
|
+
data_object.id,
|
|
20
|
+
attributes={
|
|
21
|
+
**{k: v
|
|
22
|
+
for k, v in data_object.attributes.items()
|
|
23
|
+
if k not in ['tissue_sts_id', 'specimen_id', 'taxon_id',
|
|
24
|
+
'programme_id', 'eln_tissue_prep_id', 'extraction_id']}
|
|
25
|
+
},
|
|
26
|
+
to_one={
|
|
27
|
+
'sample': self._data_object_factory(
|
|
28
|
+
'sample',
|
|
29
|
+
data_object.tissue_sts_id
|
|
30
|
+
) if data_object.tissue_sts_id is not None else None,
|
|
31
|
+
'species': self._data_object_factory(
|
|
32
|
+
'species',
|
|
33
|
+
data_object.taxon_id
|
|
34
|
+
) if data_object.taxon_id is not None else None,
|
|
35
|
+
'specimen': self._data_object_factory(
|
|
36
|
+
'specimen',
|
|
37
|
+
data_object.specimen_id
|
|
38
|
+
) if data_object.specimen_id is not None else None,
|
|
39
|
+
'tolid': self._data_object_factory(
|
|
40
|
+
'tolid',
|
|
41
|
+
data_object.programme_id
|
|
42
|
+
) if data_object.programme_id is not None else None,
|
|
43
|
+
'tissue_prep': self._data_object_factory(
|
|
44
|
+
'tissue_prep',
|
|
45
|
+
data_object.eln_tissue_prep_id
|
|
46
|
+
) if data_object.eln_tissue_prep_id is not None else None,
|
|
47
|
+
'extraction': self._data_object_factory(
|
|
48
|
+
'extraction',
|
|
49
|
+
data_object.extraction_id
|
|
50
|
+
) if data_object.extraction_id is not None else None,
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
yield ret
|
|
@@ -15,12 +15,18 @@ class BenchlingSequencingRequestToElasticSequencingRequestConverter(
|
|
|
15
15
|
def convert(self, data_object: DataObject) -> Iterable[DataObject]:
|
|
16
16
|
if data_object.sts_id is not None:
|
|
17
17
|
extraction = None
|
|
18
|
+
extraction_container = None
|
|
18
19
|
tissue_prep = None
|
|
19
20
|
if 'extraction_id' in data_object.attributes:
|
|
20
21
|
extraction = self._data_object_factory(
|
|
21
22
|
'extraction',
|
|
22
23
|
data_object.extraction_id
|
|
23
24
|
)
|
|
25
|
+
if 'fluidx_container_id' in data_object.attributes:
|
|
26
|
+
extraction_container = self._data_object_factory(
|
|
27
|
+
'extraction_container',
|
|
28
|
+
data_object.fluidx_container_id
|
|
29
|
+
)
|
|
24
30
|
if 'tissue_prep_id' in data_object.attributes:
|
|
25
31
|
tissue_prep = self._data_object_factory(
|
|
26
32
|
'tissue_prep',
|
|
@@ -34,7 +40,7 @@ class BenchlingSequencingRequestToElasticSequencingRequestConverter(
|
|
|
34
40
|
for k, v in data_object.attributes.items()
|
|
35
41
|
if k not in ['sanger_sample_id', 'sts_id',
|
|
36
42
|
'specimen_id', 'taxon_id', 'extraction_id',
|
|
37
|
-
'programme_id', 'tissue_prep_id']}
|
|
43
|
+
'programme_id', 'tissue_prep_id', 'fluidx_container_id']}
|
|
38
44
|
},
|
|
39
45
|
to_one={
|
|
40
46
|
'sample': self._data_object_factory(
|
|
@@ -54,6 +60,7 @@ class BenchlingSequencingRequestToElasticSequencingRequestConverter(
|
|
|
54
60
|
data_object.programme_id
|
|
55
61
|
) if data_object.programme_id is not None else None,
|
|
56
62
|
'extraction': extraction,
|
|
63
|
+
'extraction_container': extraction_container,
|
|
57
64
|
'tissue_prep': tissue_prep,
|
|
58
65
|
})
|
|
59
66
|
yield ret
|
|
@@ -29,5 +29,13 @@ class ElasticSequencingRequestToElasticRunDataUpdateConverter(
|
|
|
29
29
|
'extraction',
|
|
30
30
|
extraction.id
|
|
31
31
|
)
|
|
32
|
+
if 'benchling_extraction_container' in data_object.to_one_relationships:
|
|
33
|
+
extraction_container = \
|
|
34
|
+
data_object.to_one_relationships['benchling_extraction_container']
|
|
35
|
+
if extraction_container is not None:
|
|
36
|
+
to_ones['benchling_extraction_container'] = self._data_object_factory(
|
|
37
|
+
'extraction_container',
|
|
38
|
+
extraction_container.id
|
|
39
|
+
)
|
|
32
40
|
yield (None, to_ones | {
|
|
33
41
|
'mlwh_sequencing_request.id': data_object.id}) # The candidate key
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Genome Research Ltd.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from datetime import time
|
|
8
|
+
from typing import Iterable
|
|
9
|
+
|
|
10
|
+
from tol.core import DataObject, DataObjectToDataObjectOrUpdateConverter
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TimeStringToTimeConverter(DataObjectToDataObjectOrUpdateConverter):
|
|
14
|
+
|
|
15
|
+
@dataclass(slots=True, frozen=True, kw_only=True)
|
|
16
|
+
class Config:
|
|
17
|
+
field_names: list[str]
|
|
18
|
+
|
|
19
|
+
__slots__ = ['__config']
|
|
20
|
+
__config: Config
|
|
21
|
+
|
|
22
|
+
def __init__(self, data_object_factory, config: Config) -> None:
|
|
23
|
+
super().__init__(data_object_factory)
|
|
24
|
+
self.__config = config
|
|
25
|
+
self._data_object_factory = data_object_factory
|
|
26
|
+
|
|
27
|
+
def convert(self, data_object: DataObject) -> Iterable[DataObject]:
|
|
28
|
+
"""
|
|
29
|
+
Converts string fields representing time in HH:MM (24-hour) format to Python time objects.
|
|
30
|
+
If the string is not in HH:MM, tries to append ':00' and parse as HH:MM:SS.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
for field_name in self.__config.field_names:
|
|
34
|
+
value = data_object.attributes.get(field_name)
|
|
35
|
+
if isinstance(value, str):
|
|
36
|
+
match = re.match(r'^(\d{1,2}):(\d{2})(?::(\d{2}))?$', value)
|
|
37
|
+
if match:
|
|
38
|
+
h, m = int(match.group(1)), int(match.group(2))
|
|
39
|
+
s = int(match.group(3)) if match.group(3) else 0
|
|
40
|
+
try:
|
|
41
|
+
data_object.attributes[field_name] = time(h, m, s)
|
|
42
|
+
except ValueError:
|
|
43
|
+
pass
|
|
44
|
+
yield data_object
|
|
@@ -90,7 +90,7 @@ class TolidValidator(Validator):
|
|
|
90
90
|
f = DataSourceFilter()
|
|
91
91
|
f.and_ = {'specimen_id': {'eq': {'value': specimen_id}}}
|
|
92
92
|
self.__cached_tolids[specimen_id] = list(self.__datasource.get_list(
|
|
93
|
-
|
|
93
|
+
'specimen',
|
|
94
94
|
object_filters=f
|
|
95
95
|
))
|
|
96
96
|
|
|
@@ -52,7 +52,7 @@ src/tol/benchling/benchling_converter.py
|
|
|
52
52
|
src/tol/benchling/benchling_datasource.py
|
|
53
53
|
src/tol/benchling/benchling_warehouse_datasource.py
|
|
54
54
|
src/tol/benchling/sql/__init__.py
|
|
55
|
-
src/tol/benchling/sql/
|
|
55
|
+
src/tol/benchling/sql/extraction_container_extraction_extraction_type_dna.sql
|
|
56
56
|
src/tol/benchling/sql/extraction_extraction_type_dna.sql
|
|
57
57
|
src/tol/benchling/sql/extraction_extraction_type_lres.sql
|
|
58
58
|
src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql
|
|
@@ -163,6 +163,7 @@ src/tol/flows/sequencing_submissions.py
|
|
|
163
163
|
src/tol/flows/converters/__init__.py
|
|
164
164
|
src/tol/flows/converters/auto_detect_manifest_type_converter.py
|
|
165
165
|
src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py
|
|
166
|
+
src/tol/flows/converters/benchling_extraction_container_to_elastic_extraction_container_converter.py
|
|
166
167
|
src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py
|
|
167
168
|
src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py
|
|
168
169
|
src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py
|
|
@@ -1,35 +0,0 @@
|
|
|
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
|
|
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
|