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.
Files changed (561) hide show
  1. toil-6.1.0/PKG-INFO +123 -0
  2. {toil-6.0.0 → toil-6.1.0}/requirements-cwl.txt +1 -1
  3. {toil-6.0.0 → toil-6.1.0}/requirements-dev.txt +4 -4
  4. {toil-6.0.0 → toil-6.1.0}/requirements-server.txt +1 -1
  5. {toil-6.0.0 → toil-6.1.0}/requirements.txt +1 -2
  6. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/abstractBatchSystem.py +19 -4
  7. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/abstractGridEngineBatchSystem.py +22 -22
  8. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/cleanup_support.py +7 -3
  9. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/lsf.py +7 -7
  10. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/slurm.py +85 -14
  11. {toil-6.0.0 → toil-6.1.0}/src/toil/bus.py +38 -0
  12. {toil-6.0.0 → toil-6.1.0}/src/toil/common.py +20 -18
  13. {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/cwltoil.py +81 -63
  14. {toil-6.0.0 → toil-6.1.0}/src/toil/exceptions.py +1 -1
  15. {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/abstractFileStore.py +53 -4
  16. {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/cachingFileStore.py +4 -20
  17. {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/nonCachingFileStore.py +5 -14
  18. {toil-6.0.0 → toil-6.1.0}/src/toil/job.py +46 -30
  19. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/abstractJobStore.py +21 -23
  20. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/aws/utils.py +5 -4
  21. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/fileJobStore.py +1 -1
  22. {toil-6.0.0 → toil-6.1.0}/src/toil/leader.py +17 -14
  23. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/conversions.py +19 -0
  24. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/generatedEC2Lists.py +8 -8
  25. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/io.py +28 -2
  26. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/resources.py +8 -1
  27. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/threading.py +27 -12
  28. {toil-6.0.0 → toil-6.1.0}/src/toil/options/common.py +5 -7
  29. {toil-6.0.0 → toil-6.1.0}/src/toil/options/wdl.py +5 -0
  30. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/abstractProvisioner.py +8 -0
  31. {toil-6.0.0 → toil-6.1.0}/src/toil/statsAndLogging.py +36 -8
  32. {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/test_slurm.py +21 -6
  33. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/cwlTest.py +243 -151
  34. {toil-6.0.0 → toil-6.1.0}/src/toil/test/docs/scriptsTest.py +2 -2
  35. {toil-6.0.0 → toil-6.1.0}/src/toil/test/jobStores/jobStoreTest.py +7 -5
  36. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/test_ec2.py +1 -1
  37. toil-6.1.0/src/toil/test/options/options.py +37 -0
  38. {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/clusterTest.py +9 -8
  39. toil-6.1.0/src/toil/test/utils/__init__.py +13 -0
  40. {toil-6.0.0 → toil-6.1.0}/src/toil/test/utils/toilDebugTest.py +1 -1
  41. {toil-6.0.0 → toil-6.1.0}/src/toil/test/utils/utilsTest.py +3 -3
  42. {toil-6.0.0 → toil-6.1.0}/src/toil/test/wdl/wdltoil_test.py +91 -16
  43. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilDebugFile.py +1 -1
  44. toil-6.1.0/src/toil/utils/toilStats.py +701 -0
  45. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilStatus.py +1 -1
  46. toil-6.1.0/src/toil/version.py +14 -0
  47. {toil-6.0.0 → toil-6.1.0}/src/toil/wdl/wdltoil.py +341 -189
  48. {toil-6.0.0 → toil-6.1.0}/src/toil/worker.py +31 -16
  49. toil-6.1.0/src/toil.egg-info/PKG-INFO +123 -0
  50. toil-6.1.0/src/toil.egg-info/SOURCES.txt +257 -0
  51. {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/requires.txt +5 -6
  52. toil-6.0.0/.github/PULL_REQUEST_TEMPLATE.md +0 -37
  53. toil-6.0.0/.github/dependabot.yml +0 -10
  54. toil-6.0.0/.github/workflows/codeql-analysis.yml +0 -71
  55. toil-6.0.0/.gitignore +0 -25
  56. toil-6.0.0/.gitlab-ci.yml +0 -434
  57. toil-6.0.0/.readthedocs.yaml +0 -23
  58. toil-6.0.0/CODE_OF_CONDUCT.md +0 -46
  59. toil-6.0.0/CONTRIBUTING.md +0 -6
  60. toil-6.0.0/Makefile +0 -353
  61. toil-6.0.0/PKG-INFO +0 -42
  62. toil-6.0.0/ROADMAP.md +0 -37
  63. toil-6.0.0/attic/README.md +0 -407
  64. toil-6.0.0/attic/absolute_imports.py +0 -118
  65. toil-6.0.0/attic/jobTreeSlides.pdf +0 -0
  66. toil-6.0.0/attic/toil-sort-example.py +0 -173
  67. toil-6.0.0/common.mk +0 -83
  68. toil-6.0.0/contrib/admin/buildkit-deployment.yml +0 -127
  69. toil-6.0.0/contrib/admin/cleanup_aws_resources.py +0 -329
  70. toil-6.0.0/contrib/admin/mypy-with-ignore.py +0 -109
  71. toil-6.0.0/contrib/admin/remove_trailing_whitespace.py +0 -74
  72. toil-6.0.0/contrib/admin/test-pr +0 -26
  73. toil-6.0.0/contrib/admin/wheel-of-issues +0 -43
  74. toil-6.0.0/contrib/assets/toil-slug-logo-wordmark-2022.svg +0 -283
  75. toil-6.0.0/contrib/hooks/lib.py +0 -177
  76. toil-6.0.0/contrib/hooks/mypy-after-commit.py +0 -35
  77. toil-6.0.0/contrib/hooks/mypy-before-push.py +0 -87
  78. toil-6.0.0/contrib/mypy-stubs/configargparse/__init__.pyi +0 -5
  79. toil-6.0.0/contrib/mypy-stubs/configargparse/configargparse.pyi +0 -35
  80. toil-6.0.0/contrib/mypy-stubs/dill/__init__.pyi +0 -4
  81. toil-6.0.0/contrib/mypy-stubs/dill/_dill.pyi +0 -78
  82. toil-6.0.0/contrib/mypy-stubs/pubsub/__init__.pyi +0 -4
  83. toil-6.0.0/contrib/mypy-stubs/pubsub/core/__init__.pyi +0 -23
  84. toil-6.0.0/contrib/mypy-stubs/pubsub/core/annotations.pyi +0 -3
  85. toil-6.0.0/contrib/mypy-stubs/pubsub/core/callables.pyi +0 -34
  86. toil-6.0.0/contrib/mypy-stubs/pubsub/core/listener.pyi +0 -50
  87. toil-6.0.0/contrib/mypy-stubs/pubsub/core/notificationmgr.pyi +0 -45
  88. toil-6.0.0/contrib/mypy-stubs/pubsub/core/publisher.pyi +0 -32
  89. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicargspec.pyi +0 -73
  90. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicdefnprovider.pyi +0 -97
  91. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicexc.pyi +0 -26
  92. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicmgr.pyi +0 -53
  93. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicobj.pyi +0 -75
  94. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topictreetraverser.pyi +0 -19
  95. toil-6.0.0/contrib/mypy-stubs/pubsub/core/topicutils.pyi +0 -15
  96. toil-6.0.0/contrib/mypy-stubs/pubsub/core/weakmethod.pyi +0 -9
  97. toil-6.0.0/contrib/mypy-stubs/pubsub/pub.pyi +0 -43
  98. toil-6.0.0/contrib/mypy-stubs/pubsub/utils/__init__.pyi +0 -7
  99. toil-6.0.0/contrib/mypy-stubs/pubsub/utils/exchandling.pyi +0 -20
  100. toil-6.0.0/contrib/mypy-stubs/pubsub/utils/misc.pyi +0 -5
  101. toil-6.0.0/contrib/mypy-stubs/pubsub/utils/notification.pyi +0 -63
  102. toil-6.0.0/contrib/mypy-stubs/pubsub/utils/topictreeprinter.pyi +0 -24
  103. toil-6.0.0/contrib/mypy-stubs/pubsub/utils/xmltopicdefnprovider.pyi +0 -27
  104. toil-6.0.0/contrib/mypy-stubs/tes/client.pyi +0 -41
  105. toil-6.0.0/contrib/mypy-stubs/tes/models.pyi +0 -191
  106. toil-6.0.0/contrib/pod-murder-bot/murder.yaml +0 -34
  107. toil-6.0.0/contrib/pod-murder-bot/podKiller.sh +0 -26
  108. toil-6.0.0/contrib/slurm-test/check_out.sh +0 -17
  109. toil-6.0.0/contrib/slurm-test/docker-compose.yml +0 -71
  110. toil-6.0.0/contrib/slurm-test/expected_out_basic.txt +0 -1
  111. toil-6.0.0/contrib/slurm-test/expected_out_sort.txt +0 -1000
  112. toil-6.0.0/contrib/slurm-test/fileToSort.txt +0 -1000
  113. toil-6.0.0/contrib/slurm-test/slurm.conf +0 -151
  114. toil-6.0.0/contrib/slurm-test/slurm_test.sh +0 -27
  115. toil-6.0.0/contrib/slurm-test/toil_workflow.py +0 -16
  116. toil-6.0.0/contrib/toil-ci-prebake/Dockerfile +0 -47
  117. toil-6.0.0/contrib/toil-cwl-runner/README.rst +0 -2
  118. toil-6.0.0/contrib/toil-cwl-runner/pyproject.toml +0 -6
  119. toil-6.0.0/contrib/toil-cwl-runner/setup.cfg +0 -17
  120. toil-6.0.0/dashboard/grafana/Dockerfile +0 -8
  121. toil-6.0.0/dashboard/grafana/toil_dashboard.json +0 -592
  122. toil-6.0.0/dashboard/mtail/Dockerfile +0 -7
  123. toil-6.0.0/dashboard/mtail/toil.mtail +0 -41
  124. toil-6.0.0/dashboard/prometheus/Dockerfile +0 -8
  125. toil-6.0.0/dashboard/prometheus/prometheus.yml +0 -46
  126. toil-6.0.0/dashboard/prometheus/run.sh +0 -9
  127. toil-6.0.0/docker/Dockerfile.py +0 -216
  128. toil-6.0.0/docker/customDockerInit.sh +0 -16
  129. toil-6.0.0/docker/extra-debs.tsv +0 -5
  130. toil-6.0.0/docker/singularity-wrapper.sh +0 -96
  131. toil-6.0.0/docker/waitForKey.sh +0 -2
  132. toil-6.0.0/docs/Makefile +0 -20
  133. toil-6.0.0/docs/_static/favicon.ico +0 -0
  134. toil-6.0.0/docs/_static/logo.png +0 -0
  135. toil-6.0.0/docs/_static/shortcut.png +0 -0
  136. toil-6.0.0/docs/appendices/architecture.rst +0 -248
  137. toil-6.0.0/docs/appendices/aws_min_permissions.rst +0 -27
  138. toil-6.0.0/docs/appendices/caching_benefits.png +0 -0
  139. toil-6.0.0/docs/appendices/deploy.rst +0 -201
  140. toil-6.0.0/docs/appendices/environment_vars.rst +0 -246
  141. toil-6.0.0/docs/appendices/toil_architecture.jpg +0 -0
  142. toil-6.0.0/docs/conf.py +0 -214
  143. toil-6.0.0/docs/contributing/checklists.rst +0 -52
  144. toil-6.0.0/docs/contributing/contributing.rst +0 -607
  145. toil-6.0.0/docs/cwl/introduction.rst +0 -10
  146. toil-6.0.0/docs/cwl/running.rst +0 -245
  147. toil-6.0.0/docs/gettingStarted/googleScreenShot.png +0 -0
  148. toil-6.0.0/docs/gettingStarted/googleScreenShot2.png +0 -0
  149. toil-6.0.0/docs/gettingStarted/install.rst +0 -217
  150. toil-6.0.0/docs/gettingStarted/quickStart.rst +0 -638
  151. toil-6.0.0/docs/index.rst +0 -91
  152. toil-6.0.0/docs/python/developing.rst +0 -655
  153. toil-6.0.0/docs/python/toilAPI.rst +0 -10
  154. toil-6.0.0/docs/python/toilAPIBatchsystem.rst +0 -48
  155. toil-6.0.0/docs/python/toilAPIExceptions.rst +0 -35
  156. toil-6.0.0/docs/python/toilAPIFilestore.rst +0 -14
  157. toil-6.0.0/docs/python/toilAPIJobFunctions.rst +0 -42
  158. toil-6.0.0/docs/python/toilAPIJobstore.rst +0 -12
  159. toil-6.0.0/docs/python/toilAPIMethods.rst +0 -20
  160. toil-6.0.0/docs/python/toilAPIRunner.rst +0 -10
  161. toil-6.0.0/docs/python/toilAPIService.rst +0 -10
  162. toil-6.0.0/docs/running/cliOptions.rst +0 -613
  163. toil-6.0.0/docs/running/cloud/amazon.rst +0 -554
  164. toil-6.0.0/docs/running/cloud/amazonaddkeypair.png +0 -0
  165. toil-6.0.0/docs/running/cloud/cloud.rst +0 -65
  166. toil-6.0.0/docs/running/cloud/clusterUtils.rst +0 -321
  167. toil-6.0.0/docs/running/cloud/dashboard_screenshot.png +0 -0
  168. toil-6.0.0/docs/running/cloud/gce.rst +0 -109
  169. toil-6.0.0/docs/running/cloud/googleScreenShot.png +0 -0
  170. toil-6.0.0/docs/running/cloud/googleScreenShot2.png +0 -0
  171. toil-6.0.0/docs/running/cloud/kubernetes.rst +0 -407
  172. toil-6.0.0/docs/running/debugging.rst +0 -41
  173. toil-6.0.0/docs/running/hpcEnvironments.rst +0 -70
  174. toil-6.0.0/docs/running/introduction.rst +0 -73
  175. toil-6.0.0/docs/running/server/docker-compose.yml +0 -47
  176. toil-6.0.0/docs/running/server/wes.rst +0 -403
  177. toil-6.0.0/docs/vendor/sphinxcontrib/__init__.py +0 -10
  178. toil-6.0.0/docs/vendor/sphinxcontrib/fulltoc.py +0 -93
  179. toil-6.0.0/docs/wdl/conformance.rst +0 -53
  180. toil-6.0.0/docs/wdl/developing.rst +0 -63
  181. toil-6.0.0/docs/wdl/introduction.rst +0 -18
  182. toil-6.0.0/docs/wdl/running.rst +0 -73
  183. toil-6.0.0/setup_gitlab_docker.py +0 -38
  184. toil-6.0.0/setup_gitlab_ssh.py +0 -38
  185. toil-6.0.0/src/toil/server/api_spec/LICENSE +0 -201
  186. toil-6.0.0/src/toil/server/api_spec/README.rst +0 -5
  187. toil-6.0.0/src/toil/test/cactus/pestis.tar.gz +0 -0
  188. toil-6.0.0/src/toil/test/cwl/2.fasta +0 -11
  189. toil-6.0.0/src/toil/test/cwl/2.fastq +0 -12
  190. toil-6.0.0/src/toil/test/cwl/directory/directory/file.txt +0 -15
  191. toil-6.0.0/src/toil/test/cwl/download_directory_file.json +0 -4
  192. toil-6.0.0/src/toil/test/cwl/download_directory_s3.json +0 -4
  193. toil-6.0.0/src/toil/test/cwl/download_file.json +0 -6
  194. toil-6.0.0/src/toil/test/cwl/download_http.json +0 -6
  195. toil-6.0.0/src/toil/test/cwl/download_https.json +0 -6
  196. toil-6.0.0/src/toil/test/cwl/download_s3.json +0 -6
  197. toil-6.0.0/src/toil/test/cwl/download_subdirectory_file.json +0 -5
  198. toil-6.0.0/src/toil/test/cwl/download_subdirectory_s3.json +0 -5
  199. toil-6.0.0/src/toil/test/cwl/empty.json +0 -1
  200. toil-6.0.0/src/toil/test/cwl/mock_mpi/fake_mpi.yml +0 -8
  201. toil-6.0.0/src/toil/test/cwl/mock_mpi/fake_mpi_run.py +0 -37
  202. toil-6.0.0/src/toil/test/cwl/preemptible_expression.json +0 -1
  203. toil-6.0.0/src/toil/test/cwl/revsort-job.json +0 -6
  204. toil-6.0.0/src/toil/test/cwl/s3_secondary_file.json +0 -16
  205. toil-6.0.0/src/toil/test/cwl/seqtk_seq_job.json +0 -6
  206. toil-6.0.0/src/toil/test/cwl/stream.json +0 -6
  207. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.dat +0 -0
  208. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f0 +0 -0
  209. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f1 +0 -0
  210. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f1i +0 -0
  211. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f2 +0 -0
  212. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f2_TSM0 +0 -0
  213. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f3 +0 -0
  214. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f3_TSM0 +0 -0
  215. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f4 +0 -0
  216. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f4_TSM0 +0 -0
  217. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.f5 +0 -0
  218. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.info +0 -0
  219. toil-6.0.0/src/toil/test/cwl/test_filename_conflict_resolution.ms/table.lock +0 -0
  220. toil-6.0.0/src/toil/test/cwl/whale.txt +0 -16
  221. toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello.cwl +0 -14
  222. toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello1.yml +0 -1
  223. toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello2.yml +0 -1
  224. toil-6.0.0/src/toil/test/docs/scripts/cwlExampleFiles/hello3.yml +0 -1
  225. toil-6.0.0/src/toil/test/docs/scripts/example_alwaysfail.py +0 -38
  226. toil-6.0.0/src/toil/test/docs/scripts/example_cachingbenchmark.py +0 -108
  227. toil-6.0.0/src/toil/test/docs/scripts/stagingExampleFiles/in.txt +0 -1
  228. toil-6.0.0/src/toil/test/docs/scripts/stagingExampleFiles/out.txt +0 -2
  229. toil-6.0.0/src/toil/test/docs/scripts/tutorial_arguments.py +0 -23
  230. toil-6.0.0/src/toil/test/docs/scripts/tutorial_cwlexample.py +0 -56
  231. toil-6.0.0/src/toil/test/docs/scripts/tutorial_discoverfiles.py +0 -39
  232. toil-6.0.0/src/toil/test/docs/scripts/tutorial_docker.py +0 -21
  233. toil-6.0.0/src/toil/test/docs/scripts/tutorial_dynamic.py +0 -24
  234. toil-6.0.0/src/toil/test/docs/scripts/tutorial_encapsulation.py +0 -28
  235. toil-6.0.0/src/toil/test/docs/scripts/tutorial_encapsulation2.py +0 -29
  236. toil-6.0.0/src/toil/test/docs/scripts/tutorial_helloworld.py +0 -15
  237. toil-6.0.0/src/toil/test/docs/scripts/tutorial_invokeworkflow.py +0 -27
  238. toil-6.0.0/src/toil/test/docs/scripts/tutorial_invokeworkflow2.py +0 -30
  239. toil-6.0.0/src/toil/test/docs/scripts/tutorial_jobfunctions.py +0 -22
  240. toil-6.0.0/src/toil/test/docs/scripts/tutorial_managing.py +0 -29
  241. toil-6.0.0/src/toil/test/docs/scripts/tutorial_managing2.py +0 -54
  242. toil-6.0.0/src/toil/test/docs/scripts/tutorial_multiplejobs.py +0 -25
  243. toil-6.0.0/src/toil/test/docs/scripts/tutorial_multiplejobs2.py +0 -21
  244. toil-6.0.0/src/toil/test/docs/scripts/tutorial_multiplejobs3.py +0 -22
  245. toil-6.0.0/src/toil/test/docs/scripts/tutorial_promises.py +0 -25
  246. toil-6.0.0/src/toil/test/docs/scripts/tutorial_promises2.py +0 -28
  247. toil-6.0.0/src/toil/test/docs/scripts/tutorial_quickstart.py +0 -22
  248. toil-6.0.0/src/toil/test/docs/scripts/tutorial_requirements.py +0 -36
  249. toil-6.0.0/src/toil/test/docs/scripts/tutorial_services.py +0 -45
  250. toil-6.0.0/src/toil/test/docs/scripts/tutorial_staging.py +0 -35
  251. toil-6.0.0/src/toil/test/sort/sort.py +0 -260
  252. toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/B_file.txt +0 -1
  253. toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/debugWorkflow.py +0 -181
  254. toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/mkFile.py +0 -15
  255. toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/sleep.cwl +0 -12
  256. toil-6.0.0/src/toil/test/utils/ABCWorkflowDebug/sleep.yaml +0 -1
  257. toil-6.0.0/src/toil/test/wdl/md5sum/empty_file.json +0 -1
  258. toil-6.0.0/src/toil/test/wdl/md5sum/md5sum-gs.json +0 -1
  259. toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.1.0.wdl +0 -31
  260. toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.input +0 -1
  261. toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.json +0 -1
  262. toil-6.0.0/src/toil/test/wdl/md5sum/md5sum.wdl +0 -25
  263. toil-6.0.0/src/toil/test/wdl/miniwdl_self_test/inputs-namespaced.json +0 -1
  264. toil-6.0.0/src/toil/test/wdl/miniwdl_self_test/inputs.json +0 -1
  265. toil-6.0.0/src/toil/test/wdl/miniwdl_self_test/self_test.wdl +0 -40
  266. toil-6.0.0/src/toil/test/wdl/standard_library/as_map.json +0 -16
  267. toil-6.0.0/src/toil/test/wdl/standard_library/as_map_as_input.wdl +0 -23
  268. toil-6.0.0/src/toil/test/wdl/standard_library/as_pairs.json +0 -7
  269. toil-6.0.0/src/toil/test/wdl/standard_library/as_pairs_as_input.wdl +0 -23
  270. toil-6.0.0/src/toil/test/wdl/standard_library/ceil.json +0 -3
  271. toil-6.0.0/src/toil/test/wdl/standard_library/ceil_as_command.wdl +0 -16
  272. toil-6.0.0/src/toil/test/wdl/standard_library/ceil_as_input.wdl +0 -16
  273. toil-6.0.0/src/toil/test/wdl/standard_library/collect_by_key.json +0 -1
  274. toil-6.0.0/src/toil/test/wdl/standard_library/collect_by_key_as_input.wdl +0 -23
  275. toil-6.0.0/src/toil/test/wdl/standard_library/cross.json +0 -11
  276. toil-6.0.0/src/toil/test/wdl/standard_library/cross_as_input.wdl +0 -19
  277. toil-6.0.0/src/toil/test/wdl/standard_library/flatten.json +0 -7
  278. toil-6.0.0/src/toil/test/wdl/standard_library/flatten_as_input.wdl +0 -18
  279. toil-6.0.0/src/toil/test/wdl/standard_library/floor.json +0 -3
  280. toil-6.0.0/src/toil/test/wdl/standard_library/floor_as_command.wdl +0 -16
  281. toil-6.0.0/src/toil/test/wdl/standard_library/floor_as_input.wdl +0 -16
  282. toil-6.0.0/src/toil/test/wdl/standard_library/keys.json +0 -8
  283. toil-6.0.0/src/toil/test/wdl/standard_library/keys_as_input.wdl +0 -24
  284. toil-6.0.0/src/toil/test/wdl/standard_library/length.json +0 -7
  285. toil-6.0.0/src/toil/test/wdl/standard_library/length_as_input.wdl +0 -16
  286. toil-6.0.0/src/toil/test/wdl/standard_library/length_as_input_with_map.json +0 -7
  287. toil-6.0.0/src/toil/test/wdl/standard_library/length_as_input_with_map.wdl +0 -17
  288. toil-6.0.0/src/toil/test/wdl/standard_library/length_invalid.json +0 -3
  289. toil-6.0.0/src/toil/test/wdl/standard_library/range.json +0 -3
  290. toil-6.0.0/src/toil/test/wdl/standard_library/range_0.json +0 -3
  291. toil-6.0.0/src/toil/test/wdl/standard_library/range_as_input.wdl +0 -17
  292. toil-6.0.0/src/toil/test/wdl/standard_library/range_invalid.json +0 -3
  293. toil-6.0.0/src/toil/test/wdl/standard_library/read_boolean.json +0 -3
  294. toil-6.0.0/src/toil/test/wdl/standard_library/read_boolean_as_command.wdl +0 -17
  295. toil-6.0.0/src/toil/test/wdl/standard_library/read_float.json +0 -3
  296. toil-6.0.0/src/toil/test/wdl/standard_library/read_float_as_command.wdl +0 -17
  297. toil-6.0.0/src/toil/test/wdl/standard_library/read_int.json +0 -3
  298. toil-6.0.0/src/toil/test/wdl/standard_library/read_int_as_command.wdl +0 -17
  299. toil-6.0.0/src/toil/test/wdl/standard_library/read_json.json +0 -3
  300. toil-6.0.0/src/toil/test/wdl/standard_library/read_json_as_output.wdl +0 -31
  301. toil-6.0.0/src/toil/test/wdl/standard_library/read_lines.json +0 -3
  302. toil-6.0.0/src/toil/test/wdl/standard_library/read_lines_as_output.wdl +0 -31
  303. toil-6.0.0/src/toil/test/wdl/standard_library/read_map.json +0 -3
  304. toil-6.0.0/src/toil/test/wdl/standard_library/read_map_as_output.wdl +0 -31
  305. toil-6.0.0/src/toil/test/wdl/standard_library/read_string.json +0 -3
  306. toil-6.0.0/src/toil/test/wdl/standard_library/read_string_as_command.wdl +0 -17
  307. toil-6.0.0/src/toil/test/wdl/standard_library/read_tsv.json +0 -3
  308. toil-6.0.0/src/toil/test/wdl/standard_library/read_tsv_as_output.wdl +0 -31
  309. toil-6.0.0/src/toil/test/wdl/standard_library/round.json +0 -3
  310. toil-6.0.0/src/toil/test/wdl/standard_library/round_as_command.wdl +0 -16
  311. toil-6.0.0/src/toil/test/wdl/standard_library/round_as_input.wdl +0 -16
  312. toil-6.0.0/src/toil/test/wdl/standard_library/size.json +0 -3
  313. toil-6.0.0/src/toil/test/wdl/standard_library/size_as_command.wdl +0 -17
  314. toil-6.0.0/src/toil/test/wdl/standard_library/size_as_output.wdl +0 -36
  315. toil-6.0.0/src/toil/test/wdl/standard_library/stderr.json +0 -3
  316. toil-6.0.0/src/toil/test/wdl/standard_library/stderr_as_output.wdl +0 -30
  317. toil-6.0.0/src/toil/test/wdl/standard_library/stdout.json +0 -3
  318. toil-6.0.0/src/toil/test/wdl/standard_library/stdout_as_output.wdl +0 -30
  319. toil-6.0.0/src/toil/test/wdl/standard_library/sub.json +0 -3
  320. toil-6.0.0/src/toil/test/wdl/standard_library/sub_as_input.wdl +0 -17
  321. toil-6.0.0/src/toil/test/wdl/standard_library/sub_as_input_with_file.wdl +0 -17
  322. toil-6.0.0/src/toil/test/wdl/standard_library/transpose.json +0 -6
  323. toil-6.0.0/src/toil/test/wdl/standard_library/transpose_as_input.wdl +0 -18
  324. toil-6.0.0/src/toil/test/wdl/standard_library/write_json.json +0 -6
  325. toil-6.0.0/src/toil/test/wdl/standard_library/write_json_as_command.wdl +0 -17
  326. toil-6.0.0/src/toil/test/wdl/standard_library/write_lines.json +0 -7
  327. toil-6.0.0/src/toil/test/wdl/standard_library/write_lines_as_command.wdl +0 -17
  328. toil-6.0.0/src/toil/test/wdl/standard_library/write_map.json +0 -6
  329. toil-6.0.0/src/toil/test/wdl/standard_library/write_map_as_command.wdl +0 -17
  330. toil-6.0.0/src/toil/test/wdl/standard_library/write_tsv.json +0 -6
  331. toil-6.0.0/src/toil/test/wdl/standard_library/write_tsv_as_command.wdl +0 -17
  332. toil-6.0.0/src/toil/test/wdl/standard_library/zip.json +0 -12
  333. toil-6.0.0/src/toil/test/wdl/standard_library/zip_as_input.wdl +0 -19
  334. toil-6.0.0/src/toil/test/wdl/test.csv +0 -3
  335. toil-6.0.0/src/toil/test/wdl/test.tsv +0 -3
  336. toil-6.0.0/src/toil/test/wdl/testfiles/test.json +0 -4
  337. toil-6.0.0/src/toil/test/wdl/testfiles/test_boolean.txt +0 -1
  338. toil-6.0.0/src/toil/test/wdl/testfiles/test_float.txt +0 -1
  339. toil-6.0.0/src/toil/test/wdl/testfiles/test_int.txt +0 -1
  340. toil-6.0.0/src/toil/test/wdl/testfiles/test_lines.txt +0 -5
  341. toil-6.0.0/src/toil/test/wdl/testfiles/test_map.txt +0 -2
  342. toil-6.0.0/src/toil/test/wdl/testfiles/test_string.txt +0 -1
  343. toil-6.0.0/src/toil/test/wdl/testfiles/vocab.json +0 -1
  344. toil-6.0.0/src/toil/test/wdl/testfiles/vocab.wdl +0 -66
  345. toil-6.0.0/src/toil/test/wdl/wdl_specification/type_pair.json +0 -23
  346. toil-6.0.0/src/toil/test/wdl/wdl_specification/type_pair_basic.wdl +0 -36
  347. toil-6.0.0/src/toil/test/wdl/wdl_specification/type_pair_with_files.wdl +0 -36
  348. toil-6.0.0/src/toil/test/wdl/wdl_specification/v1_spec.json +0 -1
  349. toil-6.0.0/src/toil/test/wdl/wdl_specification/v1_spec_declaration.wdl +0 -39
  350. toil-6.0.0/src/toil/utils/toilStats.py +0 -658
  351. toil-6.0.0/src/toil/version.py +0 -14
  352. toil-6.0.0/src/toil.egg-info/PKG-INFO +0 -42
  353. toil-6.0.0/src/toil.egg-info/SOURCES.txt +0 -554
  354. toil-6.0.0/version_template.py +0 -181
  355. {toil-6.0.0 → toil-6.1.0}/LICENSE +0 -0
  356. {toil-6.0.0 → toil-6.1.0}/MANIFEST.in +0 -0
  357. {toil-6.0.0 → toil-6.1.0}/README.rst +0 -0
  358. {toil-6.0.0 → toil-6.1.0}/requirements-aws.txt +0 -0
  359. {toil-6.0.0 → toil-6.1.0}/requirements-encryption.txt +0 -0
  360. {toil-6.0.0 → toil-6.1.0}/requirements-google.txt +0 -0
  361. {toil-6.0.0 → toil-6.1.0}/requirements-htcondor.txt +0 -0
  362. {toil-6.0.0 → toil-6.1.0}/requirements-kubernetes.txt +0 -0
  363. {toil-6.0.0 → toil-6.1.0}/requirements-mesos.txt +0 -0
  364. {toil-6.0.0 → toil-6.1.0}/requirements-wdl.txt +0 -0
  365. {toil-6.0.0 → toil-6.1.0}/setup.cfg +0 -0
  366. {toil-6.0.0 → toil-6.1.0}/setup.py +0 -0
  367. {toil-6.0.0 → toil-6.1.0}/src/toil/__init__.py +0 -0
  368. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/__init__.py +0 -0
  369. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/awsBatch.py +0 -0
  370. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/contained_executor.py +0 -0
  371. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/gridengine.py +0 -0
  372. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/htcondor.py +0 -0
  373. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/kubernetes.py +0 -0
  374. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/local_support.py +0 -0
  375. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/lsfHelper.py +0 -0
  376. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/__init__.py +0 -0
  377. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/batchSystem.py +0 -0
  378. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/conftest.py +0 -0
  379. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/executor.py +0 -0
  380. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/mesos/test/__init__.py +0 -0
  381. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/options.py +0 -0
  382. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/registry.py +0 -0
  383. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/singleMachine.py +0 -0
  384. {toil-6.0.0 → toil-6.1.0}/src/toil/batchSystems/torque.py +0 -0
  385. {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/__init__.py +0 -0
  386. {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/conftest.py +0 -0
  387. {toil-6.0.0 → toil-6.1.0}/src/toil/cwl/utils.py +0 -0
  388. {toil-6.0.0 → toil-6.1.0}/src/toil/deferred.py +0 -0
  389. {toil-6.0.0 → toil-6.1.0}/src/toil/fileStores/__init__.py +0 -0
  390. {toil-6.0.0/contrib/mypy-stubs/tes → toil-6.1.0/src/toil/jobStores}/__init__.py +0 -0
  391. {toil-6.0.0/src/toil/jobStores → toil-6.1.0/src/toil/jobStores/aws}/__init__.py +0 -0
  392. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/aws/jobStore.py +0 -0
  393. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/conftest.py +0 -0
  394. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/googleJobStore.py +0 -0
  395. {toil-6.0.0 → toil-6.1.0}/src/toil/jobStores/utils.py +0 -0
  396. {toil-6.0.0/src/toil/jobStores/aws → toil-6.1.0/src/toil/lib}/__init__.py +0 -0
  397. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/accelerators.py +0 -0
  398. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/__init__.py +0 -0
  399. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/ami.py +0 -0
  400. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/iam.py +0 -0
  401. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/session.py +0 -0
  402. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/aws/utils.py +0 -0
  403. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/bioio.py +0 -0
  404. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/compatibility.py +0 -0
  405. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/docker.py +0 -0
  406. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/ec2.py +0 -0
  407. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/ec2nodes.py +0 -0
  408. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/__init__.py +0 -0
  409. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/_dummy.py +0 -0
  410. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/_nacl.py +0 -0
  411. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/encryption/conftest.py +0 -0
  412. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/exceptions.py +0 -0
  413. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/expando.py +0 -0
  414. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/humanize.py +0 -0
  415. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/iterables.py +0 -0
  416. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/memoize.py +0 -0
  417. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/misc.py +0 -0
  418. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/objects.py +0 -0
  419. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/retry.py +0 -0
  420. {toil-6.0.0 → toil-6.1.0}/src/toil/lib/throttle.py +0 -0
  421. {toil-6.0.0/src/toil/lib → toil-6.1.0/src/toil/options}/__init__.py +0 -0
  422. {toil-6.0.0 → toil-6.1.0}/src/toil/options/cwl.py +0 -0
  423. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/__init__.py +0 -0
  424. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/aws/__init__.py +0 -0
  425. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/aws/awsProvisioner.py +0 -0
  426. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/clusterScaler.py +0 -0
  427. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/gceProvisioner.py +0 -0
  428. {toil-6.0.0 → toil-6.1.0}/src/toil/provisioners/node.py +0 -0
  429. {toil-6.0.0 → toil-6.1.0}/src/toil/realtimeLogger.py +0 -0
  430. {toil-6.0.0 → toil-6.1.0}/src/toil/resource.py +0 -0
  431. {toil-6.0.0/src/toil/options → toil-6.1.0/src/toil/server}/__init__.py +0 -0
  432. {toil-6.0.0/src/toil/server → toil-6.1.0/src/toil/server/api_spec}/__init__.py +0 -0
  433. {toil-6.0.0 → toil-6.1.0}/src/toil/server/api_spec/workflow_execution_service.swagger.yaml +0 -0
  434. {toil-6.0.0 → toil-6.1.0}/src/toil/server/app.py +0 -0
  435. {toil-6.0.0 → toil-6.1.0}/src/toil/server/celery_app.py +0 -0
  436. {toil-6.0.0/src/toil/server/api_spec → toil-6.1.0/src/toil/server/cli}/__init__.py +0 -0
  437. {toil-6.0.0 → toil-6.1.0}/src/toil/server/cli/wes_cwl_runner.py +0 -0
  438. {toil-6.0.0 → toil-6.1.0}/src/toil/server/utils.py +0 -0
  439. {toil-6.0.0/src/toil/server/cli → toil-6.1.0/src/toil/server/wes}/__init__.py +0 -0
  440. {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/abstract_backend.py +0 -0
  441. {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/amazon_wes_utils.py +0 -0
  442. {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/tasks.py +0 -0
  443. {toil-6.0.0 → toil-6.1.0}/src/toil/server/wes/toil_backend.py +0 -0
  444. {toil-6.0.0 → toil-6.1.0}/src/toil/server/wsgi_app.py +0 -0
  445. {toil-6.0.0 → toil-6.1.0}/src/toil/serviceManager.py +0 -0
  446. {toil-6.0.0 → toil-6.1.0}/src/toil/test/__init__.py +0 -0
  447. {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/__init__.py +0 -0
  448. {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/batchSystemTest.py +0 -0
  449. {toil-6.0.0 → toil-6.1.0}/src/toil/test/batchSystems/test_lsf_helper.py +0 -0
  450. {toil-6.0.0/src/toil/server/wes → toil-6.1.0/src/toil/test/cactus}/__init__.py +0 -0
  451. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cactus/test_cactus_integration.py +0 -0
  452. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/__init__.py +0 -0
  453. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/alwaysfails.cwl +0 -0
  454. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/colon_test_output.cwl +0 -0
  455. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/colon_test_output_job.yaml +0 -0
  456. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/conditional_wf.cwl +0 -0
  457. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/conditional_wf.yaml +0 -0
  458. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/conftest.py +0 -0
  459. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/directory_from_directory.cwl +0 -0
  460. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/download.cwl +0 -0
  461. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/download_directory.cwl +0 -0
  462. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/download_subdirectory.cwl +0 -0
  463. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo-stderr.cwl +0 -0
  464. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo-stdout-log-dir.cwl +0 -0
  465. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo.cwl +0 -0
  466. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo_string.cwl +0 -0
  467. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/echo_string_scatter_capture_stdout.cwl +0 -0
  468. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/file_from_directory.cwl +0 -0
  469. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/glob_dir.cwl +0 -0
  470. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/load_contents.cwl +0 -0
  471. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/mpi_simple.cwl +0 -0
  472. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/nvidia_smi.cwl +0 -0
  473. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/preemptible.cwl +0 -0
  474. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/preemptible_expression.cwl +0 -0
  475. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revsort.cwl +0 -0
  476. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revsort2.cwl +0 -0
  477. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revtool.cwl +0 -0
  478. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/revtool2.cwl +0 -0
  479. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/s3_secondary_file.cwl +0 -0
  480. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/seqtk_seq.cwl +0 -0
  481. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/sorttool.cwl +0 -0
  482. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/stream.cwl +0 -0
  483. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/test_filename_conflict_detection.cwl +0 -0
  484. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/test_filename_conflict_detection_at_root.cwl +0 -0
  485. {toil-6.0.0 → toil-6.1.0}/src/toil/test/cwl/test_filename_conflict_resolution.cwl +0 -0
  486. {toil-6.0.0 → toil-6.1.0}/src/toil/test/docs/__init__.py +0 -0
  487. {toil-6.0.0 → toil-6.1.0}/src/toil/test/jobStores/__init__.py +0 -0
  488. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/__init__.py +0 -0
  489. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/__init__.py +0 -0
  490. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/test_iam.py +0 -0
  491. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/test_s3.py +0 -0
  492. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/aws/test_utils.py +0 -0
  493. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/dockerTest.py +0 -0
  494. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/test_conversions.py +0 -0
  495. {toil-6.0.0 → toil-6.1.0}/src/toil/test/lib/test_misc.py +0 -0
  496. {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/MesosDataStructuresTest.py +0 -0
  497. {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/__init__.py +0 -0
  498. {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/helloWorld.py +0 -0
  499. {toil-6.0.0 → toil-6.1.0}/src/toil/test/mesos/stress.py +0 -0
  500. {toil-6.0.0/src/toil/test/provisioners → toil-6.1.0/src/toil/test/options}/__init__.py +0 -0
  501. {toil-6.0.0/src/toil/test/provisioners/aws → toil-6.1.0/src/toil/test/provisioners}/__init__.py +0 -0
  502. {toil-6.0.0/src/toil/test/server → toil-6.1.0/src/toil/test/provisioners/aws}/__init__.py +0 -0
  503. {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/aws/awsProvisionerTest.py +0 -0
  504. {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/clusterScalerTest.py +0 -0
  505. {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/gceProvisionerTest.py +0 -0
  506. {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/provisionerTest.py +0 -0
  507. {toil-6.0.0 → toil-6.1.0}/src/toil/test/provisioners/restartScript.py +0 -0
  508. {toil-6.0.0/src/toil/test/sort → toil-6.1.0/src/toil/test/server}/__init__.py +0 -0
  509. {toil-6.0.0 → toil-6.1.0}/src/toil/test/server/serverTest.py +0 -0
  510. {toil-6.0.0/src/toil/test/src → toil-6.1.0/src/toil/test/sort}/__init__.py +0 -0
  511. {toil-6.0.0 → toil-6.1.0}/src/toil/test/sort/restart_sort.py +0 -0
  512. {toil-6.0.0/contrib/slurm-test → toil-6.1.0/src/toil/test/sort}/sort.py +0 -0
  513. {toil-6.0.0 → toil-6.1.0}/src/toil/test/sort/sortTest.py +0 -0
  514. {toil-6.0.0/src/toil/test/utils → toil-6.1.0/src/toil/test/src}/__init__.py +0 -0
  515. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/autoDeploymentTest.py +0 -0
  516. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/busTest.py +0 -0
  517. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/checkpointTest.py +0 -0
  518. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/deferredFunctionTest.py +0 -0
  519. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/dockerCheckTest.py +0 -0
  520. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/fileStoreTest.py +0 -0
  521. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/helloWorldTest.py +0 -0
  522. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/importExportFileTest.py +0 -0
  523. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobDescriptionTest.py +0 -0
  524. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobEncapsulationTest.py +0 -0
  525. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobFileStoreTest.py +0 -0
  526. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobServiceTest.py +0 -0
  527. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/jobTest.py +0 -0
  528. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/miscTests.py +0 -0
  529. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/promisedRequirementTest.py +0 -0
  530. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/promisesTest.py +0 -0
  531. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/realtimeLoggerTest.py +0 -0
  532. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/regularLogTest.py +0 -0
  533. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/resourceTest.py +0 -0
  534. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/restartDAGTest.py +0 -0
  535. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/resumabilityTest.py +0 -0
  536. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/retainTempDirTest.py +0 -0
  537. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/systemTest.py +0 -0
  538. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/threadingTest.py +0 -0
  539. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/toilContextManagerTest.py +0 -0
  540. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/userDefinedJobArgTypeTest.py +0 -0
  541. {toil-6.0.0 → toil-6.1.0}/src/toil/test/src/workerTest.py +0 -0
  542. {toil-6.0.0 → toil-6.1.0}/src/toil/test/utils/toilKillTest.py +0 -0
  543. {toil-6.0.0 → toil-6.1.0}/src/toil/test/wdl/__init__.py +0 -0
  544. {toil-6.0.0 → toil-6.1.0}/src/toil/toilState.py +0 -0
  545. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/__init__.py +0 -0
  546. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilClean.py +0 -0
  547. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilConfig.py +0 -0
  548. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilDebugJob.py +0 -0
  549. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilDestroyCluster.py +0 -0
  550. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilKill.py +0 -0
  551. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilLaunchCluster.py +0 -0
  552. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilMain.py +0 -0
  553. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilRsyncCluster.py +0 -0
  554. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilServer.py +0 -0
  555. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilSshCluster.py +0 -0
  556. {toil-6.0.0 → toil-6.1.0}/src/toil/utils/toilUpdateEC2Instances.py +0 -0
  557. {toil-6.0.0 → toil-6.1.0}/src/toil/wdl/__init__.py +0 -0
  558. {toil-6.0.0 → toil-6.1.0}/src/toil/wdl/utils.py +0 -0
  559. {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/dependency_links.txt +0 -0
  560. {toil-6.0.0 → toil-6.1.0}/src/toil.egg-info/entry_points.txt +0 -0
  561. {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"
@@ -2,7 +2,7 @@ cwltool==3.1.20240112164112
2
2
  schema-salad>=8.4.20230128170514,<9
3
3
  galaxy-tool-util<23
4
4
  galaxy-util<23
5
- ruamel.yaml>=0.15,<=0.18.3
5
+ ruamel.yaml>=0.15,<=0.19
6
6
  ruamel.yaml.clib>=0.2.6
7
7
  networkx!=2.8.1,<4
8
8
  CacheControl[filecache]
@@ -1,19 +1,19 @@
1
- pytest>=6.2.1,<8
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,<69
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,<2
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
@@ -5,4 +5,4 @@ flask-cors==4.0.0
5
5
  gunicorn==21.2.0
6
6
  celery>=5.1.0, <6
7
7
  wes-service>=4.0.0, <5
8
- ruamel.yaml>=0.15,<0.18.4
8
+ ruamel.yaml>=0.15,<0.19
@@ -1,6 +1,6 @@
1
1
  dill>=0.3.2, <0.4
2
2
  requests>=2, <3
3
- docker>=3.7.2, <8
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 (e.g. job is lost).
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=status, exitReason=None, wallTime=None
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) -> 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 or an instance of abstractBatchSystem.BatchJobExitReason.
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
- :param string batchjobID: batch system job ID
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
- :rtype: int|toil.batchSystems.abstractBatchSystem.BatchJobExitReason: exit code int
363
- or BatchJobExitReason if something else happened other than job exiting.
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.get_job_kind(),
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.get_job_kind())
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(Toil.get_toil_coordination_dir(self.workerCleanupInfo.work_dir, self.workerCleanupInfo.coordination_dir),
73
- self.workerCleanupInfo.workflow_id + '-cleanup')
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
- return self.prepareSbatch(cpu, memory, jobID, jobName, job_environment, gpus) + [f'--wrap={command}']
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) -> 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) -> list:
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
- # If job is in a running state, set return code to None to indicate we don't have
149
- # an update.
150
- if state in ('PENDING', 'RUNNING', 'CONFIGURING', 'COMPLETING', 'RESIZING', 'SUSPENDED'):
151
- rc = None
152
- return rc
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
- # Returns the sbatch command line before the script to run
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.