toil 6.0.0__tar.gz → 6.1.0__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.
- toil-6.1.0/PKG-INFO +123 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-cwl.txt +1 -1
- {toil-6.0.0 → toil-6.1.0}/requirements-dev.txt +4 -4
- {toil-6.0.0 → toil-6.1.0}/requirements-server.txt +1 -1
- {toil-6.0.0 → toil-6.1.0}/requirements.txt +1 -2
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/abstractBatchSystem.py +19 -4
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/abstractGridEngineBatchSystem.py +22 -22
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/cleanup_support.py +7 -3
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/lsf.py +7 -7
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/slurm.py +85 -14
- {toil-6.0.0 → toil-6.1.0}/src/toil/bus.py +38 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/common.py +20 -18
- {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/cwltoil.py +81 -63
- {toil-6.0.0 → toil-6.1.0}/src/toil/exceptions.py +1 -1
- {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/abstractFileStore.py +53 -4
- {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/cachingFileStore.py +4 -20
- {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/nonCachingFileStore.py +5 -14
- {toil-6.0.0 → toil-6.1.0}/src/toil/job.py +46 -30
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/abstractJobStore.py +21 -23
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/aws/utils.py +5 -4
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/fileJobStore.py +1 -1
- {toil-6.0.0 → toil-6.1.0}/src/toil/leader.py +17 -14
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/conversions.py +19 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/generatedEC2Lists.py +8 -8
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/io.py +28 -2
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/resources.py +8 -1
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/threading.py +27 -12
- {toil-6.0.0 → toil-6.1.0}/src/toil/options/common.py +5 -7
- {toil-6.0.0 → toil-6.1.0}/src/toil/options/wdl.py +5 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/abstractProvisioner.py +8 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/statsAndLogging.py +36 -8
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/test_slurm.py +21 -6
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/cwlTest.py +243 -151
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/docs/scriptsTest.py +2 -2
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/jobStores/jobStoreTest.py +7 -5
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/test_ec2.py +1 -1
- toil-6.1.0/src/toil/test/options/options.py +37 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/clusterTest.py +9 -8
- toil-6.1.0/src/toil/test/utils/__init__.py +13 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/utils/toilDebugTest.py +1 -1
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/utils/utilsTest.py +3 -3
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/wdl/wdltoil_test.py +91 -16
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilDebugFile.py +1 -1
- toil-6.1.0/src/toil/utils/toilStats.py +701 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilStatus.py +1 -1
- toil-6.1.0/src/toil/version.py +14 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/wdl/wdltoil.py +341 -189
- {toil-6.0.0 → toil-6.1.0}/src/toil/worker.py +31 -16
- toil-6.1.0/src/toil.egg-info/PKG-INFO +123 -0
- toil-6.1.0/src/toil.egg-info/SOURCES.txt +257 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/requires.txt +5 -6
- toil-6.0.0/.github/PULL_REQUEST_TEMPLATE.md +0 -37
- toil-6.0.0/.github/dependabot.yml +0 -10
- toil-6.0.0/.github/workflows/codeql-analysis.yml +0 -71
- toil-6.0.0/.gitignore +0 -25
- toil-6.0.0/.gitlab-ci.yml +0 -434
- toil-6.0.0/.readthedocs.yaml +0 -23
- toil-6.0.0/CODE_OF_CONDUCT.md +0 -46
- toil-6.0.0/CONTRIBUTING.md +0 -6
- toil-6.0.0/Makefile +0 -353
- toil-6.0.0/PKG-INFO +0 -42
- toil-6.0.0/ROADMAP.md +0 -37
- toil-6.0.0/attic/README.md +0 -407
- toil-6.0.0/attic/absolute_imports.py +0 -118
- toil-6.0.0/attic/jobTreeSlides.pdf +0 -0
- toil-6.0.0/attic/toil-sort-example.py +0 -173
- toil-6.0.0/common.mk +0 -83
- toil-6.0.0/contrib/admin/buildkit-deployment.yml +0 -127
- toil-6.0.0/contrib/admin/cleanup_aws_resources.py +0 -329
- toil-6.0.0/contrib/admin/mypy-with-ignore.py +0 -109
- toil-6.0.0/contrib/admin/remove_trailing_whitespace.py +0 -74
- toil-6.0.0/contrib/admin/test-pr +0 -26
- toil-6.0.0/contrib/admin/wheel-of-issues +0 -43
- toil-6.0.0/contrib/assets/toil-slug-logo-wordmark-2022.svg +0 -283
- toil-6.0.0/contrib/hooks/lib.py +0 -177
- toil-6.0.0/contrib/hooks/mypy-after-commit.py +0 -35
- toil-6.0.0/contrib/hooks/mypy-before-push.py +0 -87
- toil-6.0.0/contrib/mypy-stubs/configargparse/__init__.pyi +0 -5
- toil-6.0.0/contrib/mypy-stubs/configargparse/configargparse.pyi +0 -35
- toil-6.0.0/contrib/mypy-stubs/dill/__init__.pyi +0 -4
- toil-6.0.0/contrib/mypy-stubs/dill/_dill.pyi +0 -78
- toil-6.0.0/contrib/mypy-stubs/pubsub/__init__.pyi +0 -4
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/__init__.pyi +0 -23
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/annotations.pyi +0 -3
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/callables.pyi +0 -34
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/listener.pyi +0 -50
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/notificationmgr.pyi +0 -45
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/publisher.pyi +0 -32
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicargspec.pyi +0 -73
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicdefnprovider.pyi +0 -97
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicexc.pyi +0 -26
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicmgr.pyi +0 -53
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicobj.pyi +0 -75
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topictreetraverser.pyi +0 -19
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicutils.pyi +0 -15
- toil-6.0.0/contrib/mypy-stubs/pubsub/core/weakmethod.pyi +0 -9
- toil-6.0.0/contrib/mypy-stubs/pubsub/pub.pyi +0 -43
- toil-6.0.0/contrib/mypy-stubs/pubsub/utils/__init__.pyi +0 -7
- toil-6.0.0/contrib/mypy-stubs/pubsub/utils/exchandling.pyi +0 -20
- toil-6.0.0/contrib/mypy-stubs/pubsub/utils/misc.pyi +0 -5
- toil-6.0.0/contrib/mypy-stubs/pubsub/utils/notification.pyi +0 -63
- toil-6.0.0/contrib/mypy-stubs/pubsub/utils/topictreeprinter.pyi +0 -24
- toil-6.0.0/contrib/mypy-stubs/pubsub/utils/xmltopicdefnprovider.pyi +0 -27
- toil-6.0.0/contrib/mypy-stubs/tes/client.pyi +0 -41
- toil-6.0.0/contrib/mypy-stubs/tes/models.pyi +0 -191
- toil-6.0.0/contrib/pod-murder-bot/murder.yaml +0 -34
- toil-6.0.0/contrib/pod-murder-bot/podKiller.sh +0 -26
- toil-6.0.0/contrib/slurm-test/check_out.sh +0 -17
- toil-6.0.0/contrib/slurm-test/docker-compose.yml +0 -71
- toil-6.0.0/contrib/slurm-test/expected_out_basic.txt +0 -1
- toil-6.0.0/contrib/slurm-test/expected_out_sort.txt +0 -1000
- toil-6.0.0/contrib/slurm-test/fileToSort.txt +0 -1000
- toil-6.0.0/contrib/slurm-test/slurm.conf +0 -151
- toil-6.0.0/contrib/slurm-test/slurm_test.sh +0 -27
- toil-6.0.0/contrib/slurm-test/toil_workflow.py +0 -16
- toil-6.0.0/contrib/toil-ci-prebake/Dockerfile +0 -47
- toil-6.0.0/contrib/toil-cwl-runner/README.rst +0 -2
- toil-6.0.0/contrib/toil-cwl-runner/pyproject.toml +0 -6
- toil-6.0.0/contrib/toil-cwl-runner/setup.cfg +0 -17
- toil-6.0.0/dashboard/grafana/Dockerfile +0 -8
- toil-6.0.0/dashboard/grafana/toil_dashboard.json +0 -592
- toil-6.0.0/dashboard/mtail/Dockerfile +0 -7
- toil-6.0.0/dashboard/mtail/toil.mtail +0 -41
- toil-6.0.0/dashboard/prometheus/Dockerfile +0 -8
- toil-6.0.0/dashboard/prometheus/prometheus.yml +0 -46
- toil-6.0.0/dashboard/prometheus/run.sh +0 -9
- toil-6.0.0/docker/Dockerfile.py +0 -216
- toil-6.0.0/docker/customDockerInit.sh +0 -16
- toil-6.0.0/docker/extra-debs.tsv +0 -5
- toil-6.0.0/docker/singularity-wrapper.sh +0 -96
- toil-6.0.0/docker/waitForKey.sh +0 -2
- toil-6.0.0/docs/Makefile +0 -20
- toil-6.0.0/docs/_static/favicon.ico +0 -0
- toil-6.0.0/docs/_static/logo.png +0 -0
- toil-6.0.0/docs/_static/shortcut.png +0 -0
- toil-6.0.0/docs/appendices/architecture.rst +0 -248
- toil-6.0.0/docs/appendices/aws_min_permissions.rst +0 -27
- toil-6.0.0/docs/appendices/caching_benefits.png +0 -0
- toil-6.0.0/docs/appendices/deploy.rst +0 -201
- toil-6.0.0/docs/appendices/environment_vars.rst +0 -246
- toil-6.0.0/docs/appendices/toil_architecture.jpg +0 -0
- toil-6.0.0/docs/conf.py +0 -214
- toil-6.0.0/docs/contributing/checklists.rst +0 -52
- toil-6.0.0/docs/contributing/contributing.rst +0 -607
- toil-6.0.0/docs/cwl/introduction.rst +0 -10
- toil-6.0.0/docs/cwl/running.rst +0 -245
- toil-6.0.0/docs/gettingStarted/googleScreenShot.png +0 -0
- toil-6.0.0/docs/gettingStarted/googleScreenShot2.png +0 -0
- toil-6.0.0/docs/gettingStarted/install.rst +0 -217
- toil-6.0.0/docs/gettingStarted/quickStart.rst +0 -638
- toil-6.0.0/docs/index.rst +0 -91
- toil-6.0.0/docs/python/developing.rst +0 -655
- toil-6.0.0/docs/python/toilAPI.rst +0 -10
- toil-6.0.0/docs/python/toilAPIBatchsystem.rst +0 -48
- toil-6.0.0/docs/python/toilAPIExceptions.rst +0 -35
- toil-6.0.0/docs/python/toilAPIFilestore.rst +0 -14
- toil-6.0.0/docs/python/toilAPIJobFunctions.rst +0 -42
- toil-6.0.0/docs/python/toilAPIJobstore.rst +0 -12
- toil-6.0.0/docs/python/toilAPIMethods.rst +0 -20
- toil-6.0.0/docs/python/toilAPIRunner.rst +0 -10
- toil-6.0.0/docs/python/toilAPIService.rst +0 -10
- toil-6.0.0/docs/running/cliOptions.rst +0 -613
- toil-6.0.0/docs/running/cloud/amazon.rst +0 -554
- toil-6.0.0/docs/running/cloud/amazonaddkeypair.png +0 -0
- toil-6.0.0/docs/running/cloud/cloud.rst +0 -65
- toil-6.0.0/docs/running/cloud/clusterUtils.rst +0 -321
- toil-6.0.0/docs/running/cloud/dashboard_screenshot.png +0 -0
- toil-6.0.0/docs/running/cloud/gce.rst +0 -109
- toil-6.0.0/docs/running/cloud/googleScreenShot.png +0 -0
- toil-6.0.0/docs/running/cloud/googleScreenShot2.png +0 -0
- toil-6.0.0/docs/running/cloud/kubernetes.rst +0 -407
- toil-6.0.0/docs/running/debugging.rst +0 -41
- toil-6.0.0/docs/running/hpcEnvironments.rst +0 -70
- toil-6.0.0/docs/running/introduction.rst +0 -73
- toil-6.0.0/docs/running/server/docker-compose.yml +0 -47
- toil-6.0.0/docs/running/server/wes.rst +0 -403
- toil-6.0.0/docs/vendor/sphinxcontrib/__init__.py +0 -10
- toil-6.0.0/docs/vendor/sphinxcontrib/fulltoc.py +0 -93
- toil-6.0.0/docs/wdl/conformance.rst +0 -53
- toil-6.0.0/docs/wdl/developing.rst +0 -63
- toil-6.0.0/docs/wdl/introduction.rst +0 -18
- toil-6.0.0/docs/wdl/running.rst +0 -73
- toil-6.0.0/setup_gitlab_docker.py +0 -38
- toil-6.0.0/setup_gitlab_ssh.py +0 -38
- toil-6.0.0/src/toil/server/api_spec/LICENSE +0 -201
- toil-6.0.0/src/toil/server/api_spec/README.rst +0 -5
- toil-6.0.0/src/toil/test/cactus/pestis.tar.gz +0 -0
- toil-6.0.0/src/toil/test/cwl/2.fasta +0 -11
- toil-6.0.0/src/toil/test/cwl/2.fastq +0 -12
- toil-6.0.0/src/toil/test/cwl/directory/directory/file.txt +0 -15
- toil-6.0.0/src/toil/test/cwl/download_directory_file.json +0 -4
- toil-6.0.0/src/toil/test/cwl/download_directory_s3.json +0 -4
- toil-6.0.0/src/toil/test/cwl/download_file.json +0 -6
- toil-6.0.0/src/toil/test/cwl/download_http.json +0 -6
- toil-6.0.0/src/toil/test/cwl/download_https.json +0 -6
- toil-6.0.0/src/toil/test/cwl/download_s3.json +0 -6
- toil-6.0.0/src/toil/test/cwl/download_subdirectory_file.json +0 -5
- toil-6.0.0/src/toil/test/cwl/download_subdirectory_s3.json +0 -5
- toil-6.0.0/src/toil/test/cwl/empty.json +0 -1
- toil-6.0.0/src/toil/test/cwl/mock_mpi/fake_mpi.yml +0 -8
- toil-6.0.0/src/toil/test/cwl/mock_mpi/fake_mpi_run.py +0 -37
- toil-6.0.0/src/toil/test/cwl/preemptible_expression.json +0 -1
- toil-6.0.0/src/toil/test/cwl/revsort-job.json +0 -6
- toil-6.0.0/src/toil/test/cwl/s3_secondary_file.json +0 -16
- toil-6.0.0/src/toil/test/cwl/seqtk_seq_job.json +0 -6
- toil-6.0.0/src/toil/test/cwl/stream.json +0 -6
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.dat +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f0 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f1 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f1i +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f2 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f2_TSM0 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f3 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f3_TSM0 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f4 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f4_TSM0 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f5 +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.info +0 -0
- toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.lock +0 -0
- toil-6.0.0/src/toil/test/cwl/whale.txt +0 -16
- toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello.cwl +0 -14
- toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello1.yml +0 -1
- toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello2.yml +0 -1
- toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello3.yml +0 -1
- toil-6.0.0/src/toil/test/docs/scripts/example_alwaysfail.py +0 -38
- toil-6.0.0/src/toil/test/docs/scripts/example_cachingbenchmark.py +0 -108
- toil-6.0.0/src/toil/test/docs/scripts/stagingExampleFiles/in.txt +0 -1
- toil-6.0.0/src/toil/test/docs/scripts/stagingExampleFiles/out.txt +0 -2
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_arguments.py +0 -23
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_cwlexample.py +0 -56
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_discoverfiles.py +0 -39
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_docker.py +0 -21
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_dynamic.py +0 -24
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_encapsulation.py +0 -28
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_encapsulation2.py +0 -29
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_helloworld.py +0 -15
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_invokeworkflow.py +0 -27
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_invokeworkflow2.py +0 -30
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_jobfunctions.py +0 -22
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_managing.py +0 -29
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_managing2.py +0 -54
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_multiplejobs.py +0 -25
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_multiplejobs2.py +0 -21
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_multiplejobs3.py +0 -22
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_promises.py +0 -25
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_promises2.py +0 -28
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_quickstart.py +0 -22
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_requirements.py +0 -36
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_services.py +0 -45
- toil-6.0.0/src/toil/test/docs/scripts/tutorial_staging.py +0 -35
- toil-6.0.0/src/toil/test/sort/sort.py +0 -260
- toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/B_file.txt +0 -1
- toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/debugWorkflow.py +0 -181
- toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/mkFile.py +0 -15
- toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/sleep.cwl +0 -12
- toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/sleep.yaml +0 -1
- toil-6.0.0/src/toil/test/wdl/md5sum/empty_file.json +0 -1
- toil-6.0.0/src/toil/test/wdl/md5sum/md5sum-gs.json +0 -1
- toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.1.0.wdl +0 -31
- toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.input +0 -1
- toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.json +0 -1
- toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.wdl +0 -25
- toil-6.0.0/src/toil/test/wdl/miniwdl_self_test/inputs-namespaced.json +0 -1
- toil-6.0.0/src/toil/test/wdl/miniwdl_self_test/inputs.json +0 -1
- toil-6.0.0/src/toil/test/wdl/miniwdl_self_test/self_test.wdl +0 -40
- toil-6.0.0/src/toil/test/wdl/standard_library/as_map.json +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/as_map_as_input.wdl +0 -23
- toil-6.0.0/src/toil/test/wdl/standard_library/as_pairs.json +0 -7
- toil-6.0.0/src/toil/test/wdl/standard_library/as_pairs_as_input.wdl +0 -23
- toil-6.0.0/src/toil/test/wdl/standard_library/ceil.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/ceil_as_command.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/ceil_as_input.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/collect_by_key.json +0 -1
- toil-6.0.0/src/toil/test/wdl/standard_library/collect_by_key_as_input.wdl +0 -23
- toil-6.0.0/src/toil/test/wdl/standard_library/cross.json +0 -11
- toil-6.0.0/src/toil/test/wdl/standard_library/cross_as_input.wdl +0 -19
- toil-6.0.0/src/toil/test/wdl/standard_library/flatten.json +0 -7
- toil-6.0.0/src/toil/test/wdl/standard_library/flatten_as_input.wdl +0 -18
- toil-6.0.0/src/toil/test/wdl/standard_library/floor.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/floor_as_command.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/floor_as_input.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/keys.json +0 -8
- toil-6.0.0/src/toil/test/wdl/standard_library/keys_as_input.wdl +0 -24
- toil-6.0.0/src/toil/test/wdl/standard_library/length.json +0 -7
- toil-6.0.0/src/toil/test/wdl/standard_library/length_as_input.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/length_as_input_with_map.json +0 -7
- toil-6.0.0/src/toil/test/wdl/standard_library/length_as_input_with_map.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/length_invalid.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/range.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/range_0.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/range_as_input.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/range_invalid.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_boolean.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_boolean_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/read_float.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_float_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/read_int.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_int_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/read_json.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_json_as_output.wdl +0 -31
- toil-6.0.0/src/toil/test/wdl/standard_library/read_lines.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_lines_as_output.wdl +0 -31
- toil-6.0.0/src/toil/test/wdl/standard_library/read_map.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_map_as_output.wdl +0 -31
- toil-6.0.0/src/toil/test/wdl/standard_library/read_string.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_string_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/read_tsv.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/read_tsv_as_output.wdl +0 -31
- toil-6.0.0/src/toil/test/wdl/standard_library/round.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/round_as_command.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/round_as_input.wdl +0 -16
- toil-6.0.0/src/toil/test/wdl/standard_library/size.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/size_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/size_as_output.wdl +0 -36
- toil-6.0.0/src/toil/test/wdl/standard_library/stderr.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/stderr_as_output.wdl +0 -30
- toil-6.0.0/src/toil/test/wdl/standard_library/stdout.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/stdout_as_output.wdl +0 -30
- toil-6.0.0/src/toil/test/wdl/standard_library/sub.json +0 -3
- toil-6.0.0/src/toil/test/wdl/standard_library/sub_as_input.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/sub_as_input_with_file.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/transpose.json +0 -6
- toil-6.0.0/src/toil/test/wdl/standard_library/transpose_as_input.wdl +0 -18
- toil-6.0.0/src/toil/test/wdl/standard_library/write_json.json +0 -6
- toil-6.0.0/src/toil/test/wdl/standard_library/write_json_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/write_lines.json +0 -7
- toil-6.0.0/src/toil/test/wdl/standard_library/write_lines_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/write_map.json +0 -6
- toil-6.0.0/src/toil/test/wdl/standard_library/write_map_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/write_tsv.json +0 -6
- toil-6.0.0/src/toil/test/wdl/standard_library/write_tsv_as_command.wdl +0 -17
- toil-6.0.0/src/toil/test/wdl/standard_library/zip.json +0 -12
- toil-6.0.0/src/toil/test/wdl/standard_library/zip_as_input.wdl +0 -19
- toil-6.0.0/src/toil/test/wdl/test.csv +0 -3
- toil-6.0.0/src/toil/test/wdl/test.tsv +0 -3
- toil-6.0.0/src/toil/test/wdl/testfiles/test.json +0 -4
- toil-6.0.0/src/toil/test/wdl/testfiles/test_boolean.txt +0 -1
- toil-6.0.0/src/toil/test/wdl/testfiles/test_float.txt +0 -1
- toil-6.0.0/src/toil/test/wdl/testfiles/test_int.txt +0 -1
- toil-6.0.0/src/toil/test/wdl/testfiles/test_lines.txt +0 -5
- toil-6.0.0/src/toil/test/wdl/testfiles/test_map.txt +0 -2
- toil-6.0.0/src/toil/test/wdl/testfiles/test_string.txt +0 -1
- toil-6.0.0/src/toil/test/wdl/testfiles/vocab.json +0 -1
- toil-6.0.0/src/toil/test/wdl/testfiles/vocab.wdl +0 -66
- toil-6.0.0/src/toil/test/wdl/wdl_specification/type_pair.json +0 -23
- toil-6.0.0/src/toil/test/wdl/wdl_specification/type_pair_basic.wdl +0 -36
- toil-6.0.0/src/toil/test/wdl/wdl_specification/type_pair_with_files.wdl +0 -36
- toil-6.0.0/src/toil/test/wdl/wdl_specification/v1_spec.json +0 -1
- toil-6.0.0/src/toil/test/wdl/wdl_specification/v1_spec_declaration.wdl +0 -39
- toil-6.0.0/src/toil/utils/toilStats.py +0 -658
- toil-6.0.0/src/toil/version.py +0 -14
- toil-6.0.0/src/toil.egg-info/PKG-INFO +0 -42
- toil-6.0.0/src/toil.egg-info/SOURCES.txt +0 -554
- toil-6.0.0/version_template.py +0 -181
- {toil-6.0.0 → toil-6.1.0}/LICENSE +0 -0
- {toil-6.0.0 → toil-6.1.0}/MANIFEST.in +0 -0
- {toil-6.0.0 → toil-6.1.0}/README.rst +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-aws.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-encryption.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-google.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-htcondor.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-kubernetes.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-mesos.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/requirements-wdl.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/setup.cfg +0 -0
- {toil-6.0.0 → toil-6.1.0}/setup.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/awsBatch.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/contained_executor.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/gridengine.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/htcondor.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/kubernetes.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/local_support.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/lsfHelper.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/batchSystem.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/conftest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/executor.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/test/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/options.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/registry.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/singleMachine.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/torque.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/conftest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/utils.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/deferred.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/__init__.py +0 -0
- {toil-6.0.0/contrib/mypy-stubs/tes → toil-6.1.0/src/toil/jobStores}/__init__.py +0 -0
- {toil-6.0.0/src/toil/jobStores → toil-6.1.0/src/toil/jobStores/aws}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/aws/jobStore.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/conftest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/googleJobStore.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/utils.py +0 -0
- {toil-6.0.0/src/toil/jobStores/aws → toil-6.1.0/src/toil/lib}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/accelerators.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/ami.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/iam.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/session.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/utils.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/bioio.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/compatibility.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/docker.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/ec2.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/ec2nodes.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/_dummy.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/_nacl.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/conftest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/exceptions.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/expando.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/humanize.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/iterables.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/memoize.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/misc.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/objects.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/retry.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/lib/throttle.py +0 -0
- {toil-6.0.0/src/toil/lib → toil-6.1.0/src/toil/options}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/options/cwl.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/aws/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/aws/awsProvisioner.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/clusterScaler.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/gceProvisioner.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/node.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/realtimeLogger.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/resource.py +0 -0
- {toil-6.0.0/src/toil/options → toil-6.1.0/src/toil/server}/__init__.py +0 -0
- {toil-6.0.0/src/toil/server → toil-6.1.0/src/toil/server/api_spec}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/api_spec/workflow_execution_service.swagger.yaml +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/app.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/celery_app.py +0 -0
- {toil-6.0.0/src/toil/server/api_spec → toil-6.1.0/src/toil/server/cli}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/cli/wes_cwl_runner.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/utils.py +0 -0
- {toil-6.0.0/src/toil/server/cli → toil-6.1.0/src/toil/server/wes}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/abstract_backend.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/amazon_wes_utils.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/tasks.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/toil_backend.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/server/wsgi_app.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/serviceManager.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/batchSystemTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/test_lsf_helper.py +0 -0
- {toil-6.0.0/src/toil/server/wes → toil-6.1.0/src/toil/test/cactus}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cactus/test_cactus_integration.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/alwaysfails.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/colon_test_output.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/colon_test_output_job.yaml +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/conditional_wf.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/conditional_wf.yaml +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/conftest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/directory_from_directory.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/download.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/download_directory.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/download_subdirectory.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo-stderr.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo-stdout-log-dir.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo_string.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo_string_scatter_capture_stdout.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/file_from_directory.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/glob_dir.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/load_contents.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/mpi_simple.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/nvidia_smi.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/preemptible.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/preemptible_expression.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revsort.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revsort2.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revtool.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revtool2.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/s3_secondary_file.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/seqtk_seq.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/sorttool.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/stream.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/test_filename_conflict_detection.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/test_filename_conflict_detection_at_root.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/test_filename_conflict_resolution.cwl +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/docs/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/jobStores/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/test_iam.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/test_s3.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/test_utils.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/dockerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/test_conversions.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/test_misc.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/MesosDataStructuresTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/helloWorld.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/stress.py +0 -0
- {toil-6.0.0/src/toil/test/provisioners → toil-6.1.0/src/toil/test/options}/__init__.py +0 -0
- {toil-6.0.0/src/toil/test/provisioners/aws → toil-6.1.0/src/toil/test/provisioners}/__init__.py +0 -0
- {toil-6.0.0/src/toil/test/server → toil-6.1.0/src/toil/test/provisioners/aws}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/aws/awsProvisionerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/clusterScalerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/gceProvisionerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/provisionerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/restartScript.py +0 -0
- {toil-6.0.0/src/toil/test/sort → toil-6.1.0/src/toil/test/server}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/server/serverTest.py +0 -0
- {toil-6.0.0/src/toil/test/src → toil-6.1.0/src/toil/test/sort}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/sort/restart_sort.py +0 -0
- {toil-6.0.0/contrib/slurm-test → toil-6.1.0/src/toil/test/sort}/sort.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/sort/sortTest.py +0 -0
- {toil-6.0.0/src/toil/test/utils → toil-6.1.0/src/toil/test/src}/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/autoDeploymentTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/busTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/checkpointTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/deferredFunctionTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/dockerCheckTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/fileStoreTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/helloWorldTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/importExportFileTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobDescriptionTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobEncapsulationTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobFileStoreTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobServiceTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/miscTests.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/promisedRequirementTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/promisesTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/realtimeLoggerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/regularLogTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/resourceTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/restartDAGTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/resumabilityTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/retainTempDirTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/systemTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/threadingTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/toilContextManagerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/userDefinedJobArgTypeTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/workerTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/utils/toilKillTest.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/test/wdl/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/toilState.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilClean.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilConfig.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilDebugJob.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilDestroyCluster.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilKill.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilLaunchCluster.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilMain.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilRsyncCluster.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilServer.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilSshCluster.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilUpdateEC2Instances.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/wdl/__init__.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil/wdl/utils.py +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/dependency_links.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/entry_points.txt +0 -0
- {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/top_level.txt +0 -0
toil-6.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: toil
|
|
3
|
+
Version: 6.1.0
|
|
4
|
+
Summary: Pipeline management software for clusters.
|
|
5
|
+
Home-page: https://github.com/DataBiosphere/toil
|
|
6
|
+
Author: Benedict Paten and the Toil community
|
|
7
|
+
Author-email: toil-community@googlegroups.com
|
|
8
|
+
License: Apache License v2.0
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Intended Audience :: Healthcare Industry
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Natural Language :: English
|
|
16
|
+
Classifier: Operating System :: MacOS :: MacOS X
|
|
17
|
+
Classifier: Operating System :: POSIX
|
|
18
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
27
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
28
|
+
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
|
|
29
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
30
|
+
Classifier: Topic :: Utilities
|
|
31
|
+
Requires-Python: >=3.8
|
|
32
|
+
License-File: LICENSE
|
|
33
|
+
Requires-Dist: dill<0.4,>=0.3.2
|
|
34
|
+
Requires-Dist: requests<3,>=2
|
|
35
|
+
Requires-Dist: docker<8,>=6.1.0
|
|
36
|
+
Requires-Dist: urllib3<3,>=1.26.0
|
|
37
|
+
Requires-Dist: python-dateutil
|
|
38
|
+
Requires-Dist: psutil<6,>=3.0.1
|
|
39
|
+
Requires-Dist: PyPubSub<5,>=4.0.3
|
|
40
|
+
Requires-Dist: addict<2.5,>=2.2.1
|
|
41
|
+
Requires-Dist: pytz>=2012
|
|
42
|
+
Requires-Dist: enlighten<2,>=1.5.2
|
|
43
|
+
Requires-Dist: configargparse<2,>=1.7
|
|
44
|
+
Requires-Dist: ruamel.yaml>=0.15
|
|
45
|
+
Requires-Dist: pyyaml<7,>=6
|
|
46
|
+
Requires-Dist: typing-extensions<5,>=4.6.2
|
|
47
|
+
Provides-Extra: aws
|
|
48
|
+
Requires-Dist: boto<3,>=2.48.0; extra == "aws"
|
|
49
|
+
Requires-Dist: boto3-stubs[boto3,iam,s3,sdb,sts]<2,>=1.28.3.post2; extra == "aws"
|
|
50
|
+
Requires-Dist: mypy-boto3-iam<2,>=1.28.3.post2; extra == "aws"
|
|
51
|
+
Requires-Dist: moto<5,>=4.1.11; extra == "aws"
|
|
52
|
+
Provides-Extra: cwl
|
|
53
|
+
Requires-Dist: cwltool==3.1.20240112164112; extra == "cwl"
|
|
54
|
+
Requires-Dist: schema-salad<9,>=8.4.20230128170514; extra == "cwl"
|
|
55
|
+
Requires-Dist: galaxy-tool-util<23; extra == "cwl"
|
|
56
|
+
Requires-Dist: galaxy-util<23; extra == "cwl"
|
|
57
|
+
Requires-Dist: ruamel.yaml<=0.19,>=0.15; extra == "cwl"
|
|
58
|
+
Requires-Dist: ruamel.yaml.clib>=0.2.6; extra == "cwl"
|
|
59
|
+
Requires-Dist: networkx!=2.8.1,<4; extra == "cwl"
|
|
60
|
+
Requires-Dist: CacheControl[filecache]; extra == "cwl"
|
|
61
|
+
Provides-Extra: encryption
|
|
62
|
+
Requires-Dist: pynacl<2,>=1.4.0; extra == "encryption"
|
|
63
|
+
Provides-Extra: google
|
|
64
|
+
Requires-Dist: apache-libcloud<3,>=2.2.1; extra == "google"
|
|
65
|
+
Requires-Dist: google-cloud-storage<=2.8.0,>=2; extra == "google"
|
|
66
|
+
Requires-Dist: google-auth<3,>=2.18.1; extra == "google"
|
|
67
|
+
Provides-Extra: kubernetes
|
|
68
|
+
Requires-Dist: kubernetes<22,>=12.0.1; extra == "kubernetes"
|
|
69
|
+
Requires-Dist: kubernetes-stubs==v22.6.0post1; extra == "kubernetes"
|
|
70
|
+
Requires-Dist: types-urllib3; extra == "kubernetes"
|
|
71
|
+
Requires-Dist: types-PyYAML; extra == "kubernetes"
|
|
72
|
+
Requires-Dist: idna>=2; extra == "kubernetes"
|
|
73
|
+
Provides-Extra: wdl
|
|
74
|
+
Requires-Dist: miniwdl==1.11.1; extra == "wdl"
|
|
75
|
+
Requires-Dist: wdlparse==0.1.0; extra == "wdl"
|
|
76
|
+
Requires-Dist: graphlib-backport==1.0; python_version < "3.9" and extra == "wdl"
|
|
77
|
+
Provides-Extra: server
|
|
78
|
+
Requires-Dist: connexion[swagger-ui]<3,>=2.10.0; extra == "server"
|
|
79
|
+
Requires-Dist: flask<3,>=2.0; extra == "server"
|
|
80
|
+
Requires-Dist: werkzeug<3,>=2.0; extra == "server"
|
|
81
|
+
Requires-Dist: flask-cors==4.0.0; extra == "server"
|
|
82
|
+
Requires-Dist: gunicorn==21.2.0; extra == "server"
|
|
83
|
+
Requires-Dist: celery<6,>=5.1.0; extra == "server"
|
|
84
|
+
Requires-Dist: wes-service<5,>=4.0.0; extra == "server"
|
|
85
|
+
Requires-Dist: ruamel.yaml<0.19,>=0.15; extra == "server"
|
|
86
|
+
Provides-Extra: htcondor
|
|
87
|
+
Requires-Dist: htcondor<11,>=10.2.0.post1; sys_platform != "darwin" and extra == "htcondor"
|
|
88
|
+
Provides-Extra: mesos
|
|
89
|
+
Requires-Dist: pymesos<0.4,>=0.3.15; python_version < "3.11" and extra == "mesos"
|
|
90
|
+
Provides-Extra: all
|
|
91
|
+
Requires-Dist: boto<3,>=2.48.0; extra == "all"
|
|
92
|
+
Requires-Dist: boto3-stubs[boto3,iam,s3,sdb,sts]<2,>=1.28.3.post2; extra == "all"
|
|
93
|
+
Requires-Dist: mypy-boto3-iam<2,>=1.28.3.post2; extra == "all"
|
|
94
|
+
Requires-Dist: moto<5,>=4.1.11; extra == "all"
|
|
95
|
+
Requires-Dist: cwltool==3.1.20240112164112; extra == "all"
|
|
96
|
+
Requires-Dist: schema-salad<9,>=8.4.20230128170514; extra == "all"
|
|
97
|
+
Requires-Dist: galaxy-tool-util<23; extra == "all"
|
|
98
|
+
Requires-Dist: galaxy-util<23; extra == "all"
|
|
99
|
+
Requires-Dist: ruamel.yaml<=0.19,>=0.15; extra == "all"
|
|
100
|
+
Requires-Dist: ruamel.yaml.clib>=0.2.6; extra == "all"
|
|
101
|
+
Requires-Dist: networkx!=2.8.1,<4; extra == "all"
|
|
102
|
+
Requires-Dist: CacheControl[filecache]; extra == "all"
|
|
103
|
+
Requires-Dist: pynacl<2,>=1.4.0; extra == "all"
|
|
104
|
+
Requires-Dist: apache-libcloud<3,>=2.2.1; extra == "all"
|
|
105
|
+
Requires-Dist: google-cloud-storage<=2.8.0,>=2; extra == "all"
|
|
106
|
+
Requires-Dist: google-auth<3,>=2.18.1; extra == "all"
|
|
107
|
+
Requires-Dist: kubernetes<22,>=12.0.1; extra == "all"
|
|
108
|
+
Requires-Dist: kubernetes-stubs==v22.6.0post1; extra == "all"
|
|
109
|
+
Requires-Dist: types-urllib3; extra == "all"
|
|
110
|
+
Requires-Dist: types-PyYAML; extra == "all"
|
|
111
|
+
Requires-Dist: idna>=2; extra == "all"
|
|
112
|
+
Requires-Dist: miniwdl==1.11.1; extra == "all"
|
|
113
|
+
Requires-Dist: wdlparse==0.1.0; extra == "all"
|
|
114
|
+
Requires-Dist: graphlib-backport==1.0; python_version < "3.9" and extra == "all"
|
|
115
|
+
Requires-Dist: connexion[swagger-ui]<3,>=2.10.0; extra == "all"
|
|
116
|
+
Requires-Dist: flask<3,>=2.0; extra == "all"
|
|
117
|
+
Requires-Dist: werkzeug<3,>=2.0; extra == "all"
|
|
118
|
+
Requires-Dist: flask-cors==4.0.0; extra == "all"
|
|
119
|
+
Requires-Dist: gunicorn==21.2.0; extra == "all"
|
|
120
|
+
Requires-Dist: celery<6,>=5.1.0; extra == "all"
|
|
121
|
+
Requires-Dist: wes-service<5,>=4.0.0; extra == "all"
|
|
122
|
+
Requires-Dist: ruamel.yaml<0.19,>=0.15; extra == "all"
|
|
123
|
+
Requires-Dist: pymesos<0.4,>=0.3.15; python_version < "3.11" and extra == "all"
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
pytest>=6.2.1,<
|
|
1
|
+
pytest>=6.2.1,<9
|
|
2
2
|
pytest-cov>=2.12.1,<5
|
|
3
3
|
pytest-timeout>=1.4.2,<3
|
|
4
4
|
stubserver>=1.1,<2
|
|
5
|
-
setuptools>=65.5.1,<
|
|
5
|
+
setuptools>=65.5.1,<70
|
|
6
6
|
sphinx>=7,<8
|
|
7
7
|
sphinx-autoapi>=2.1.1,<3
|
|
8
8
|
# astroid 3 won't work until some sphinx-autoapi release after 2.1.1
|
|
9
9
|
astroid>=2.15,<3
|
|
10
|
-
sphinx-autodoc-typehints>=1.24.0,<
|
|
10
|
+
sphinx-autodoc-typehints>=1.24.0,<3
|
|
11
11
|
sphinxcontrib-autoprogram==0.1.8
|
|
12
12
|
cwltest>=2.2.20211116163652
|
|
13
13
|
mypy==1.8.0
|
|
14
14
|
types-requests
|
|
15
15
|
types-setuptools
|
|
16
|
-
types-boto
|
|
16
|
+
types-boto<2.49.18.20240205
|
|
17
17
|
types-pytz
|
|
18
18
|
flake8>=3.8.4,<8
|
|
19
19
|
flake8-bugbear>=20.11.1,<25
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
dill>=0.3.2, <0.4
|
|
2
2
|
requests>=2, <3
|
|
3
|
-
docker>=
|
|
3
|
+
docker>=6.1.0, <8
|
|
4
4
|
# Work around https://github.com/docker/docker-py/issues/3113
|
|
5
5
|
urllib3>=1.26.0,<3
|
|
6
6
|
python-dateutil
|
|
@@ -11,6 +11,5 @@ pytz>=2012
|
|
|
11
11
|
enlighten>=1.5.2, <2
|
|
12
12
|
configargparse>=1.7,<2
|
|
13
13
|
ruamel.yaml>=0.15
|
|
14
|
-
ruamel.yaml.string>=0.1.1
|
|
15
14
|
pyyaml>=6,<7
|
|
16
15
|
typing-extensions>=4.6.2, <5
|
|
@@ -59,13 +59,28 @@ class BatchJobExitReason(enum.IntEnum):
|
|
|
59
59
|
MEMLIMIT: int = 6
|
|
60
60
|
"""Job hit batch system imposed memory limit."""
|
|
61
61
|
|
|
62
|
+
@classmethod
|
|
63
|
+
def to_string(cls, value: int) -> str:
|
|
64
|
+
"""
|
|
65
|
+
Convert to human-readable string.
|
|
66
|
+
|
|
67
|
+
Given an int that may be or may be equal to a value from the enum,
|
|
68
|
+
produce the string value of its matching enum entry, or a stringified
|
|
69
|
+
int.
|
|
70
|
+
"""
|
|
71
|
+
try:
|
|
72
|
+
return cls(value).name
|
|
73
|
+
except ValueError:
|
|
74
|
+
return str(value)
|
|
75
|
+
|
|
62
76
|
class UpdatedBatchJobInfo(NamedTuple):
|
|
63
77
|
jobID: int
|
|
64
78
|
exitStatus: int
|
|
65
79
|
"""
|
|
66
80
|
The exit status (integer value) of the job. 0 implies successful.
|
|
67
81
|
|
|
68
|
-
EXIT_STATUS_UNAVAILABLE_VALUE is used when the exit status is not available
|
|
82
|
+
EXIT_STATUS_UNAVAILABLE_VALUE is used when the exit status is not available
|
|
83
|
+
(e.g. job is lost, or otherwise died but actual exit code was not reported).
|
|
69
84
|
"""
|
|
70
85
|
|
|
71
86
|
exitReason: Optional[BatchJobExitReason]
|
|
@@ -437,7 +452,7 @@ class BatchSystemSupport(AbstractBatchSystem):
|
|
|
437
452
|
file_name: str = f'toil_{self.config.workflowID}.{toil_job_id}.{cluster_job_id}.{std}.log'
|
|
438
453
|
logs_dir: str = self.get_batch_logs_dir()
|
|
439
454
|
return os.path.join(logs_dir, file_name)
|
|
440
|
-
|
|
455
|
+
|
|
441
456
|
def format_std_out_err_glob(self, toil_job_id: int) -> str:
|
|
442
457
|
"""
|
|
443
458
|
Get a glob string that will match all file paths generated by format_std_out_err_path for a job.
|
|
@@ -445,7 +460,7 @@ class BatchSystemSupport(AbstractBatchSystem):
|
|
|
445
460
|
file_glob: str = f'toil_{self.config.workflowID}.{toil_job_id}.*.log'
|
|
446
461
|
logs_dir: str = self.get_batch_logs_dir()
|
|
447
462
|
return os.path.join(logs_dir, file_glob)
|
|
448
|
-
|
|
463
|
+
|
|
449
464
|
@staticmethod
|
|
450
465
|
def workerCleanup(info: WorkerCleanupInfo) -> None:
|
|
451
466
|
"""
|
|
@@ -509,7 +524,7 @@ class AbstractScalableBatchSystem(AbstractBatchSystem):
|
|
|
509
524
|
"""
|
|
510
525
|
A batch system that supports a variable number of worker nodes.
|
|
511
526
|
|
|
512
|
-
Used by :class:`toil.provisioners.clusterScaler.ClusterScaler`
|
|
527
|
+
Used by :class:`toil.provisioners.clusterScaler.ClusterScaler`
|
|
513
528
|
to scale the number of worker nodes in the cluster
|
|
514
529
|
up or down depending on overall load.
|
|
515
530
|
"""
|
|
@@ -22,7 +22,7 @@ from typing import Dict, List, Optional, Tuple, Union
|
|
|
22
22
|
from toil.batchSystems.abstractBatchSystem import (BatchJobExitReason,
|
|
23
23
|
UpdatedBatchJobInfo)
|
|
24
24
|
from toil.batchSystems.cleanup_support import BatchSystemCleanupSupport
|
|
25
|
-
from toil.bus import ExternalBatchIdMessage
|
|
25
|
+
from toil.bus import ExternalBatchIdMessage, get_job_kind
|
|
26
26
|
from toil.job import AcceleratorRequirement
|
|
27
27
|
from toil.lib.misc import CalledProcessErrorStderr
|
|
28
28
|
|
|
@@ -225,23 +225,20 @@ class AbstractGridEngineBatchSystem(BatchSystemCleanupSupport):
|
|
|
225
225
|
return activity
|
|
226
226
|
|
|
227
227
|
def _handle_job_status(
|
|
228
|
-
self, job_id: int, status: Union[int, None], activity: bool
|
|
228
|
+
self, job_id: int, status: Union[int, Tuple[int, Optional[BatchJobExitReason]], None], activity: bool
|
|
229
229
|
) -> bool:
|
|
230
230
|
"""
|
|
231
231
|
Helper method for checkOnJobs to handle job statuses
|
|
232
232
|
"""
|
|
233
233
|
if status is not None:
|
|
234
|
+
if isinstance(status, int):
|
|
235
|
+
code = status
|
|
236
|
+
reason = None
|
|
237
|
+
else:
|
|
238
|
+
code, reason = status
|
|
234
239
|
self.updatedJobsQueue.put(
|
|
235
240
|
UpdatedBatchJobInfo(
|
|
236
|
-
jobID=job_id, exitStatus=
|
|
237
|
-
)
|
|
238
|
-
)
|
|
239
|
-
self.forgetJob(job_id)
|
|
240
|
-
return True
|
|
241
|
-
if status is not None and isinstance(status, BatchJobExitReason):
|
|
242
|
-
self.updatedJobsQueue.put(
|
|
243
|
-
UpdatedBatchJobInfo(
|
|
244
|
-
jobID=job_id, exitStatus=1, exitReason=status, wallTime=None
|
|
241
|
+
jobID=job_id, exitStatus=code, exitReason=reason, wallTime=None
|
|
245
242
|
)
|
|
246
243
|
)
|
|
247
244
|
self.forgetJob(job_id)
|
|
@@ -279,9 +276,9 @@ class AbstractGridEngineBatchSystem(BatchSystemCleanupSupport):
|
|
|
279
276
|
logger.error("GridEngine like batch system failure", exc_info=ex)
|
|
280
277
|
raise
|
|
281
278
|
|
|
282
|
-
def coalesce_job_exit_codes(self, batch_job_id_list: list) ->
|
|
279
|
+
def coalesce_job_exit_codes(self, batch_job_id_list: list) -> List[Union[int, Tuple[int, Optional[BatchJobExitReason]], None]]:
|
|
283
280
|
"""
|
|
284
|
-
Returns exit codes for a list of jobs.
|
|
281
|
+
Returns exit codes and possibly exit reasons for a list of jobs, or None if they are running.
|
|
285
282
|
|
|
286
283
|
Called by AbstractGridEngineWorker.checkOnJobs().
|
|
287
284
|
|
|
@@ -351,16 +348,19 @@ class AbstractGridEngineBatchSystem(BatchSystemCleanupSupport):
|
|
|
351
348
|
raise NotImplementedError()
|
|
352
349
|
|
|
353
350
|
@abstractmethod
|
|
354
|
-
def getJobExitCode(self, batchJobID):
|
|
351
|
+
def getJobExitCode(self, batchJobID) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
355
352
|
"""
|
|
356
|
-
Returns job exit code
|
|
357
|
-
if something else happened other than the job exiting.
|
|
358
|
-
Implementation-specific; called by AbstractGridEngineWorker.checkOnJobs()
|
|
353
|
+
Returns job exit code and possibly an instance of abstractBatchSystem.BatchJobExitReason.
|
|
359
354
|
|
|
360
|
-
|
|
355
|
+
Returns None if the job is still running.
|
|
356
|
+
|
|
357
|
+
If the job is not running but the exit code is not available, it
|
|
358
|
+
will be EXIT_STATUS_UNAVAILABLE_VALUE. Implementation-specific;
|
|
359
|
+
called by AbstractGridEngineWorker.checkOnJobs().
|
|
361
360
|
|
|
362
|
-
|
|
363
|
-
|
|
361
|
+
The exit code will only be 0 if the job affirmatively succeeded.
|
|
362
|
+
|
|
363
|
+
:param string batchjobID: batch system job ID
|
|
364
364
|
"""
|
|
365
365
|
raise NotImplementedError()
|
|
366
366
|
|
|
@@ -407,10 +407,10 @@ class AbstractGridEngineBatchSystem(BatchSystemCleanupSupport):
|
|
|
407
407
|
else:
|
|
408
408
|
gpus = jobDesc.accelerators
|
|
409
409
|
|
|
410
|
-
self.newJobsQueue.put((jobID, jobDesc.cores, jobDesc.memory, jobDesc.command, jobDesc.
|
|
410
|
+
self.newJobsQueue.put((jobID, jobDesc.cores, jobDesc.memory, jobDesc.command, get_job_kind(jobDesc.get_names()),
|
|
411
411
|
job_environment, gpus))
|
|
412
412
|
logger.debug("Issued the job command: %s with job id: %s and job name %s", jobDesc.command, str(jobID),
|
|
413
|
-
jobDesc.
|
|
413
|
+
get_job_kind(jobDesc.get_names()))
|
|
414
414
|
return jobID
|
|
415
415
|
|
|
416
416
|
def killBatchJobs(self, jobIDs):
|
|
@@ -69,8 +69,13 @@ class WorkerCleanupContext:
|
|
|
69
69
|
|
|
70
70
|
def __enter__(self) -> None:
|
|
71
71
|
# Set up an arena so we know who is the last worker to leave
|
|
72
|
-
self.arena = LastProcessStandingArena(
|
|
73
|
-
|
|
72
|
+
self.arena = LastProcessStandingArena(
|
|
73
|
+
Toil.get_toil_coordination_dir(
|
|
74
|
+
self.workerCleanupInfo.work_dir,
|
|
75
|
+
self.workerCleanupInfo.coordination_dir
|
|
76
|
+
),
|
|
77
|
+
Toil.get_workflow_path_component(self.workerCleanupInfo.workflow_id) + "-cleanup"
|
|
78
|
+
)
|
|
74
79
|
logger.debug('Entering cleanup arena')
|
|
75
80
|
self.arena.enter()
|
|
76
81
|
logger.debug('Cleanup arena entered')
|
|
@@ -90,4 +95,3 @@ class WorkerCleanupContext:
|
|
|
90
95
|
# Now the coordination_dir is allowed to no longer exist on the node.
|
|
91
96
|
logger.debug('Cleanup arena left')
|
|
92
97
|
|
|
93
|
-
|
|
@@ -25,12 +25,12 @@ import re
|
|
|
25
25
|
import subprocess
|
|
26
26
|
from datetime import datetime
|
|
27
27
|
from random import randint
|
|
28
|
-
from typing import Dict, List, Optional, Union
|
|
28
|
+
from typing import Dict, List, Optional, Tuple, Union
|
|
29
29
|
|
|
30
30
|
from dateutil.parser import parse
|
|
31
31
|
from dateutil.tz import tzlocal
|
|
32
32
|
|
|
33
|
-
from toil.batchSystems.abstractBatchSystem import BatchJobExitReason
|
|
33
|
+
from toil.batchSystems.abstractBatchSystem import BatchJobExitReason, EXIT_STATUS_UNAVAILABLE_VALUE
|
|
34
34
|
from toil.batchSystems.abstractGridEngineBatchSystem import \
|
|
35
35
|
AbstractGridEngineBatchSystem
|
|
36
36
|
from toil.batchSystems.lsfHelper import (check_lsf_json_output_supported,
|
|
@@ -161,7 +161,7 @@ class LSFBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
161
161
|
status_resonse.append(None)
|
|
162
162
|
return status_resonse
|
|
163
163
|
|
|
164
|
-
def getJobExitCode(self, lsfJobID):
|
|
164
|
+
def getJobExitCode(self, lsfJobID) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
165
165
|
# the task is set as part of the job ID if using getBatchSystemID()
|
|
166
166
|
if "NOT_SUBMITTED" in lsfJobID:
|
|
167
167
|
logger.error("bjobs detected job failed to submit")
|
|
@@ -186,7 +186,7 @@ class LSFBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
186
186
|
|
|
187
187
|
return self.fallbackGetJobExitCode(job)
|
|
188
188
|
|
|
189
|
-
def parse_bjobs_record(self, bjobs_record: dict, job: int) -> Union[int, None]:
|
|
189
|
+
def parse_bjobs_record(self, bjobs_record: dict, job: int) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
190
190
|
"""
|
|
191
191
|
Helper functions for getJobExitCode and to parse the bjobs status record
|
|
192
192
|
"""
|
|
@@ -224,7 +224,7 @@ class LSFBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
224
224
|
exit_info, job
|
|
225
225
|
)
|
|
226
226
|
if "TERM_MEMLIMIT" in exit_reason:
|
|
227
|
-
return BatchJobExitReason.MEMLIMIT
|
|
227
|
+
return (exit_code if exit_code != 0 else EXIT_STATUS_UNAVAILABLE_VALUE, BatchJobExitReason.MEMLIMIT)
|
|
228
228
|
return exit_code
|
|
229
229
|
if process_status == "RUN":
|
|
230
230
|
logger.debug(
|
|
@@ -237,7 +237,7 @@ class LSFBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
237
237
|
|
|
238
238
|
return self.getJobExitCodeBACCT(job)
|
|
239
239
|
|
|
240
|
-
def getJobExitCodeBACCT(self,job):
|
|
240
|
+
def getJobExitCodeBACCT(self,job) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
241
241
|
# if not found in bjobs, then try bacct (slower than bjobs)
|
|
242
242
|
logger.debug("bjobs failed to detect job - trying bacct: "
|
|
243
243
|
"{}".format(job))
|
|
@@ -258,7 +258,7 @@ class LSFBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
258
258
|
"running: {}".format(job))
|
|
259
259
|
return None
|
|
260
260
|
|
|
261
|
-
def fallbackGetJobExitCode(self, job):
|
|
261
|
+
def fallbackGetJobExitCode(self, job) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
262
262
|
args = ["bjobs", "-l", str(job)]
|
|
263
263
|
logger.debug(f"Checking job exit code for job via bjobs (fallback): {job}")
|
|
264
264
|
stdout = call_command(args)
|
|
@@ -16,8 +16,9 @@ import math
|
|
|
16
16
|
import os
|
|
17
17
|
from argparse import ArgumentParser, _ArgumentGroup
|
|
18
18
|
from shlex import quote
|
|
19
|
-
from typing import Dict, List, Optional, TypeVar, Union
|
|
19
|
+
from typing import Dict, List, Optional, Tuple, TypeVar, Union
|
|
20
20
|
|
|
21
|
+
from toil.batchSystems.abstractBatchSystem import BatchJobExitReason, EXIT_STATUS_UNAVAILABLE_VALUE
|
|
21
22
|
from toil.batchSystems.abstractGridEngineBatchSystem import \
|
|
22
23
|
AbstractGridEngineBatchSystem
|
|
23
24
|
from toil.batchSystems.options import OptionSetter
|
|
@@ -64,7 +65,9 @@ class SlurmBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
64
65
|
jobName: str,
|
|
65
66
|
job_environment: Optional[Dict[str, str]] = None,
|
|
66
67
|
gpus: Optional[int] = None) -> List[str]:
|
|
67
|
-
|
|
68
|
+
# Make sure to use exec so we can get Slurm's signals in the Toil
|
|
69
|
+
# worker instead of having an intervening Bash
|
|
70
|
+
return self.prepareSbatch(cpu, memory, jobID, jobName, job_environment, gpus) + [f'--wrap=exec {command}']
|
|
68
71
|
|
|
69
72
|
def submitJob(self, subLine):
|
|
70
73
|
try:
|
|
@@ -95,12 +98,12 @@ class SlurmBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
95
98
|
logger.error("sbatch command failed")
|
|
96
99
|
raise e
|
|
97
100
|
|
|
98
|
-
def coalesce_job_exit_codes(self, batch_job_id_list: list) ->
|
|
101
|
+
def coalesce_job_exit_codes(self, batch_job_id_list: list) -> List[Union[int, Tuple[int, Optional[BatchJobExitReason]], None]]:
|
|
99
102
|
"""
|
|
100
103
|
Collect all job exit codes in a single call.
|
|
101
104
|
:param batch_job_id_list: list of Job ID strings, where each string has the form
|
|
102
105
|
"<job>[.<task>]".
|
|
103
|
-
:return: list of job exit codes, associated with the list of job IDs.
|
|
106
|
+
:return: list of job exit codes or exit code, exit reason pairs associated with the list of job IDs.
|
|
104
107
|
"""
|
|
105
108
|
logger.debug("Getting exit codes for slurm jobs: %s", batch_job_id_list)
|
|
106
109
|
# Convert batch_job_id_list to list of integer job IDs.
|
|
@@ -111,7 +114,7 @@ class SlurmBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
111
114
|
exit_codes.append(self._get_job_return_code(status))
|
|
112
115
|
return exit_codes
|
|
113
116
|
|
|
114
|
-
def getJobExitCode(self, batchJobID: str) -> int:
|
|
117
|
+
def getJobExitCode(self, batchJobID: str) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
115
118
|
"""
|
|
116
119
|
Get job exit code for given batch job ID.
|
|
117
120
|
:param batchJobID: string of the form "<job>[.<task>]".
|
|
@@ -138,18 +141,68 @@ class SlurmBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
138
141
|
status_dict = self._getJobDetailsFromScontrol(job_id_list)
|
|
139
142
|
return status_dict
|
|
140
143
|
|
|
141
|
-
def _get_job_return_code(self, status: tuple) ->
|
|
144
|
+
def _get_job_return_code(self, status: tuple) -> Union[int, Tuple[int, Optional[BatchJobExitReason]], None]:
|
|
142
145
|
"""
|
|
146
|
+
Given a Slurm return code, status pair, summarize them into a Toil return code, exit reason pair.
|
|
147
|
+
|
|
148
|
+
The return code may have already been OR'd with the 128-offset
|
|
149
|
+
Slurm-reported signal.
|
|
150
|
+
|
|
151
|
+
Slurm will report return codes of 0 even if jobs time out instead
|
|
152
|
+
of succeeding:
|
|
153
|
+
|
|
154
|
+
2093597|TIMEOUT|0:0
|
|
155
|
+
2093597.batch|CANCELLED|0:15
|
|
156
|
+
|
|
157
|
+
So we guarantee here that, if the Slurm status string is not a
|
|
158
|
+
successful one as defined in
|
|
159
|
+
<https://slurm.schedmd.com/squeue.html#SECTION_JOB-STATE-CODES>, we
|
|
160
|
+
will not return a successful return code.
|
|
161
|
+
|
|
143
162
|
Helper function for `getJobExitCode` and `coalesce_job_exit_codes`.
|
|
144
|
-
:param status: tuple containing the job's state and it's return code.
|
|
145
|
-
:return: the job's return code if it's completed, otherwise None.
|
|
163
|
+
:param status: tuple containing the job's state and it's return code from Slurm.
|
|
164
|
+
:return: the job's return code for Toil if it's completed, otherwise None.
|
|
146
165
|
"""
|
|
147
166
|
state, rc = status
|
|
148
|
-
|
|
149
|
-
#
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
167
|
+
|
|
168
|
+
# If a job is in one of these states, Slurm can't run it anymore.
|
|
169
|
+
# We don't include states where the job is held or paused here;
|
|
170
|
+
# those mean it could run and needs to wait for someone to un-hold
|
|
171
|
+
# it, so Toil should wait for it.
|
|
172
|
+
#
|
|
173
|
+
# We map from each terminal state to the Toil-ontology exit reason.
|
|
174
|
+
TERMINAL_STATES: Dict[str, BatchJobExitReason] = {
|
|
175
|
+
"BOOT_FAIL": BatchJobExitReason.LOST,
|
|
176
|
+
"CANCELLED": BatchJobExitReason.KILLED,
|
|
177
|
+
"COMPLETED": BatchJobExitReason.FINISHED,
|
|
178
|
+
"DEADLINE": BatchJobExitReason.KILLED,
|
|
179
|
+
"FAILED": BatchJobExitReason.FAILED,
|
|
180
|
+
"NODE_FAIL": BatchJobExitReason.LOST,
|
|
181
|
+
"OUT_OF_MEMORY": BatchJobExitReason.MEMLIMIT,
|
|
182
|
+
"PREEMPTED": BatchJobExitReason.KILLED,
|
|
183
|
+
"TIMEOUT": BatchJobExitReason.KILLED
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if state not in TERMINAL_STATES:
|
|
187
|
+
# Don't treat the job as exited yet
|
|
188
|
+
return None
|
|
189
|
+
|
|
190
|
+
exit_reason = TERMINAL_STATES[state]
|
|
191
|
+
|
|
192
|
+
if exit_reason == BatchJobExitReason.FINISHED:
|
|
193
|
+
# The only state that should produce a 0 ever is COMPLETED. So
|
|
194
|
+
# if the job is COMPLETED and the exit reason is thus FINISHED,
|
|
195
|
+
# pass along the code it has.
|
|
196
|
+
return (rc, exit_reason)
|
|
197
|
+
|
|
198
|
+
if rc == 0:
|
|
199
|
+
# The job claims to be in a state other than COMPLETED, but
|
|
200
|
+
# also to have not encountered a problem. Say the exit status
|
|
201
|
+
# is unavailable.
|
|
202
|
+
return (EXIT_STATUS_UNAVAILABLE_VALUE, exit_reason)
|
|
203
|
+
|
|
204
|
+
# If the code is nonzero, pass it along.
|
|
205
|
+
return (rc, exit_reason)
|
|
153
206
|
|
|
154
207
|
def _getJobDetailsFromSacct(self, job_id_list: list) -> dict:
|
|
155
208
|
"""
|
|
@@ -283,8 +336,26 @@ class SlurmBatchSystem(AbstractGridEngineBatchSystem):
|
|
|
283
336
|
job_environment: Optional[Dict[str, str]],
|
|
284
337
|
gpus: Optional[int]) -> List[str]:
|
|
285
338
|
|
|
286
|
-
|
|
339
|
+
"""
|
|
340
|
+
Returns the sbatch command line to run to queue the job.
|
|
341
|
+
"""
|
|
342
|
+
|
|
343
|
+
# Start by naming the job
|
|
287
344
|
sbatch_line = ['sbatch', '-J', f'toil_job_{jobID}_{jobName}']
|
|
345
|
+
|
|
346
|
+
# Make sure the job gets a signal before it disappears so that e.g.
|
|
347
|
+
# container cleanup finally blocks can run. Ask for SIGINT so we
|
|
348
|
+
# can get the default Python KeyboardInterrupt which third-party
|
|
349
|
+
# code is likely to plan for. Make sure to send it to the batch
|
|
350
|
+
# shell process with "B:", not to all the srun steps it launches
|
|
351
|
+
# (because there shouldn't be any). We cunningly replaced the batch
|
|
352
|
+
# shell process with the Toil worker process, so Toil should be
|
|
353
|
+
# able to get the signal.
|
|
354
|
+
#
|
|
355
|
+
# TODO: Add a way to detect when the job failed because it
|
|
356
|
+
# responded to this signal and use the right exit reason for it.
|
|
357
|
+
sbatch_line.append("--signal=B:INT@30")
|
|
358
|
+
|
|
288
359
|
if gpus:
|
|
289
360
|
sbatch_line = sbatch_line[:1] + [f'--gres=gpu:{gpus}'] + sbatch_line[1:]
|
|
290
361
|
environment = {}
|
|
@@ -87,6 +87,43 @@ from pubsub.core.topicutils import ALL_TOPICS
|
|
|
87
87
|
|
|
88
88
|
logger = logging.getLogger( __name__ )
|
|
89
89
|
|
|
90
|
+
# We define some ways to talk about jobs.
|
|
91
|
+
|
|
92
|
+
class Names(NamedTuple):
|
|
93
|
+
"""
|
|
94
|
+
Stores all the kinds of name a job can have.
|
|
95
|
+
"""
|
|
96
|
+
# Name of the kind of job this is
|
|
97
|
+
job_name: str
|
|
98
|
+
# Name of this particular work unit
|
|
99
|
+
unit_name: str
|
|
100
|
+
# Human-readable name for the job
|
|
101
|
+
display_name: str
|
|
102
|
+
# What the job prints as, used for stats-and-logging log management
|
|
103
|
+
stats_name: str
|
|
104
|
+
# Job store ID of the job for the work unit
|
|
105
|
+
job_store_id: str
|
|
106
|
+
|
|
107
|
+
def get_job_kind(names: Names) -> str:
|
|
108
|
+
"""
|
|
109
|
+
Return an identifying string for the job.
|
|
110
|
+
|
|
111
|
+
The result may contain spaces.
|
|
112
|
+
|
|
113
|
+
Returns: Either the unit name, job name, or display name, which identifies
|
|
114
|
+
the kind of job it is to toil.
|
|
115
|
+
Otherwise "Unknown Job" in case no identifier is available
|
|
116
|
+
"""
|
|
117
|
+
if names.unit_name:
|
|
118
|
+
return names.unit_name
|
|
119
|
+
elif names.job_name:
|
|
120
|
+
return names.job_name
|
|
121
|
+
elif names.display_name:
|
|
122
|
+
return names.display_name
|
|
123
|
+
else:
|
|
124
|
+
return "Unknown Job"
|
|
125
|
+
|
|
126
|
+
|
|
90
127
|
# We define a bunch of named tuple message types.
|
|
91
128
|
# These all need to be plain data: only hold ints, strings, etc.
|
|
92
129
|
|
|
@@ -648,6 +685,7 @@ class JobStatus:
|
|
|
648
685
|
|
|
649
686
|
def __repr__(self) -> str:
|
|
650
687
|
return json.dumps(self, default= lambda o: o.__dict__, indent=4)
|
|
688
|
+
|
|
651
689
|
def replay_message_bus(path: str) -> Dict[str, JobStatus]:
|
|
652
690
|
"""
|
|
653
691
|
Replay all the messages and work out what they mean for jobs.
|