tol-sdk 1.6.24__tar.gz → 1.8.1__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.6.24/src/tol_sdk.egg-info → tol_sdk-1.8.1}/PKG-INFO +10 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/README.md +1 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/pyproject.toml +13 -3
- {tol_sdk-1.6.24/src/tol/sql/loader → tol_sdk-1.8.1/src/tol/actions}/__init__.py +2 -2
- tol_sdk-1.8.1/src/tol/actions/action.py +31 -0
- tol_sdk-1.8.1/src/tol/actions/upsert_action.py +56 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/__init__.py +1 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/action.py +70 -21
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/abc/__init__.py +1 -0
- tol_sdk-1.8.1/src/tol/api_base/auth/abc/authorisation.py +51 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/asserts.py +5 -4
- tol_sdk-1.8.1/src/tol/api_base/auth/composite.py +801 -0
- tol_sdk-1.8.1/src/tol/api_base/blueprint.py +479 -0
- tol_sdk-1.8.1/src/tol/api_base/controller.py +709 -0
- tol_sdk-1.8.1/src/tol/api_base/data_upload.py +98 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/__init__.py +1 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/auth_context.py +36 -13
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/list_get_parameters.py +25 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/stats_parameters.py +1 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/pipeline_steps.py +12 -9
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/system.py +1 -3
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/api_datasource.py +30 -19
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/client.py +33 -13
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/converter.py +55 -55
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/exception.py +1 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/factory.py +34 -26
- tol_sdk-1.8.1/src/tol/api_client/parser.py +251 -0
- tol_sdk-1.8.1/src/tol/api_client/view.py +267 -0
- tol_sdk-1.6.24/src/tol/benchling/sql/extraction_extraction_type_dna.sql → tol_sdk-1.8.1/src/tol/benchling/sql/extraction_containers_dna.sql +54 -64
- tol_sdk-1.8.1/src/tol/benchling/sql/extraction_extraction_type_dna.sql +68 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/extraction_extraction_type_lres.sql +11 -3
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/sequencing_request_sequencing_platform_pacbio.sql +259 -94
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/bold/bold_datasource.py +3 -0
- tol_sdk-1.8.1/src/tol/bold/client.py +150 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/bold/converter.py +2 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/bold/factory.py +4 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/bold/parser.py +7 -3
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/cli/cli.py +224 -105
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/__init__.py +3 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/data_object.py +27 -9
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/data_object_converter.py +44 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/data_source_attribute_metadata.py +10 -13
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/datasource.py +3 -1
- tol_sdk-1.8.1/src/tol/core/datasource_utils.py +182 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/factory.py +51 -62
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/http_client.py +4 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/cursor.py +5 -3
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/detail_getter.py +8 -16
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/list_getter.py +3 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/page_getter.py +3 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/relational.py +9 -4
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/upserter.py +1 -0
- tol_sdk-1.8.1/src/tol/core/requested_fields.py +189 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/validate.py +1 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/elastic/elastic_datasource.py +21 -8
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/elastic/runtime_fields.py +4 -4
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/client.py +61 -10
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/ena_datasource.py +16 -10
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/ena_methods.py +33 -32
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/parser.py +15 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/excel/excel_datasource.py +9 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/__init__.py +6 -1
- tol_sdk-1.8.1/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +49 -0
- tol_sdk-1.8.1/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +50 -0
- tol_sdk-1.8.1/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +59 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/benchling_tissue_prep_to_elastic_tissue_prep_converter.py +14 -3
- tol_sdk-1.8.1/src/tol/flows/converters/bioscan_image_to_elastic_sample_update_converter.py +79 -0
- tol_sdk-1.8.1/src/tol/flows/converters/bold_bin_to_elastic_sample_update_converter.py +21 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_update_converter.py +2 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sample_to_elastic_sequencing_request_update_converter.py +4 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_tolid_to_elastic_genome_note_update_converter.py +4 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_tolid_to_elastic_sample_update_converter.py +4 -1
- tol_sdk-1.8.1/src/tol/flows/converters/incoming_sample_to_ena_sample_converter.py +155 -0
- tol_sdk-1.8.1/src/tol/flows/converters/incoming_sample_to_incoming_sample_with_lists_converter.py +46 -0
- tol_sdk-1.8.1/src/tol/flows/converters/skip_null_fields_converter.py +42 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_banked_sample_to_elastic_sample_converter.py +1 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_sample_project_to_elastic_sample_converter.py +3 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/tolqc_data_to_elastic_run_data_converter.py +6 -3
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/tolqc_species_to_elastic_species_converter.py +6 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/client.py +3 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/goat_datasource.py +3 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/parser.py +2 -1
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/mlwh/mlwh_datasource.py +3 -3
- tol_sdk-1.8.1/src/tol/s3/__init__.py +8 -0
- tol_sdk-1.8.1/src/tol/s3/converter.py +45 -0
- tol_sdk-1.8.1/src/tol/s3/factory.py +101 -0
- tol_sdk-1.8.1/src/tol/s3/parser.py +76 -0
- tol_sdk-1.8.1/src/tol/s3/s3_datasource.py +85 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/services/s3_client.py +13 -4
- tol_sdk-1.8.1/src/tol/sources/bioscan_image.py +24 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/bold.py +2 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/defaults.py +4 -0
- tol_sdk-1.8.1/src/tol/sources/elastic.py +38 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/sts.py +6 -2
- tol_sdk-1.8.1/src/tol/sql/auth/blueprint.py +723 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/auth/models.py +21 -12
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/database.py +98 -52
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/factory.py +6 -4
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/filter.py +22 -20
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/model.py +44 -39
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/pipeline_step/factory.py +2 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/relationship.py +1 -1
- tol_sdk-1.8.1/src/tol/sql/sql_converter.py +134 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/sql_datasource.py +90 -176
- {tol_sdk-1.6.24/src/tol/sql/board → tol_sdk-1.8.1/src/tol/sql/standard}/__init__.py +1 -1
- tol_sdk-1.8.1/src/tol/sql/standard/factory.py +602 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/utils/__init__.py +1 -0
- tol_sdk-1.8.1/src/tol/utils/s3.py +16 -0
- tol_sdk-1.8.1/src/tol/validators/__init__.py +22 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/validators/allowed_keys.py +18 -12
- tol_sdk-1.8.1/src/tol/validators/allowed_values.py +64 -0
- tol_sdk-1.8.1/src/tol/validators/allowed_values_from_datasource.py +90 -0
- tol_sdk-1.8.1/src/tol/validators/assert_on_condition.py +56 -0
- tol_sdk-1.8.1/src/tol/validators/converter_and_validate.py +93 -0
- tol_sdk-1.8.1/src/tol/validators/ena_checklist.py +73 -0
- tol_sdk-1.8.1/src/tol/validators/ena_submittable.py +62 -0
- tol_sdk-1.8.1/src/tol/validators/interfaces/__init__.py +5 -0
- tol_sdk-1.8.1/src/tol/validators/interfaces/condition_evaluator.py +102 -0
- tol_sdk-1.8.1/src/tol/validators/min_one_valid_value.py +56 -0
- tol_sdk-1.8.1/src/tol/validators/mutually_exclusive.py +111 -0
- tol_sdk-1.6.24/src/tol/validators/allowed_values.py → tol_sdk-1.8.1/src/tol/validators/regex.py +42 -28
- tol_sdk-1.8.1/src/tol/validators/regex_by_value.py +100 -0
- tol_sdk-1.8.1/src/tol/validators/specimens_have_same_taxon.py +60 -0
- tol_sdk-1.8.1/src/tol/validators/sts_fields.py +229 -0
- tol_sdk-1.8.1/src/tol/validators/tolid.py +111 -0
- tol_sdk-1.8.1/src/tol/validators/types.py +90 -0
- tol_sdk-1.8.1/src/tol/validators/unique_values.py +109 -0
- tol_sdk-1.8.1/src/tol/validators/unique_whole_organisms.py +109 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1/src/tol_sdk.egg-info}/PKG-INFO +10 -2
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol_sdk.egg-info/SOURCES.txt +37 -20
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol_sdk.egg-info/requires.txt +10 -1
- tol_sdk-1.6.24/src/tol/api_base/auth/composite.py +0 -389
- tol_sdk-1.6.24/src/tol/api_base/blueprint.py +0 -348
- tol_sdk-1.6.24/src/tol/api_base/controller.py +0 -449
- tol_sdk-1.6.24/src/tol/api_client/parser.py +0 -211
- tol_sdk-1.6.24/src/tol/api_client/view.py +0 -322
- tol_sdk-1.6.24/src/tol/bold/client.py +0 -66
- tol_sdk-1.6.24/src/tol/core/datasource_utils.py +0 -100
- tol_sdk-1.6.24/src/tol/flows/convert_functions/__init__.py +0 -17
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_benchling_samples_to_data_object.py +0 -10
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_bioscan_barcoding_run_data_to_data_object.py +0 -9
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_bold_samples_to_data_object.py +0 -34
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_elastic_samples_to_barcoding_run_data.py +0 -16
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_portaldb_sequencing_request_events_to_sequencing_requests.py +0 -13
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_species_lab_work_status_to_data_object.py +0 -15
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_specimen_status_to_data_object.py +0 -15
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_to_data_objects.py +0 -9
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_tolid_species_to_data_object.py +0 -21
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_tolid_specimen_to_data_object.py +0 -14
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_tolqc_run_data_to_data_object.py +0 -29
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_tolqc_samples_to_data_object.py +0 -20
- tol_sdk-1.6.24/src/tol/flows/convert_functions/convert_treeofsex_species_to_data_object.py +0 -54
- tol_sdk-1.6.24/src/tol/flows/converters/benchling_extraction_to_elastic_extraction_converter.py +0 -30
- tol_sdk-1.6.24/src/tol/flows/converters/benchling_extraction_to_elastic_sequencing_request_converter.py +0 -29
- tol_sdk-1.6.24/src/tol/flows/converters/benchling_sequencing_request_to_elastic_sequencing_request_converter.py +0 -38
- tol_sdk-1.6.24/src/tol/sources/elastic.py +0 -1029
- tol_sdk-1.6.24/src/tol/sql/auth/blueprint.py +0 -442
- tol_sdk-1.6.24/src/tol/sql/board/factory.py +0 -341
- tol_sdk-1.6.24/src/tol/sql/loader/factory.py +0 -232
- tol_sdk-1.6.24/src/tol/sql/sql_converter.py +0 -221
- tol_sdk-1.6.24/src/tol/sql/summary/__init__.py +0 -6
- tol_sdk-1.6.24/src/tol/sql/summary/factory.py +0 -91
- tol_sdk-1.6.24/src/tol/validators/__init__.py +0 -7
- tol_sdk-1.6.24/src/tol/validators/unique_values.py +0 -72
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/LICENSE +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/MANIFEST.in +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/setup.cfg +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/certs/cacert.pem +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/abc/auth.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/blueprint.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/config.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/auth/error.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/aggregation_body.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/aggregation_parameters.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/authenticate.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/data_body.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/filter_utils.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_base/misc/relation_url.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/filter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/api_client/validate.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/barcodes/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/barcodes/main.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/benchling_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/benchling_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/benchling_warehouse_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/extraction_extraction_type_pooled_dna.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/extraction_extraction_type_rna.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/pacbio_prep.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/pooled_pacbio_prep.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/results_extraction_dna.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/results_extraction_pooled.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/results_extraction_rna.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/results_pacbio_prep.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/results_pacbio_prep_pooled.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/sample.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/sequencing_request_sequencing_platform_hic.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/sequencing_request_sequencing_platform_rnaseq.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/sequencing_request_sequencing_platform_wgs.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/benchling/sql/tissue_prep.sql +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/board/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/board/blueprint.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/bold/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/cli/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/converter/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/converter/yaml/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/converter/yaml/model.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/converter/yaml/yaml_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/copo/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/copo/client.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/copo/converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/copo/copo_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/copo/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/copo/parser.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/attribute_metadata.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/core_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/data_loader.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/data_source_dict.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/datasource_error.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/datasource_filter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/_filterable.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/_writer.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/aggregator.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/counter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/declare.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/deleter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/enricher.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/enum.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/group_statter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/inserter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/operator_config.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/statter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/summariser.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/operator/updater.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/relationship.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/core/session.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/elastic/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/eln/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/eln/auth.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/eln/eln_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/eln/entities.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/eln/generators.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/eln/sanitise.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/ena/filter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/excel/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/excel/excel.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/excel/s3_factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/benchling_entity_to_benchling_worklist_item_converter_factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/benchling_sample_casm_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/benchling_sample_to_elastic_sample_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/benchling_tissue_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/bioscan_extra_pantheon_species_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/bioscan_qc_specimen_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/bioscan_qc_uksi_entry_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/bold_sample_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_object_to_portaldb_object_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sample_to_benchling_tissue_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sample_to_bold_sample_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sample_to_sts_sample_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sequencing_request_to_elastic_run_data_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_sequencing_request_to_sts_sequencing_request_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_species_to_sts_species_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/elastic_tolid_to_elastic_curation_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_analysis_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/gap_assembly_to_elastic_assembly_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/genome_notes_genome_note_to_elastic_genome_note_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/goat_taxon_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/grit_issue_to_elastic_curation_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/informatics_tolid_to_elastic_tolid_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/labwhere_location_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/labwhere_location_to_sts_tray_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/mlwh_extraction_to_elastic_extraction_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/mlwh_run_data_to_elastic_run_data_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/mlwh_sequencing_request_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_manifest_to_elastic_manifest_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_project_to_elastic_sample_update_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_sample_to_casm_benchling_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_sampleset_to_elastic_sampleset_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/sts_species_to_elastic_species_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/tolid_specimen_to_elastic_tolid_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/tolqc_sample_to_elastic_sequencing_request_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/treeofsex_species_to_treeofsexwh_species_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/converters/treeofsex_upload_to_treeofsex_attribute_converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/logger.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/secrets.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/flows/sequencing_submissions.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/gap/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/gap/gap_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/goat/filter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/google_sheets/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/google_sheets/google_sheet_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/irods/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/irods/irods_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/client.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/filter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/jira_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/mapper.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/parser.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/jira/sort.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/json/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/json/json_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/json/s3_json_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/labwhere/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/labwhere/client.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/labwhere/converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/labwhere/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/labwhere/labwhere_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/labwhere/parser.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/markdown.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/mlwh/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/prefect/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/prefect/converter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/prefect/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/prefect/filter.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/prefect/prefect_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/prefect/prefect_object.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/configuration.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/consumer.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/message_builder.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/messages.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/response_processors.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sciops/sequencing_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/services/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/benchling.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/benchling_warehouse.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/bioscan.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/bioscan_extra.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/bioscan_qc.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/copo.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/ena.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/gap.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/genome_notes.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/goat.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/grit.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/informatics.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/labwhere.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/mlwh.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/portal.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/portal_attributes.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/portaldb.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/prefect.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/sciops.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/sts_legacy.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/tolid.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/tolqc.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/tolqc_legacy.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/treeofsex.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/uksi_qc.py.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sources/workflows.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/action/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/action/factory.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/auth/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/cast.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/ds_session.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/exception.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/ext.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/pipeline_step/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/session.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sql/sort.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/status/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/status/status_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sts/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sts/sts.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sts/sts_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/sts/sts_requests.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/treeval/__init__.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/treeval/treeval_datasource.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol/utils/csv.py +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol_sdk.egg-info/dependency_links.txt +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol_sdk.egg-info/entry_points.txt +0 -0
- {tol_sdk-1.6.24 → tol_sdk-1.8.1}/src/tol_sdk.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tol-sdk
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.1
|
|
4
4
|
Summary: SDK for interaction with ToL, Sanger and external services
|
|
5
5
|
Author-email: ToL Platforms Team <tol-platforms@sanger.ac.uk>
|
|
6
6
|
License: MIT
|
|
@@ -15,6 +15,7 @@ License-File: LICENSE
|
|
|
15
15
|
Requires-Dist: cachetools==5.3.3
|
|
16
16
|
Requires-Dist: case-converter==1.1.0
|
|
17
17
|
Requires-Dist: Click==8.1.7
|
|
18
|
+
Requires-Dist: dacite==1.9.2
|
|
18
19
|
Requires-Dist: more-itertools==10.2.0
|
|
19
20
|
Requires-Dist: python_dateutil>=2.8.1
|
|
20
21
|
Requires-Dist: python-dotenv>=1.0.1
|
|
@@ -36,7 +37,7 @@ Requires-Dist: atlassian-python-api==3.41.14; extra == "jira"
|
|
|
36
37
|
Provides-Extra: json
|
|
37
38
|
Requires-Dist: minio==7.2.15; extra == "json"
|
|
38
39
|
Provides-Extra: mysql
|
|
39
|
-
Requires-Dist: mysql-connector-python; extra == "mysql"
|
|
40
|
+
Requires-Dist: mysql-connector-python==9.5.0; extra == "mysql"
|
|
40
41
|
Provides-Extra: postgresql
|
|
41
42
|
Requires-Dist: SQLAlchemy==2.0.35; extra == "postgresql"
|
|
42
43
|
Requires-Dist: psycopg2-binary==2.9.9; extra == "postgresql"
|
|
@@ -49,6 +50,8 @@ Requires-Dist: openpyxl>=3.0.10; extra == "sheets"
|
|
|
49
50
|
Requires-Dist: XlsxWriter==3.1.9; extra == "sheets"
|
|
50
51
|
Requires-Dist: xlrd==2.0.1; extra == "sheets"
|
|
51
52
|
Requires-Dist: gspread>=5.12.0; extra == "sheets"
|
|
53
|
+
Provides-Extra: s3
|
|
54
|
+
Requires-Dist: minio==7.2.15; extra == "s3"
|
|
52
55
|
Provides-Extra: all
|
|
53
56
|
Requires-Dist: tol-sdk[api-base]; extra == "all"
|
|
54
57
|
Requires-Dist: tol-sdk[benchling]; extra == "all"
|
|
@@ -60,6 +63,10 @@ Requires-Dist: tol-sdk[mysql]; extra == "all"
|
|
|
60
63
|
Requires-Dist: tol-sdk[postgresql]; extra == "all"
|
|
61
64
|
Requires-Dist: tol-sdk[prefect]; extra == "all"
|
|
62
65
|
Requires-Dist: tol-sdk[sheets]; extra == "all"
|
|
66
|
+
Provides-Extra: docs
|
|
67
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
68
|
+
Requires-Dist: sphinx_rtd_theme; extra == "docs"
|
|
69
|
+
Requires-Dist: sphinx-autobuild; extra == "docs"
|
|
63
70
|
Dynamic: license-file
|
|
64
71
|
|
|
65
72
|
<!--
|
|
@@ -71,4 +78,5 @@ SPDX-License-Identifier: MIT
|
|
|
71
78
|
# ToL SDK
|
|
72
79
|
|
|
73
80
|
A Python SDK for ToL services. Full documentation is available:
|
|
81
|
+
https://tol.pages.internal.sanger.ac.uk/platforms/tol-sdk/
|
|
74
82
|
https://ssg-confluence.internal.sanger.ac.uk/display/TOL/ToL+SDK
|
|
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "tol-sdk"
|
|
11
|
-
version = "1.
|
|
11
|
+
version = "1.8.1"
|
|
12
12
|
description = "SDK for interaction with ToL, Sanger and external services"
|
|
13
13
|
readme = "README.md"
|
|
14
14
|
authors = [
|
|
@@ -26,6 +26,7 @@ dependencies = [
|
|
|
26
26
|
"cachetools == 5.3.3",
|
|
27
27
|
"case-converter == 1.1.0",
|
|
28
28
|
"Click == 8.1.7",
|
|
29
|
+
"dacite == 1.9.2",
|
|
29
30
|
"more-itertools == 10.2.0",
|
|
30
31
|
"python_dateutil >= 2.8.1",
|
|
31
32
|
"python-dotenv >= 1.0.1",
|
|
@@ -42,7 +43,7 @@ elastic = ["elasticsearch == 7.17.9"]
|
|
|
42
43
|
irods = ["python-irodsclient == 3.1.0"]
|
|
43
44
|
jira = ["atlassian-python-api==3.41.14"]
|
|
44
45
|
json = ["minio == 7.2.15"]
|
|
45
|
-
mysql = ["mysql-connector-python"]
|
|
46
|
+
mysql = ["mysql-connector-python==9.5.0"]
|
|
46
47
|
postgresql = ["SQLAlchemy == 2.0.35", "psycopg2-binary == 2.9.9"]
|
|
47
48
|
prefect = ["prefect == 2.20.18", "griffe < 1.0.0"]
|
|
48
49
|
sheets = [
|
|
@@ -52,6 +53,7 @@ sheets = [
|
|
|
52
53
|
"xlrd == 2.0.1",
|
|
53
54
|
"gspread >= 5.12.0"
|
|
54
55
|
]
|
|
56
|
+
s3 = ["minio == 7.2.15"]
|
|
55
57
|
all = [
|
|
56
58
|
"tol-sdk[api-base]",
|
|
57
59
|
"tol-sdk[benchling]",
|
|
@@ -64,6 +66,11 @@ all = [
|
|
|
64
66
|
"tol-sdk[prefect]",
|
|
65
67
|
"tol-sdk[sheets]"
|
|
66
68
|
]
|
|
69
|
+
docs = [
|
|
70
|
+
"sphinx",
|
|
71
|
+
"sphinx_rtd_theme",
|
|
72
|
+
"sphinx-autobuild"
|
|
73
|
+
]
|
|
67
74
|
|
|
68
75
|
[tool.setuptools.packages.find]
|
|
69
76
|
where = ["src"]
|
|
@@ -73,4 +80,7 @@ where = ["src"]
|
|
|
73
80
|
"tol.benchling.sql" = ["*.sql"]
|
|
74
81
|
|
|
75
82
|
[project.scripts]
|
|
76
|
-
tol = "tol.cli:cli"
|
|
83
|
+
tol = "tol.cli:cli"
|
|
84
|
+
|
|
85
|
+
[tool.black]
|
|
86
|
+
line-length = 99
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Genome Research Ltd.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from abc import ABC, abstractmethod
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from ..core import DataSource
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Action(ABC):
|
|
14
|
+
"""
|
|
15
|
+
The central class for running local actions.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def run(
|
|
20
|
+
self,
|
|
21
|
+
datasource: DataSource,
|
|
22
|
+
ids: list[str],
|
|
23
|
+
object_type: str,
|
|
24
|
+
params: dict[str, Any] | None = None
|
|
25
|
+
) -> tuple[dict[str, bool], int]:
|
|
26
|
+
"""
|
|
27
|
+
Run the action on the given IDs and return status in
|
|
28
|
+
format ({'success': True}, 200).
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
pass
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Genome Research Ltd.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from .action import Action
|
|
10
|
+
from ..core import DataSource
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class UpsertAction(Action):
|
|
14
|
+
"""
|
|
15
|
+
The central class for running local actions.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
super().__init__()
|
|
20
|
+
|
|
21
|
+
def run(
|
|
22
|
+
self,
|
|
23
|
+
datasource: DataSource,
|
|
24
|
+
ids: list[str],
|
|
25
|
+
object_type: str,
|
|
26
|
+
params: dict[str, Any] | None = None
|
|
27
|
+
) -> tuple[dict[str, bool], int]:
|
|
28
|
+
|
|
29
|
+
data_objects = self.__convert_to_data_objects(
|
|
30
|
+
datasource=datasource,
|
|
31
|
+
ids=ids,
|
|
32
|
+
object_type=object_type,
|
|
33
|
+
params=params
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
datasource.upsert_batch(object_type=object_type, objects=data_objects)
|
|
38
|
+
return {'success': True}, 200
|
|
39
|
+
except Exception as e:
|
|
40
|
+
return {'error': str(e)}, 500
|
|
41
|
+
|
|
42
|
+
def __convert_to_data_objects(
|
|
43
|
+
self,
|
|
44
|
+
datasource: DataSource,
|
|
45
|
+
ids: list[str],
|
|
46
|
+
object_type: str,
|
|
47
|
+
params: dict[str, Any] | None = None
|
|
48
|
+
) -> Any:
|
|
49
|
+
CoreDataObject = datasource.data_object_factory # noqa N806
|
|
50
|
+
|
|
51
|
+
for id_ in ids:
|
|
52
|
+
yield CoreDataObject(
|
|
53
|
+
type_=object_type,
|
|
54
|
+
id_=id_,
|
|
55
|
+
attributes=params
|
|
56
|
+
)
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
+
import importlib
|
|
7
8
|
import typing
|
|
8
9
|
from datetime import datetime
|
|
9
10
|
from typing import Any
|
|
@@ -151,31 +152,79 @@ def action_blueprint(
|
|
|
151
152
|
else {}
|
|
152
153
|
)
|
|
153
154
|
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
if action.flow_name:
|
|
156
|
+
flow_params = {
|
|
157
|
+
'extra_params': {
|
|
158
|
+
**params,
|
|
159
|
+
**action_params,
|
|
160
|
+
},
|
|
161
|
+
'user_id': user_id,
|
|
162
|
+
'object_type': object_type,
|
|
163
|
+
'ids': ids
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
flow_run_id, flow_run_name = __insert_flow_run(
|
|
167
|
+
action,
|
|
168
|
+
flow_params,
|
|
169
|
+
user_id
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
user_action_params = {
|
|
156
173
|
**params,
|
|
157
174
|
**action_params,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
flow_run_id, flow_run_name = __insert_flow_run(
|
|
165
|
-
action,
|
|
166
|
-
flow_params,
|
|
167
|
-
user_id
|
|
168
|
-
)
|
|
175
|
+
'ids': ids,
|
|
176
|
+
'flow_run_id': flow_run_id,
|
|
177
|
+
'flow_run_name': flow_run_name
|
|
178
|
+
}
|
|
169
179
|
|
|
170
|
-
|
|
180
|
+
elif action.class_name:
|
|
181
|
+
# Try to import the class from tol.actions first, then fall back to main.actions
|
|
182
|
+
action_class = None
|
|
183
|
+
try:
|
|
184
|
+
tol_actions_module = importlib.import_module('tol.actions')
|
|
185
|
+
if hasattr(tol_actions_module, action.class_name):
|
|
186
|
+
action_class = getattr(tol_actions_module, action.class_name)
|
|
187
|
+
|
|
188
|
+
if action_class is None:
|
|
189
|
+
main_actions_module = importlib.import_module('main.actions')
|
|
190
|
+
if hasattr(main_actions_module, action.class_name):
|
|
191
|
+
action_class = getattr(main_actions_module, action.class_name)
|
|
192
|
+
|
|
193
|
+
except ImportError:
|
|
194
|
+
raise DataSourceError(
|
|
195
|
+
'Action Class Import Error',
|
|
196
|
+
'Class not found in tol.actions or main.actions',
|
|
197
|
+
500
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
if action_class is None:
|
|
201
|
+
raise DataSourceError(
|
|
202
|
+
'Action Class Not Found',
|
|
203
|
+
f'Action class "{action.class_name}" not found in tol.actions or main.actions',
|
|
204
|
+
404
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
class_params = {**action_params, **params}
|
|
208
|
+
|
|
209
|
+
action_instance = action_class()
|
|
210
|
+
status = action_instance.run(ids=ids, params=class_params,
|
|
211
|
+
object_type=object_type, datasource=sql_ds)
|
|
212
|
+
|
|
213
|
+
user_action_params = {
|
|
214
|
+
**params,
|
|
215
|
+
**action_params,
|
|
216
|
+
'ids': ids,
|
|
217
|
+
'status': status
|
|
218
|
+
}
|
|
171
219
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
220
|
+
else:
|
|
221
|
+
raise DataSourceError(
|
|
222
|
+
'Invalid Action',
|
|
223
|
+
'No Actions are defined',
|
|
224
|
+
400
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
user = sql_ds.get_one('user', user_id)
|
|
179
228
|
|
|
180
229
|
user_action = sql_ds.data_object_factory(
|
|
181
230
|
'user_action',
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Genome Research Ltd.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
from abc import ABC, abstractmethod
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AuthorisationManager(ABC):
|
|
9
|
+
"""
|
|
10
|
+
Abstract base class for managing user authorisations and memberships.
|
|
11
|
+
|
|
12
|
+
This class defines the interface for authorisation managers that need to
|
|
13
|
+
retrieve user membership information for access control purposes. Concrete
|
|
14
|
+
implementations should handle the specific logic for querying user memberships
|
|
15
|
+
from various authorisation systems (e.g., LDAP, database, external services).
|
|
16
|
+
|
|
17
|
+
The class follows the ABC (Abstract Base Class) pattern to ensure that all
|
|
18
|
+
concrete implementations provide the required methods for authorisation
|
|
19
|
+
management.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
@abstractmethod
|
|
23
|
+
def get_user_memberships(self, user: Any) -> list[str]:
|
|
24
|
+
"""
|
|
25
|
+
Retrieve the list of group memberships for a given user.
|
|
26
|
+
|
|
27
|
+
This method should be implemented by concrete subclasses to fetch
|
|
28
|
+
the user's membership information from the appropriate authorisation
|
|
29
|
+
source. The memberships are typically used to determine what resources
|
|
30
|
+
or actions the user is authorised to access.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
user (Any): The user object or identifier for which to retrieve
|
|
34
|
+
memberships. The type is flexible to accommodate
|
|
35
|
+
different user representation formats (e.g., user ID,
|
|
36
|
+
user object, username string, etc.).
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
list[str]: A list of group names or membership identifiers that
|
|
40
|
+
the user belongs to. Returns an empty list if the user
|
|
41
|
+
has no memberships or if the user is not found.
|
|
42
|
+
|
|
43
|
+
Raises:
|
|
44
|
+
NotImplementedError: If called on the abstract base class directly
|
|
45
|
+
rather than on a concrete implementation.
|
|
46
|
+
|
|
47
|
+
Note:
|
|
48
|
+
Concrete implementations may raise additional exceptions specific
|
|
49
|
+
to their authorisation backend (e.g., connection errors, authentication
|
|
50
|
+
failures, etc.).
|
|
51
|
+
"""
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# SPDX-License-Identifier: MIT
|
|
4
4
|
|
|
5
5
|
from functools import wraps
|
|
6
|
+
from inspect import BoundArguments
|
|
6
7
|
from typing import Any, Callable, Optional, Protocol
|
|
7
8
|
|
|
8
9
|
from .error import ForbiddenError
|
|
@@ -21,12 +22,11 @@ class AuthInspector(Protocol):
|
|
|
21
22
|
lock down access to a user's objects by their ID).
|
|
22
23
|
"""
|
|
23
24
|
|
|
24
|
-
# TODO support segementation within `object_type` - e.g. by programme/project
|
|
25
|
-
|
|
26
25
|
def __call__(
|
|
27
26
|
self,
|
|
28
27
|
object_type: str,
|
|
29
|
-
method: OperatorMethod
|
|
28
|
+
method: OperatorMethod,
|
|
29
|
+
bound_args: BoundArguments
|
|
30
30
|
) -> Optional[AndFilter]:
|
|
31
31
|
...
|
|
32
32
|
|
|
@@ -104,7 +104,8 @@ def basic_auth_inspector(
|
|
|
104
104
|
|
|
105
105
|
def auth_inspector(
|
|
106
106
|
__object_type: str,
|
|
107
|
-
method: OperatorMethod
|
|
107
|
+
method: OperatorMethod,
|
|
108
|
+
bound_args: BoundArguments | None,
|
|
108
109
|
) -> None:
|
|
109
110
|
|
|
110
111
|
if method in NO_AUTH:
|