dxpy 0.399.0__tar.gz → 0.400.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.
- {dxpy-0.399.0 → dxpy-0.400.1}/MANIFEST.in +1 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/PKG-INFO +14 -4
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxproject.py +5 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/parsers.py +5 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/exceptions.py +3 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/app_asset_projects_ids_prod.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/app_asset_projects_ids_staging.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/awscli_assets.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/awscli_assets.staging.json +2 -1
- dxpy-0.400.1/dxpy/nextflow/default_nextflow_instance_types.json +10 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextaur_assets.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextaur_assets.staging.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextflow_assets.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextflow_assets.staging.json +2 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextflow_utils.py +9 -9
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/scripts/dx.py +1 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/nextflow/src/nextflow.sh +61 -38
- dxpy-0.400.1/dxpy/toolkit_version.py +1 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/PKG-INFO +14 -4
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/SOURCES.txt +17 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/entry_points.txt +0 -1
- dxpy-0.400.1/scripts/dx-clone-asset +220 -0
- dxpy-0.400.1/scripts/dx-docker +492 -0
- dxpy-0.400.1/scripts/dx-download-all-inputs +77 -0
- dxpy-0.400.1/scripts/dx-fetch-bundled-depends +44 -0
- dxpy-0.400.1/scripts/dx-generate-dxapp +341 -0
- dxpy-0.400.1/scripts/dx-jobutil-add-output +187 -0
- dxpy-0.400.1/scripts/dx-jobutil-dxlink +29 -0
- dxpy-0.400.1/scripts/dx-jobutil-get-identity-token +69 -0
- dxpy-0.400.1/scripts/dx-jobutil-new-job +104 -0
- dxpy-0.400.1/scripts/dx-jobutil-parse-link +39 -0
- dxpy-0.400.1/scripts/dx-jobutil-report-error +40 -0
- dxpy-0.400.1/scripts/dx-log-stream +69 -0
- dxpy-0.400.1/scripts/dx-mount-all-inputs +77 -0
- dxpy-0.400.1/scripts/dx-notebook-reconnect +41 -0
- dxpy-0.400.1/scripts/dx-print-bash-vars +47 -0
- dxpy-0.400.1/scripts/dx-upload-all-outputs +445 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dxclient.py +4 -3
- dxpy-0.399.0/dxpy/toolkit_version.py +0 -1
- {dxpy-0.399.0 → dxpy-0.400.1}/Readme.md +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/api.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/app_builder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/app_categories.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/asset_builder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/cmd_line_options_validator.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/data_transformations.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/dataset.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/json_validation_by_schema.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/schemas/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/schemas/assay_filtering_conditions.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/schemas/assay_filtering_json_schemas.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/schemas/input_arguments_validation_schemas.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/vizclient.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/vizserver_filters_from_json_parser.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/apollo/vizserver_payload_builder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/auth.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/download_all_inputs.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxanalysis.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxapp.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxapp_container_functions.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxapplet.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxdatabase.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxdatabase_functions.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxdataobject_functions.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxfile.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxfile_functions.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxglobalworkflow.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxjob.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxrecord.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/dxworkflow.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/mount_all_inputs.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/bindings/search.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/cp.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/dataset_utilities.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/download.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/exec_io.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/help_messages.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/org.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/output_handling.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/cli/workflow.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/compat.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_staging.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_staging_vep.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_vep.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/cohort_filter_payload.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/column_conditions.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/column_conversion.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/filter_to_payload.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/germline_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/input_validation.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/input_validation_somatic.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/retrieve_allele_schema.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/retrieve_annotation_schema.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/retrieve_bins.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/retrieve_genotype_schema.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/return_columns_allele.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/return_columns_annotation.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/return_columns_genotype.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/return_columns_genotype_only.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dx_extract_utils/somatic_filter_payload.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/dxlog.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/executable_builder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/ImageRef.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/ImageRefFactory.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/collect_images.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextflow_builder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/nextflow/nextflow_templates.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/packages/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/scripts/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/scripts/dx_app_wizard.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/scripts/dx_build_app.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/scripts/dx_build_applet.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/ssh_tunnel_app_support.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/system_requirements.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/bash.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/python.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/Readme.md +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/bash/basic/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/bash/basic/src/code.sh +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/bash/parallelized/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/bash/parallelized/src/code.sh +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/bash/scatter-process-gather/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/bash/scatter-process-gather/src/code.sh +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/nextflow/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/basic/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/basic/src/code.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/basic/test/test.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/parallelized/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/parallelized/src/code.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/parallelized/test/test.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/scatter-process-gather/dxapp.json +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/scatter-process-gather/src/code.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/templates/python/scatter-process-gather/test/test.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/templating/utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/__init__.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/batch_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/completer.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/config.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/describe.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/exec_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/executable_unbuilder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/file_handle.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/file_load_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/genomic_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/job_log_client.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/local_exec_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/pathmatch.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/pretty_print.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/printing.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/resolver.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/spelling_corrector.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/utils/version.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy/workflow_builder.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/dependency_links.txt +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/not-zip-safe +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/requires.txt +6 -6
- {dxpy-0.399.0 → dxpy-0.400.1}/dxpy.egg-info/top_level.txt +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/requirements.txt +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/requirements_setuptools.txt +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/requirements_test.txt +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/setup.cfg +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/setup.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_batch.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_create_cohort.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_describe.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dx-docker.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dx_app_wizard.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dx_bash_helpers.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dx_completion.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dx_symlink.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dxabs.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dxasset.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dxpy.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dxpy_utils.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_dxunpack.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_extract_assay.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_extract_dataset.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_extract_expression.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_extract_somatic.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_nextflow.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_nextflow_ImageRef.py +0 -0
- {dxpy-0.399.0 → dxpy-0.400.1}/test/test_nextflow_ImageRefFactory.py +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dxpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.400.1
|
|
4
4
|
Summary: DNAnexus Platform API bindings for Python
|
|
5
5
|
Home-page: https://github.com/dnanexus/dx-toolkit
|
|
6
6
|
Author: Aleksandra Zalcman, Andrey Kislyuk, Anurag Biyani, Geet Duggal, Katherine Lai, Kurt Jensen, Marek Hrvol, Ohad Rodeh, Phil Sung
|
|
7
7
|
Author-email: support@dnanexus.com
|
|
8
8
|
License: Apache Software License
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
Classifier: Environment :: Console
|
|
11
10
|
Classifier: Intended Audience :: Developers
|
|
12
11
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -17,8 +16,21 @@ Classifier: Programming Language :: Unix Shell
|
|
|
17
16
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
17
|
Requires-Python: >=3.8
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: argcomplete>=2.0.0; python_version >= "3.10"
|
|
20
|
+
Requires-Dist: argcomplete<2.0.0,>=1.9.4; python_version < "3.10"
|
|
21
|
+
Requires-Dist: websocket-client<1.8.0,>=1.6.0
|
|
22
|
+
Requires-Dist: python-dateutil>=2.5
|
|
23
|
+
Requires-Dist: psutil>=5.9.3
|
|
24
|
+
Requires-Dist: certifi>=2024.7.4
|
|
25
|
+
Requires-Dist: urllib3<2.2,>=1.25
|
|
26
|
+
Requires-Dist: pyreadline3==3.4.1; sys_platform == "win32"
|
|
27
|
+
Requires-Dist: colorama<=0.4.6,>=0.4.4; sys_platform == "win32"
|
|
28
|
+
Requires-Dist: crc32c>=2.7.1
|
|
20
29
|
Provides-Extra: pandas
|
|
30
|
+
Requires-Dist: pandas==1.3.5; extra == "pandas"
|
|
31
|
+
Requires-Dist: numpy<2.0.0; extra == "pandas"
|
|
21
32
|
Provides-Extra: xattr
|
|
33
|
+
Requires-Dist: xattr==0.10.1; (sys_platform == "linux2" or sys_platform == "linux") and extra == "xattr"
|
|
22
34
|
|
|
23
35
|
dxpy: DNAnexus Python API
|
|
24
36
|
=========================
|
|
@@ -125,5 +137,3 @@ We have the following convention for these scripts:
|
|
|
125
137
|
if __name__ == '__main__':
|
|
126
138
|
main()
|
|
127
139
|
```
|
|
128
|
-
|
|
129
|
-
|
|
@@ -367,7 +367,7 @@ class DXProject(DXContainer):
|
|
|
367
367
|
allowed_executables=None, unset_allowed_executables=None,
|
|
368
368
|
database_ui_view_only=None, external_upload_restricted=None,
|
|
369
369
|
database_results_restricted=None, unset_database_results_restricted=None,
|
|
370
|
-
https_app_isolated_browsing=None, **kwargs):
|
|
370
|
+
https_app_isolated_browsing=None, https_app_isolated_browsing_options=None, **kwargs):
|
|
371
371
|
"""
|
|
372
372
|
:param name: If provided, the new project name
|
|
373
373
|
:type name: string
|
|
@@ -398,6 +398,8 @@ class DXProject(DXContainer):
|
|
|
398
398
|
:param https_app_isolated_browsing: Whether all https access to jobs in this project should be wrapped in Isolated Browsing.
|
|
399
399
|
If true, httpsApp-enabled executables must have httpsApp.shared_access set to 'NONE' to run in this project.
|
|
400
400
|
:type https_app_isolated_browsing: boolean
|
|
401
|
+
:param https_app_isolated_browsing_options: Options for Isolated Browsing. See https://documentation.dnanexus.com/developer/api/data-containers/projects#api-method-project-xxxx-update for a list of supported keys.
|
|
402
|
+
:type https_app_isolated_browsing_options: dict
|
|
401
403
|
|
|
402
404
|
Updates the project with the new fields. All fields are
|
|
403
405
|
optional. Fields that are not provided are not changed.
|
|
@@ -435,6 +437,8 @@ class DXProject(DXContainer):
|
|
|
435
437
|
update_hash["databaseResultsRestricted"] = None
|
|
436
438
|
if https_app_isolated_browsing is not None:
|
|
437
439
|
update_hash["httpsAppIsolatedBrowsing"] = https_app_isolated_browsing
|
|
440
|
+
if https_app_isolated_browsing_options is not None:
|
|
441
|
+
update_hash["httpsAppIsolatedBrowsingOptions"] = https_app_isolated_browsing_options
|
|
438
442
|
dxpy.api.project_update(self._dxid, update_hash, **kwargs)
|
|
439
443
|
|
|
440
444
|
def invite(self, invitee, level, send_email=True, **kwargs):
|
|
@@ -464,6 +464,11 @@ def get_update_project_args(args):
|
|
|
464
464
|
input_params['externalUploadRestricted'] = args.external_upload_restricted == 'true'
|
|
465
465
|
if args.https_app_isolated_browsing is not None:
|
|
466
466
|
input_params['httpsAppIsolatedBrowsing'] = args.https_app_isolated_browsing == 'true'
|
|
467
|
+
if args.https_app_isolated_browsing_options is not None:
|
|
468
|
+
try:
|
|
469
|
+
input_params['httpsAppIsolatedBrowsingOptions'] = json.loads(args.https_app_isolated_browsing_options)
|
|
470
|
+
except ValueError as e:
|
|
471
|
+
raise DXParserError('Error while parsing the value for --https-app-isolated-browsing-options') from e
|
|
467
472
|
return input_params
|
|
468
473
|
|
|
469
474
|
def process_phi_param(args):
|
|
@@ -79,6 +79,9 @@ class PermissionDenied(DXAPIError):
|
|
|
79
79
|
class SpendingLimitExceeded(DXAPIError):
|
|
80
80
|
''' Raised when the spending limit has been reached for the account that would be billed for this action. '''
|
|
81
81
|
|
|
82
|
+
class OrgExpired(DXAPIError):
|
|
83
|
+
''' Raised when the organization that would be billed for this action has expired. '''
|
|
84
|
+
|
|
82
85
|
class ResourceNotFound(DXAPIError):
|
|
83
86
|
''' Raised when a specified entity or resource could not be found. '''
|
|
84
87
|
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "project-GvGXBYV3pK4v9X7F2jv9zz94",
|
|
6
6
|
"aws:us-east-1": "project-B6JG897KGbkGb6Z7pQ9Q02jG",
|
|
7
7
|
"azure:westeurope": "project-FGZZFkjBPJqBXq1X84pq4VJf",
|
|
8
|
-
"azure:westus": "project-F3vk1q09FX8Jxxp20pq6z8P9"
|
|
8
|
+
"azure:westus": "project-F3vk1q09FX8Jxxp20pq6z8P9",
|
|
9
|
+
"oci:us-ashburn-1": "project-J1q0ZJV6VQg98Q4Bz36JbQKJ"
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "project-Gv8PVXk32gZ83kfp0pZ1v3V2",
|
|
6
6
|
"aws:us-east-1": "project-G0zG4B808VFFYVz84FQkvF1K",
|
|
7
7
|
"azure:westeurope": "project-G0zG4BQBq1XQby2F4FqQpPXv",
|
|
8
|
-
"azure:westus": "project-G0zG4B09ZJ5gx1Vz4Fb8Q9XX"
|
|
8
|
+
"azure:westus": "project-G0zG4B09ZJ5gx1Vz4Fb8Q9XX",
|
|
9
|
+
"oci:us-ashburn-1": "project-J1q0ZJV6z2pJXY2Qqv8xvX5G"
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "record-Gyv70B932Vy4bg78PFvbB4Q7",
|
|
6
6
|
"aws:us-east-1": "record-Gyv6Q9j0PPgJQJ72226Gz7j7",
|
|
7
7
|
"azure:westeurope": "record-Gyv73f0BKJkvjx5FPJq6F22b",
|
|
8
|
-
"azure:westus": "record-Gyv77Vj9zv30Pfx8V890xQ6Q"
|
|
8
|
+
"azure:westus": "record-Gyv77Vj9zv30Pfx8V890xQ6Q",
|
|
9
|
+
"oci:us-ashburn-1": "record-J30Z62V6ZVX41GJBgkxbkFzp"
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "record-Gyqp5F13fKQ44GfVP0VkKZ0z",
|
|
6
6
|
"aws:us-east-1": "record-GyqkB3j08Gb14Pf0P8x5Xq5Q",
|
|
7
7
|
"azure:westeurope": "record-Gyqp8g8B3BVZ4GfVP0VkKZ15",
|
|
8
|
-
"azure:westus": "record-GyqpG7Q9Z3044GfVP0VkKZ1J"
|
|
8
|
+
"azure:westus": "record-GyqpG7Q9Z3044GfVP0VkKZ1J",
|
|
9
|
+
"oci:us-ashburn-1": "record-J30Xb1k6p6JxZFPzfpBfY6Qq"
|
|
9
10
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"aws:ap-southeast-2": "mem2_ssd1_v2_x4",
|
|
3
|
+
"aws:eu-central-1": "mem2_ssd1_v2_x4",
|
|
4
|
+
"aws:us-east-1": "mem2_ssd1_v2_x4",
|
|
5
|
+
"aws:me-south-1": "mem2_ssd1_v2_x4",
|
|
6
|
+
"azure:westeurope": "azure:mem2_ssd1_x4",
|
|
7
|
+
"azure:westus": "azure:mem2_ssd1_x4",
|
|
8
|
+
"aws:eu-west-2-g": "mem2_ssd1_v2_x4",
|
|
9
|
+
"oci:us-ashburn-1": "oci:mem2_ssd1_v3i_x4"
|
|
10
|
+
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "record-GzyP85V306B9xkQ4Pv1yf7Kz",
|
|
6
6
|
"aws:us-east-1": "record-GzyP6580KGjqV4gp6QXFGBzX",
|
|
7
7
|
"azure:westeurope": "record-GzyP9z0BzJx8zjf6bpvY6Yqv",
|
|
8
|
-
"azure:westus": "record-GzyP9vQ9zggPyfkj5GKKYVG5"
|
|
8
|
+
"azure:westus": "record-GzyP9vQ9zggPyfkj5GKKYVG5",
|
|
9
|
+
"oci:us-ashburn-1": "record-J30Z6396B086xYKfqQj5gG1j"
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "record-GzyJ2GV311jBJYzx2XpgZXQ0",
|
|
6
6
|
"aws:us-east-1": "record-GzyJ08002j9B36YfkbQQxpkf",
|
|
7
7
|
"azure:westeurope": "record-GzyJ4B8B095jZ8F4BF5p2Ggz",
|
|
8
|
-
"azure:westus": "record-GzyJ3q89X1QBpvfvgx9bZzgP"
|
|
8
|
+
"azure:westus": "record-GzyJ3q89X1QBpvfvgx9bZzgP",
|
|
9
|
+
"oci:us-ashburn-1": "record-J30XbBV6j7q0jq6q1Jfz5650"
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "record-GzyP8593PgfZjYXPJP9FFqV4",
|
|
6
6
|
"aws:us-east-1": "record-GzyP6X00F3gq8p88gP7PQFkx",
|
|
7
7
|
"azure:westeurope": "record-GzyPB98BB2b867v2KK1BXx8p",
|
|
8
|
-
"azure:westus": "record-GzyPB6j9b5Yy81G8XV89jkZX"
|
|
8
|
+
"azure:westus": "record-GzyPB6j9b5Yy81G8XV89jkZX",
|
|
9
|
+
"oci:us-ashburn-1": "record-J30Z63V67qG7Y9ZfxjPpp90G"
|
|
9
10
|
}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
"aws:me-south-1": "record-GzyJ2Y93z3b2Q4202Jpx1j78",
|
|
6
6
|
"aws:us-east-1": "record-GzyJ19j08Ffppvfvgx9bZzfz",
|
|
7
7
|
"azure:westeurope": "record-GzyJ4QjByJz29GJg3K3Gv2yB",
|
|
8
|
-
"azure:westus": "record-GzyJ45Q9xQPB36YfkbQQxpp8"
|
|
8
|
+
"azure:westus": "record-GzyJ45Q9xQPB36YfkbQQxpp8",
|
|
9
|
+
"oci:us-ashburn-1": "record-J30Xbb16kfQfgJqjXGf7561F"
|
|
9
10
|
}
|
|
@@ -149,15 +149,14 @@ def get_regional_options(region, resources_dir, profile, cache_docker, nextflow_
|
|
|
149
149
|
|
|
150
150
|
|
|
151
151
|
def get_instance_type(region):
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
"
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}.get(region)
|
|
152
|
+
json_file_path = path.join(path.dirname(dxpy.__file__), 'nextflow', 'default_nextflow_instance_types.json')
|
|
153
|
+
try:
|
|
154
|
+
with open(json_file_path, 'r') as f:
|
|
155
|
+
instance_type_mapping = json.load(f)
|
|
156
|
+
except FileNotFoundError:
|
|
157
|
+
raise dxpy.exceptions.ResourceNotFound(f"Instance types file not found at {json_file_path}.")
|
|
158
|
+
|
|
159
|
+
instance_type = instance_type_mapping.get(region)
|
|
161
160
|
if not instance_type:
|
|
162
161
|
raise dxpy.exceptions.ResourceNotFound("Instance type is not specified for region {}.".format(region))
|
|
163
162
|
return instance_type
|
|
@@ -184,6 +183,7 @@ def get_nextflow_assets(region):
|
|
|
184
183
|
with open(nextaur_assets, 'r') as nextaur_f, open(nextflow_assets, 'r') as nextflow_f, open(awscli_assets, 'r') as awscli_f:
|
|
185
184
|
return json.load(nextaur_f)[region], json.load(nextflow_f)[region], json.load(awscli_f)[region]
|
|
186
185
|
|
|
186
|
+
|
|
187
187
|
def get_nested(args, arg_path):
|
|
188
188
|
"""
|
|
189
189
|
:param args: extra args from command input
|
|
@@ -5416,6 +5416,7 @@ parser_update_project.add_argument('--https-app-isolated-browsing',
|
|
|
5416
5416
|
help="Whether all https access to jobs in this project should be wrapped in Isolated Browsing."
|
|
5417
5417
|
" If true, httpsApp-enabled executables must have httpsApp.shared_access set to 'NONE' to run in this project.",
|
|
5418
5418
|
choices=["true", "false"])
|
|
5419
|
+
parser_update_project.add_argument('--https-app-isolated-browsing-options', help="A JSON string with options for Isolated Browsing. See https://documentation.dnanexus.com/developer/api/data-containers/projects#api-method-project-xxxx-update for a list of supported keys.", type=str)
|
|
5419
5420
|
allowed_executables_group = parser_update_project.add_mutually_exclusive_group()
|
|
5420
5421
|
allowed_executables_group.add_argument('--allowed-executables', help='Executable ID(s) this project is allowed to run. This operation overrides any existing list of executables.', type=str, nargs="+")
|
|
5421
5422
|
allowed_executables_group.add_argument('--unset-allowed-executables', help='Removes any restriction to run executables as set by --allowed-executables', action='store_true')
|
|
@@ -104,7 +104,7 @@ main() {
|
|
|
104
104
|
$nextflow_pipeline_params)"
|
|
105
105
|
|
|
106
106
|
NEXTFLOW_CMD_ENV+=("${applet_runtime_inputs[@]}")
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
AWS_ENV="$HOME/.dx-aws.env"
|
|
109
109
|
|
|
110
110
|
get_nextflow_environment "${NEXTFLOW_CMD_ENV[@]}"
|
|
@@ -112,10 +112,10 @@ main() {
|
|
|
112
112
|
|
|
113
113
|
# Login to AWS, if configured
|
|
114
114
|
aws_login
|
|
115
|
-
|
|
115
|
+
refresh_web_identity_token_loop & TOKEN_REFRESH_PID=$!
|
|
116
116
|
|
|
117
117
|
set_vars_session_and_cache
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
if [[ $preserve_cache == true ]]; then
|
|
120
120
|
set_job_properties_cache
|
|
121
121
|
check_cache_db_storage_limit
|
|
@@ -168,7 +168,7 @@ main() {
|
|
|
168
168
|
wait $NXF_EXEC_PID
|
|
169
169
|
ret=$?
|
|
170
170
|
|
|
171
|
-
kill "$
|
|
171
|
+
kill "$TOKEN_REFRESH_PID" 2>/dev/null || true
|
|
172
172
|
exit $ret
|
|
173
173
|
}
|
|
174
174
|
|
|
@@ -243,7 +243,7 @@ nf_task_entry() {
|
|
|
243
243
|
[[ -f $CREDENTIALS ]] && docker_registry_login || echo "no docker credential available"
|
|
244
244
|
dx download "$DX_WORKSPACE_ID:/.dx-aws.env" -o $AWS_ENV -f --no-progress 2>/dev/null || true
|
|
245
245
|
aws_login
|
|
246
|
-
|
|
246
|
+
refresh_web_identity_token_loop & TOKEN_REFRESH_PID=$!
|
|
247
247
|
# capture the exit code
|
|
248
248
|
trap nf_task_exit EXIT
|
|
249
249
|
|
|
@@ -256,12 +256,13 @@ nf_task_entry() {
|
|
|
256
256
|
set +e
|
|
257
257
|
bash .command.run > >(tee .command.log) 2>&1
|
|
258
258
|
export exit_code=$?
|
|
259
|
-
kill "$AWS_RELOGIN_PID"
|
|
260
259
|
dx set_properties ${DX_JOB_ID} nextflow_exit_code=$exit_code
|
|
261
260
|
set -e
|
|
262
261
|
}
|
|
263
262
|
|
|
264
263
|
nf_task_exit() {
|
|
264
|
+
kill "$TOKEN_REFRESH_PID" 2>/dev/null || true
|
|
265
|
+
|
|
265
266
|
if [ -f .command.log ]; then
|
|
266
267
|
if [[ $USING_S3_WORKDIR == true ]]; then
|
|
267
268
|
aws s3 cp .command.log "${cmd_log_file}"
|
|
@@ -336,34 +337,56 @@ aws_login() {
|
|
|
336
337
|
if [ -f "$AWS_ENV" ]; then
|
|
337
338
|
source $AWS_ENV
|
|
338
339
|
detect_if_using_s3_workdir
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
340
|
+
|
|
341
|
+
local web_identity_token_file="/tmp/aws_web_identity_token"
|
|
342
|
+
|
|
343
|
+
dx-jobutil-get-identity-token --aud ${jobTokenAudience} --subject_claims ${jobTokenSubjectClaims} > ${web_identity_token_file}
|
|
344
|
+
|
|
345
|
+
export AWS_REGION="$awsRegion"
|
|
346
|
+
export AWS_ROLE_ARN="$iamRoleArnToAssume"
|
|
347
|
+
export AWS_ROLE_SESSION_NAME="dnanexus_${DX_JOB_ID}"
|
|
348
|
+
export AWS_WEB_IDENTITY_TOKEN_FILE="$web_identity_token_file"
|
|
349
|
+
|
|
350
|
+
# Clean up any old AWS config files to avoid conflicts. The SDK will now ignore ~/.aws/config and ~/.aws/credentials because the environment variables take precedence.
|
|
351
|
+
rm -rf /home/dnanexus/.aws/
|
|
352
|
+
|
|
353
|
+
# This explicit check is added to ensure that existing pytest tests for invalid credentials still fail correctly.
|
|
354
|
+
# In the new model, the AWS SDK would normally handle this lazily, but the tests expect an immediate failure.
|
|
355
|
+
aws sts assume-role-with-web-identity --role-arn "$iamRoleArnToAssume" \
|
|
356
|
+
--role-session-name "dnanexus_${DX_JOB_ID}" \
|
|
357
|
+
--web-identity-token "$(cat "${web_identity_token_file}")" > /dev/null
|
|
358
|
+
|
|
359
|
+
echo "Successfully configured AWS with Web Identity Token File."
|
|
360
|
+
# Optional sanity check; SDK/CLI will now do STS AssumeRoleWithWebIdentity on demand
|
|
361
|
+
aws sts get-caller-identity >/dev/null 2>&1 || echo "Note: initial STS call deferred to Nextflow/AWS SDK."
|
|
358
362
|
fi
|
|
359
363
|
}
|
|
360
364
|
|
|
361
|
-
|
|
365
|
+
refresh_web_identity_token_loop() {
|
|
366
|
+
# The DNAnexus job identity token expires in ~5 minutes.
|
|
367
|
+
# Refresh the OIDC token file proactively so the AWS SDK v2 can re-assume the role on demand.
|
|
368
|
+
|
|
362
369
|
while true; do
|
|
363
|
-
sleep
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
370
|
+
sleep 240 # 4 minutes
|
|
371
|
+
|
|
372
|
+
if [ -f "$AWS_ENV" ]; then
|
|
373
|
+
source "$AWS_ENV"
|
|
374
|
+
|
|
375
|
+
local tmp_token_file="${AWS_WEB_IDENTITY_TOKEN_FILE}.tmp"
|
|
376
|
+
local attempt=0
|
|
377
|
+
|
|
378
|
+
while [ "$attempt" -le 3 ]; do
|
|
379
|
+
if dx-jobutil-get-identity-token --aud "${jobTokenAudience}" --subject_claims "${jobTokenSubjectClaims}" > "$tmp_token_file"; then
|
|
380
|
+
mv -f "$tmp_token_file" "$AWS_WEB_IDENTITY_TOKEN_FILE"
|
|
381
|
+
|
|
382
|
+
break
|
|
383
|
+
else
|
|
384
|
+
echo "WARNING: AWS token refresh failed (attempt $((attempt+1))/3)" >&2
|
|
385
|
+
sleep 5 # wait 5s before retry
|
|
386
|
+
fi
|
|
387
|
+
attempt=$((attempt+1))
|
|
388
|
+
done
|
|
389
|
+
fi
|
|
367
390
|
done
|
|
368
391
|
}
|
|
369
392
|
|
|
@@ -553,8 +576,8 @@ get_resume_session_id() {
|
|
|
553
576
|
|
|
554
577
|
valid_id_pattern='^\{?[A-Z0-9a-z]{8}-[A-Z0-9a-z]{4}-[A-Z0-9a-z]{4}-[A-Z0-9a-z]{4}-[A-Z0-9a-z]{12}\}?$'
|
|
555
578
|
[[ "$PREV_JOB_SESSION_ID" =~ $valid_id_pattern ]] ||
|
|
556
|
-
dx-jobutil-report-error "Invalid resume value. Please provide either \"true\", \"last\", or \"sessionID\".
|
|
557
|
-
If a sessionID was provided, Nextflow cached content could not be found under $DX_CACHEDIR/$PREV_JOB_SESSION_ID/.
|
|
579
|
+
dx-jobutil-report-error "Invalid resume value. Please provide either \"true\", \"last\", or \"sessionID\".
|
|
580
|
+
If a sessionID was provided, Nextflow cached content could not be found under $DX_CACHEDIR/$PREV_JOB_SESSION_ID/.
|
|
558
581
|
Please provide the exact sessionID for \"resume\" or run without resume."
|
|
559
582
|
|
|
560
583
|
NXF_UUID=$PREV_JOB_SESSION_ID
|
|
@@ -596,8 +619,8 @@ check_no_concurrent_job_same_cache() {
|
|
|
596
619
|
)
|
|
597
620
|
|
|
598
621
|
[[ -n $FIRST_RESUMED_JOB && $DX_JOB_ID == $FIRST_RESUMED_JOB ]] ||
|
|
599
|
-
dx-jobutil-report-error "There is at least one other non-terminal state job with the same sessionID $NXF_UUID.
|
|
600
|
-
Please wait until all other jobs sharing the same sessionID to enter their terminal state and rerun,
|
|
622
|
+
dx-jobutil-report-error "There is at least one other non-terminal state job with the same sessionID $NXF_UUID.
|
|
623
|
+
Please wait until all other jobs sharing the same sessionID to enter their terminal state and rerun,
|
|
601
624
|
or run without preserve_cache set to true."
|
|
602
625
|
}
|
|
603
626
|
|
|
@@ -605,12 +628,12 @@ restore_cache_and_set_resume_cmd() {
|
|
|
605
628
|
# download latest cache.tar from $DX_CACHEDIR/$PREV_JOB_SESSION_ID/
|
|
606
629
|
PREV_JOB_CACHE_FILE=$(
|
|
607
630
|
dx api system findDataObjects \
|
|
608
|
-
'{"visibility": "either",
|
|
631
|
+
'{"visibility": "either",
|
|
609
632
|
"name":"cache.tar",
|
|
610
633
|
"scope": {
|
|
611
|
-
"project": "'$DX_PROJECT_CONTEXT_ID'",
|
|
612
|
-
"folder": "/.nextflow_cache_db/'$NXF_UUID'",
|
|
613
|
-
"recurse": false},
|
|
634
|
+
"project": "'$DX_PROJECT_CONTEXT_ID'",
|
|
635
|
+
"folder": "/.nextflow_cache_db/'$NXF_UUID'",
|
|
636
|
+
"recurse": false},
|
|
614
637
|
"describe": true}' 2>/dev/null |
|
|
615
638
|
jq -r '.results | sort_by(.describe.created)[-1] | .id // empty'
|
|
616
639
|
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
version = '0.400.1'
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dxpy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.400.1
|
|
4
4
|
Summary: DNAnexus Platform API bindings for Python
|
|
5
5
|
Home-page: https://github.com/dnanexus/dx-toolkit
|
|
6
6
|
Author: Aleksandra Zalcman, Andrey Kislyuk, Anurag Biyani, Geet Duggal, Katherine Lai, Kurt Jensen, Marek Hrvol, Ohad Rodeh, Phil Sung
|
|
7
7
|
Author-email: support@dnanexus.com
|
|
8
8
|
License: Apache Software License
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
Classifier: Environment :: Console
|
|
11
10
|
Classifier: Intended Audience :: Developers
|
|
12
11
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -17,8 +16,21 @@ Classifier: Programming Language :: Unix Shell
|
|
|
17
16
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
17
|
Requires-Python: >=3.8
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
19
|
+
Requires-Dist: argcomplete>=2.0.0; python_version >= "3.10"
|
|
20
|
+
Requires-Dist: argcomplete<2.0.0,>=1.9.4; python_version < "3.10"
|
|
21
|
+
Requires-Dist: websocket-client<1.8.0,>=1.6.0
|
|
22
|
+
Requires-Dist: python-dateutil>=2.5
|
|
23
|
+
Requires-Dist: psutil>=5.9.3
|
|
24
|
+
Requires-Dist: certifi>=2024.7.4
|
|
25
|
+
Requires-Dist: urllib3<2.2,>=1.25
|
|
26
|
+
Requires-Dist: pyreadline3==3.4.1; sys_platform == "win32"
|
|
27
|
+
Requires-Dist: colorama<=0.4.6,>=0.4.4; sys_platform == "win32"
|
|
28
|
+
Requires-Dist: crc32c>=2.7.1
|
|
20
29
|
Provides-Extra: pandas
|
|
30
|
+
Requires-Dist: pandas==1.3.5; extra == "pandas"
|
|
31
|
+
Requires-Dist: numpy<2.0.0; extra == "pandas"
|
|
21
32
|
Provides-Extra: xattr
|
|
33
|
+
Requires-Dist: xattr==0.10.1; (sys_platform == "linux2" or sys_platform == "linux") and extra == "xattr"
|
|
22
34
|
|
|
23
35
|
dxpy: DNAnexus Python API
|
|
24
36
|
=========================
|
|
@@ -125,5 +137,3 @@ We have the following convention for these scripts:
|
|
|
125
137
|
if __name__ == '__main__':
|
|
126
138
|
main()
|
|
127
139
|
```
|
|
128
|
-
|
|
129
|
-
|
|
@@ -111,6 +111,7 @@ dxpy/nextflow/app_asset_projects_ids_staging.json
|
|
|
111
111
|
dxpy/nextflow/awscli_assets.json
|
|
112
112
|
dxpy/nextflow/awscli_assets.staging.json
|
|
113
113
|
dxpy/nextflow/collect_images.py
|
|
114
|
+
dxpy/nextflow/default_nextflow_instance_types.json
|
|
114
115
|
dxpy/nextflow/nextaur_assets.json
|
|
115
116
|
dxpy/nextflow/nextaur_assets.staging.json
|
|
116
117
|
dxpy/nextflow/nextflow_assets.json
|
|
@@ -164,6 +165,22 @@ dxpy/utils/printing.py
|
|
|
164
165
|
dxpy/utils/resolver.py
|
|
165
166
|
dxpy/utils/spelling_corrector.py
|
|
166
167
|
dxpy/utils/version.py
|
|
168
|
+
scripts/dx-clone-asset
|
|
169
|
+
scripts/dx-docker
|
|
170
|
+
scripts/dx-download-all-inputs
|
|
171
|
+
scripts/dx-fetch-bundled-depends
|
|
172
|
+
scripts/dx-generate-dxapp
|
|
173
|
+
scripts/dx-jobutil-add-output
|
|
174
|
+
scripts/dx-jobutil-dxlink
|
|
175
|
+
scripts/dx-jobutil-get-identity-token
|
|
176
|
+
scripts/dx-jobutil-new-job
|
|
177
|
+
scripts/dx-jobutil-parse-link
|
|
178
|
+
scripts/dx-jobutil-report-error
|
|
179
|
+
scripts/dx-log-stream
|
|
180
|
+
scripts/dx-mount-all-inputs
|
|
181
|
+
scripts/dx-notebook-reconnect
|
|
182
|
+
scripts/dx-print-bash-vars
|
|
183
|
+
scripts/dx-upload-all-outputs
|
|
167
184
|
test/test_batch.py
|
|
168
185
|
test/test_create_cohort.py
|
|
169
186
|
test/test_describe.py
|