toil 5.12.0__py3-none-any.whl → 6.1.0__py3-none-any.whl

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 (164) hide show
  1. toil/__init__.py +18 -13
  2. toil/batchSystems/abstractBatchSystem.py +39 -13
  3. toil/batchSystems/abstractGridEngineBatchSystem.py +24 -24
  4. toil/batchSystems/awsBatch.py +14 -14
  5. toil/batchSystems/cleanup_support.py +7 -3
  6. toil/batchSystems/contained_executor.py +3 -3
  7. toil/batchSystems/htcondor.py +0 -1
  8. toil/batchSystems/kubernetes.py +34 -31
  9. toil/batchSystems/local_support.py +3 -1
  10. toil/batchSystems/lsf.py +7 -7
  11. toil/batchSystems/mesos/batchSystem.py +7 -7
  12. toil/batchSystems/options.py +32 -83
  13. toil/batchSystems/registry.py +104 -23
  14. toil/batchSystems/singleMachine.py +16 -13
  15. toil/batchSystems/slurm.py +87 -16
  16. toil/batchSystems/torque.py +0 -1
  17. toil/bus.py +44 -8
  18. toil/common.py +544 -753
  19. toil/cwl/__init__.py +28 -32
  20. toil/cwl/cwltoil.py +595 -574
  21. toil/cwl/utils.py +55 -10
  22. toil/exceptions.py +1 -1
  23. toil/fileStores/__init__.py +2 -2
  24. toil/fileStores/abstractFileStore.py +88 -14
  25. toil/fileStores/cachingFileStore.py +610 -549
  26. toil/fileStores/nonCachingFileStore.py +46 -22
  27. toil/job.py +182 -101
  28. toil/jobStores/abstractJobStore.py +161 -95
  29. toil/jobStores/aws/jobStore.py +23 -9
  30. toil/jobStores/aws/utils.py +6 -6
  31. toil/jobStores/fileJobStore.py +116 -18
  32. toil/jobStores/googleJobStore.py +16 -7
  33. toil/jobStores/utils.py +5 -6
  34. toil/leader.py +87 -56
  35. toil/lib/accelerators.py +10 -5
  36. toil/lib/aws/__init__.py +3 -14
  37. toil/lib/aws/ami.py +22 -9
  38. toil/lib/aws/iam.py +21 -13
  39. toil/lib/aws/session.py +2 -16
  40. toil/lib/aws/utils.py +4 -5
  41. toil/lib/compatibility.py +1 -1
  42. toil/lib/conversions.py +26 -3
  43. toil/lib/docker.py +22 -23
  44. toil/lib/ec2.py +10 -6
  45. toil/lib/ec2nodes.py +106 -100
  46. toil/lib/encryption/_nacl.py +2 -1
  47. toil/lib/generatedEC2Lists.py +325 -18
  48. toil/lib/io.py +49 -2
  49. toil/lib/misc.py +1 -1
  50. toil/lib/resources.py +9 -2
  51. toil/lib/threading.py +101 -38
  52. toil/options/common.py +736 -0
  53. toil/options/cwl.py +336 -0
  54. toil/options/wdl.py +37 -0
  55. toil/provisioners/abstractProvisioner.py +9 -4
  56. toil/provisioners/aws/__init__.py +3 -6
  57. toil/provisioners/aws/awsProvisioner.py +6 -0
  58. toil/provisioners/clusterScaler.py +3 -2
  59. toil/provisioners/gceProvisioner.py +2 -2
  60. toil/realtimeLogger.py +2 -1
  61. toil/resource.py +24 -18
  62. toil/server/app.py +2 -3
  63. toil/server/cli/wes_cwl_runner.py +4 -4
  64. toil/server/utils.py +1 -1
  65. toil/server/wes/abstract_backend.py +3 -2
  66. toil/server/wes/amazon_wes_utils.py +5 -4
  67. toil/server/wes/tasks.py +2 -3
  68. toil/server/wes/toil_backend.py +2 -10
  69. toil/server/wsgi_app.py +2 -0
  70. toil/serviceManager.py +12 -10
  71. toil/statsAndLogging.py +41 -9
  72. toil/test/__init__.py +29 -54
  73. toil/test/batchSystems/batchSystemTest.py +11 -111
  74. toil/test/batchSystems/test_slurm.py +24 -8
  75. toil/test/cactus/__init__.py +0 -0
  76. toil/test/cactus/test_cactus_integration.py +58 -0
  77. toil/test/cwl/cwlTest.py +438 -223
  78. toil/test/cwl/glob_dir.cwl +15 -0
  79. toil/test/cwl/preemptible.cwl +21 -0
  80. toil/test/cwl/preemptible_expression.cwl +28 -0
  81. toil/test/cwl/revsort.cwl +1 -1
  82. toil/test/cwl/revsort2.cwl +1 -1
  83. toil/test/docs/scriptsTest.py +2 -3
  84. toil/test/jobStores/jobStoreTest.py +34 -21
  85. toil/test/lib/aws/test_iam.py +4 -14
  86. toil/test/lib/aws/test_utils.py +0 -3
  87. toil/test/lib/dockerTest.py +4 -4
  88. toil/test/lib/test_ec2.py +12 -17
  89. toil/test/mesos/helloWorld.py +4 -5
  90. toil/test/mesos/stress.py +1 -1
  91. toil/test/{wdl/conftest.py → options/__init__.py} +0 -10
  92. toil/test/options/options.py +37 -0
  93. toil/test/provisioners/aws/awsProvisionerTest.py +9 -5
  94. toil/test/provisioners/clusterScalerTest.py +6 -4
  95. toil/test/provisioners/clusterTest.py +23 -11
  96. toil/test/provisioners/gceProvisionerTest.py +0 -6
  97. toil/test/provisioners/restartScript.py +3 -2
  98. toil/test/server/serverTest.py +1 -1
  99. toil/test/sort/restart_sort.py +2 -1
  100. toil/test/sort/sort.py +2 -1
  101. toil/test/sort/sortTest.py +2 -13
  102. toil/test/src/autoDeploymentTest.py +45 -45
  103. toil/test/src/busTest.py +5 -5
  104. toil/test/src/checkpointTest.py +2 -2
  105. toil/test/src/deferredFunctionTest.py +1 -1
  106. toil/test/src/fileStoreTest.py +32 -16
  107. toil/test/src/helloWorldTest.py +1 -1
  108. toil/test/src/importExportFileTest.py +1 -1
  109. toil/test/src/jobDescriptionTest.py +2 -1
  110. toil/test/src/jobServiceTest.py +1 -1
  111. toil/test/src/jobTest.py +18 -18
  112. toil/test/src/miscTests.py +5 -3
  113. toil/test/src/promisedRequirementTest.py +3 -3
  114. toil/test/src/realtimeLoggerTest.py +1 -1
  115. toil/test/src/resourceTest.py +2 -2
  116. toil/test/src/restartDAGTest.py +1 -1
  117. toil/test/src/resumabilityTest.py +36 -2
  118. toil/test/src/retainTempDirTest.py +1 -1
  119. toil/test/src/systemTest.py +2 -2
  120. toil/test/src/toilContextManagerTest.py +2 -2
  121. toil/test/src/userDefinedJobArgTypeTest.py +1 -1
  122. toil/test/utils/toilDebugTest.py +98 -32
  123. toil/test/utils/toilKillTest.py +2 -2
  124. toil/test/utils/utilsTest.py +23 -3
  125. toil/test/wdl/wdltoil_test.py +223 -45
  126. toil/toilState.py +7 -6
  127. toil/utils/toilClean.py +1 -1
  128. toil/utils/toilConfig.py +36 -0
  129. toil/utils/toilDebugFile.py +60 -33
  130. toil/utils/toilDebugJob.py +39 -12
  131. toil/utils/toilDestroyCluster.py +1 -1
  132. toil/utils/toilKill.py +1 -1
  133. toil/utils/toilLaunchCluster.py +13 -2
  134. toil/utils/toilMain.py +3 -2
  135. toil/utils/toilRsyncCluster.py +1 -1
  136. toil/utils/toilSshCluster.py +1 -1
  137. toil/utils/toilStats.py +445 -305
  138. toil/utils/toilStatus.py +2 -5
  139. toil/version.py +10 -10
  140. toil/wdl/utils.py +2 -122
  141. toil/wdl/wdltoil.py +1257 -492
  142. toil/worker.py +55 -46
  143. toil-6.1.0.dist-info/METADATA +124 -0
  144. toil-6.1.0.dist-info/RECORD +241 -0
  145. {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/WHEEL +1 -1
  146. {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/entry_points.txt +0 -1
  147. toil/batchSystems/parasol.py +0 -379
  148. toil/batchSystems/tes.py +0 -459
  149. toil/test/batchSystems/parasolTestSupport.py +0 -117
  150. toil/test/wdl/builtinTest.py +0 -506
  151. toil/test/wdl/toilwdlTest.py +0 -522
  152. toil/wdl/toilwdl.py +0 -141
  153. toil/wdl/versions/dev.py +0 -107
  154. toil/wdl/versions/draft2.py +0 -980
  155. toil/wdl/versions/v1.py +0 -794
  156. toil/wdl/wdl_analysis.py +0 -116
  157. toil/wdl/wdl_functions.py +0 -997
  158. toil/wdl/wdl_synthesis.py +0 -1011
  159. toil/wdl/wdl_types.py +0 -243
  160. toil-5.12.0.dist-info/METADATA +0 -118
  161. toil-5.12.0.dist-info/RECORD +0 -244
  162. /toil/{wdl/versions → options}/__init__.py +0 -0
  163. {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/LICENSE +0 -0
  164. {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,11 @@
14
14
  """Debug tool for running a toil job locally."""
15
15
  import logging
16
16
 
17
+ import pprint
18
+ import sys
19
+
17
20
  from toil.common import Config, Toil, parser_with_common_options
21
+ from toil.jobStores.fileJobStore import FileJobStore
18
22
  from toil.statsAndLogging import set_logging_from_options
19
23
  from toil.utils.toilDebugFile import printContentsOfJobStore
20
24
  from toil.worker import workerScript
@@ -23,28 +27,51 @@ logger = logging.getLogger(__name__)
23
27
 
24
28
 
25
29
  def main() -> None:
26
- parser = parser_with_common_options(jobstore_option=True)
27
- parser.add_argument("jobID", nargs=1,
30
+ parser = parser_with_common_options(jobstore_option=True, prog="toil debug-job")
31
+ parser.add_argument("jobID", type=str, nargs='?', default=None,
28
32
  help="The job store id of a job within the provided jobstore to run by itself.")
29
- parser.add_argument("--printJobInfo", nargs=1,
30
- help="Return information about this job to the user including preceding jobs, "
31
- "inputs, outputs, and runtime from the last known run.")
33
+ parser.add_argument("--printJobInfo", type=str,
34
+ help="Dump debugging info about this job ID")
32
35
 
33
36
  options = parser.parse_args()
34
37
  set_logging_from_options(options)
35
- config = Config()
38
+
39
+ jobStore = Toil.resumeJobStore(options.jobStore)
40
+ # Get the config with the workflow ID from the job store
41
+ config = jobStore.config
42
+ # But override its options
36
43
  config.setOptions(options)
37
44
 
38
- jobStore = Toil.resumeJobStore(config.jobStore)
45
+ did_something = False
39
46
 
40
47
  if options.printJobInfo:
41
- printContentsOfJobStore(jobStorePath=config.jobStore, nameOfJob=options.printJobInfo)
48
+ if isinstance(jobStore, FileJobStore):
49
+ # List all its files if we can
50
+ printContentsOfJobStore(job_store=jobStore, job_id=options.printJobInfo)
51
+ # Print the job description itself
52
+ job_desc = jobStore.load_job(options.printJobInfo)
53
+ print(f"Job: {job_desc}")
54
+ pprint.pprint(job_desc.__dict__)
55
+
56
+ did_something = True
42
57
 
43
58
  # TODO: Option to print list of successor jobs
44
59
  # TODO: Option to run job within python debugger, allowing step through of arguments
45
60
  # idea would be to have option to import pdb and set breakpoint at the start of the user's code
46
61
 
47
- jobID = options.jobID[0]
48
- logger.debug(f"Running the following job locally: {jobID}")
49
- workerScript(jobStore, config, jobID, jobID, redirectOutputToLogFile=False)
50
- logger.debug(f"Finished running: {jobID}")
62
+ if options.jobID is not None:
63
+ # We actually want to run a job.
64
+
65
+ jobID = options.jobID
66
+ logger.debug(f"Running the following job locally: {jobID}")
67
+ workerScript(jobStore, config, jobID, jobID, redirectOutputToLogFile=False)
68
+ logger.debug(f"Finished running: {jobID}")
69
+ # Even if the job fails, the worker script succeeds unless something goes wrong with it internally.
70
+
71
+ did_something = True
72
+
73
+ if not did_something:
74
+ # Somebody forgot to tell us to do anything.
75
+ # Show the usage instructions.
76
+ parser.print_help()
77
+ sys.exit(1)
@@ -21,7 +21,7 @@ from toil.statsAndLogging import set_logging_from_options
21
21
  logger = logging.getLogger(__name__)
22
22
 
23
23
  def main() -> None:
24
- parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
24
+ parser = parser_with_common_options(provisioner_options=True, jobstore_option=False, prog="toil destroy-cluster")
25
25
  options = parser.parse_args()
26
26
  set_logging_from_options(options)
27
27
 
toil/utils/toilKill.py CHANGED
@@ -25,7 +25,7 @@ logger = logging.getLogger(__name__)
25
25
 
26
26
 
27
27
  def main() -> None:
28
- parser = parser_with_common_options()
28
+ parser = parser_with_common_options(prog="toil kill")
29
29
  parser.add_argument('--force', action='store_true',
30
30
  help="Send SIGKILL to the leader process if local.")
31
31
  options = parser.parse_args()
@@ -37,9 +37,10 @@ def create_tags_dict(tags: List[str]) -> Dict[str, str]:
37
37
 
38
38
 
39
39
  def main() -> None:
40
- parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
40
+ parser = parser_with_common_options(provisioner_options=True, jobstore_option=False, prog="toil launch-cluster")
41
41
  parser.add_argument("-T", "--clusterType", dest="clusterType",
42
- choices=['mesos', 'kubernetes'], default='mesos',
42
+ choices=['mesos', 'kubernetes'],
43
+ default=None, # TODO: change default to "kubernetes" when we are ready.
43
44
  help="Cluster scheduler to use.")
44
45
  parser.add_argument("--leaderNodeType", dest="leaderNodeType", required=True,
45
46
  help="Non-preemptible node type to use for the cluster leader.")
@@ -160,6 +161,16 @@ def main() -> None:
160
161
  raise RuntimeError(f'Please provide a value for --zone or set a default in the '
161
162
  f'TOIL_{options.provisioner.upper()}_ZONE environment variable.')
162
163
 
164
+ if options.clusterType == "mesos":
165
+ logger.warning('You are using a Mesos cluster, which is no longer recommended as Toil is '
166
+ 'transitioning to Kubernetes-based clusters. Consider switching to '
167
+ '--clusterType=kubernetes instead.')
168
+
169
+ if options.clusterType is None:
170
+ logger.warning('Argument --clusterType is not set... using "mesos". '
171
+ 'In future versions of Toil, the default cluster scheduler will be '
172
+ 'set to "kubernetes" if the cluster type is not specified.')
173
+ options.clusterType = "mesos"
163
174
 
164
175
  logger.info('Creating cluster %s...', options.clusterName)
165
176
 
toil/utils/toilMain.py CHANGED
@@ -5,7 +5,7 @@ import textwrap
5
5
  import types
6
6
  from typing import Any, Dict
7
7
 
8
- import pkg_resources
8
+ from importlib.metadata import version as metadata_version
9
9
 
10
10
  from toil.version import version
11
11
 
@@ -47,6 +47,7 @@ def get_or_die(module: types.ModuleType, name: str) -> Any:
47
47
  def loadModules() -> Dict[str, types.ModuleType]:
48
48
  # noinspection PyUnresolvedReferences
49
49
  from toil.utils import toilClean # noqa
50
+ from toil.utils import toilConfig # noqa
50
51
  from toil.utils import toilDebugFile # noqa
51
52
  from toil.utils import toilDebugJob # noqa
52
53
  from toil.utils import toilDestroyCluster # noqa
@@ -77,6 +78,6 @@ def printHelp(modules: Dict[str, types.ModuleType]) -> None:
77
78
 
78
79
  def printVersion() -> None:
79
80
  try:
80
- print(pkg_resources.get_distribution('toil').version)
81
+ print(metadata_version('toil'))
81
82
  except:
82
83
  print(f'Version gathered from toil.version: {version}')
@@ -23,7 +23,7 @@ logger = logging.getLogger(__name__)
23
23
 
24
24
 
25
25
  def main() -> None:
26
- parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
26
+ parser = parser_with_common_options(provisioner_options=True, jobstore_option=False, prog="toil rsync-cluster")
27
27
  parser.add_argument("--insecure", dest='insecure', action='store_true', required=False,
28
28
  help="Temporarily disable strict host key checking.")
29
29
  parser.add_argument("args", nargs=argparse.REMAINDER, help="Arguments to pass to"
@@ -25,7 +25,7 @@ logger = logging.getLogger(__name__)
25
25
 
26
26
 
27
27
  def main() -> None:
28
- parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
28
+ parser = parser_with_common_options(provisioner_options=True, jobstore_option=False, prog="toil ssh-cluster")
29
29
  parser.add_argument("--insecure", action='store_true',
30
30
  help="Temporarily disable strict host key checking.")
31
31
  parser.add_argument("--sshOption", dest='sshOptions', default=[], action='append',