toil 7.0.0__py3-none-any.whl → 8.0.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 (190) hide show
  1. toil/__init__.py +121 -83
  2. toil/batchSystems/__init__.py +1 -0
  3. toil/batchSystems/abstractBatchSystem.py +137 -77
  4. toil/batchSystems/abstractGridEngineBatchSystem.py +211 -101
  5. toil/batchSystems/awsBatch.py +237 -128
  6. toil/batchSystems/cleanup_support.py +22 -16
  7. toil/batchSystems/contained_executor.py +30 -26
  8. toil/batchSystems/gridengine.py +85 -49
  9. toil/batchSystems/htcondor.py +164 -87
  10. toil/batchSystems/kubernetes.py +622 -386
  11. toil/batchSystems/local_support.py +17 -12
  12. toil/batchSystems/lsf.py +132 -79
  13. toil/batchSystems/lsfHelper.py +13 -11
  14. toil/batchSystems/mesos/__init__.py +41 -29
  15. toil/batchSystems/mesos/batchSystem.py +288 -149
  16. toil/batchSystems/mesos/executor.py +77 -49
  17. toil/batchSystems/mesos/test/__init__.py +31 -23
  18. toil/batchSystems/options.py +38 -29
  19. toil/batchSystems/registry.py +53 -19
  20. toil/batchSystems/singleMachine.py +293 -123
  21. toil/batchSystems/slurm.py +489 -137
  22. toil/batchSystems/torque.py +46 -32
  23. toil/bus.py +141 -73
  24. toil/common.py +630 -359
  25. toil/cwl/__init__.py +1 -1
  26. toil/cwl/cwltoil.py +1114 -532
  27. toil/cwl/utils.py +17 -22
  28. toil/deferred.py +62 -41
  29. toil/exceptions.py +5 -3
  30. toil/fileStores/__init__.py +5 -5
  31. toil/fileStores/abstractFileStore.py +88 -57
  32. toil/fileStores/cachingFileStore.py +711 -247
  33. toil/fileStores/nonCachingFileStore.py +113 -75
  34. toil/job.py +988 -315
  35. toil/jobStores/abstractJobStore.py +387 -243
  36. toil/jobStores/aws/jobStore.py +727 -403
  37. toil/jobStores/aws/utils.py +161 -109
  38. toil/jobStores/conftest.py +1 -0
  39. toil/jobStores/fileJobStore.py +289 -151
  40. toil/jobStores/googleJobStore.py +137 -70
  41. toil/jobStores/utils.py +36 -15
  42. toil/leader.py +614 -269
  43. toil/lib/accelerators.py +115 -18
  44. toil/lib/aws/__init__.py +55 -28
  45. toil/lib/aws/ami.py +122 -87
  46. toil/lib/aws/iam.py +284 -108
  47. toil/lib/aws/s3.py +31 -0
  48. toil/lib/aws/session.py +193 -58
  49. toil/lib/aws/utils.py +238 -218
  50. toil/lib/bioio.py +13 -5
  51. toil/lib/compatibility.py +11 -6
  52. toil/lib/conversions.py +83 -49
  53. toil/lib/docker.py +131 -103
  54. toil/lib/ec2.py +322 -209
  55. toil/lib/ec2nodes.py +174 -106
  56. toil/lib/encryption/_dummy.py +5 -3
  57. toil/lib/encryption/_nacl.py +10 -6
  58. toil/lib/encryption/conftest.py +1 -0
  59. toil/lib/exceptions.py +26 -7
  60. toil/lib/expando.py +4 -2
  61. toil/lib/ftp_utils.py +217 -0
  62. toil/lib/generatedEC2Lists.py +127 -19
  63. toil/lib/humanize.py +6 -2
  64. toil/lib/integration.py +341 -0
  65. toil/lib/io.py +99 -11
  66. toil/lib/iterables.py +4 -2
  67. toil/lib/memoize.py +12 -8
  68. toil/lib/misc.py +65 -18
  69. toil/lib/objects.py +2 -2
  70. toil/lib/resources.py +19 -7
  71. toil/lib/retry.py +115 -77
  72. toil/lib/threading.py +282 -80
  73. toil/lib/throttle.py +15 -14
  74. toil/options/common.py +834 -401
  75. toil/options/cwl.py +175 -90
  76. toil/options/runner.py +50 -0
  77. toil/options/wdl.py +70 -19
  78. toil/provisioners/__init__.py +111 -46
  79. toil/provisioners/abstractProvisioner.py +322 -157
  80. toil/provisioners/aws/__init__.py +62 -30
  81. toil/provisioners/aws/awsProvisioner.py +980 -627
  82. toil/provisioners/clusterScaler.py +541 -279
  83. toil/provisioners/gceProvisioner.py +282 -179
  84. toil/provisioners/node.py +147 -79
  85. toil/realtimeLogger.py +34 -22
  86. toil/resource.py +137 -75
  87. toil/server/app.py +127 -61
  88. toil/server/celery_app.py +3 -1
  89. toil/server/cli/wes_cwl_runner.py +82 -53
  90. toil/server/utils.py +54 -28
  91. toil/server/wes/abstract_backend.py +64 -26
  92. toil/server/wes/amazon_wes_utils.py +21 -15
  93. toil/server/wes/tasks.py +121 -63
  94. toil/server/wes/toil_backend.py +142 -107
  95. toil/server/wsgi_app.py +4 -3
  96. toil/serviceManager.py +58 -22
  97. toil/statsAndLogging.py +148 -64
  98. toil/test/__init__.py +263 -179
  99. toil/test/batchSystems/batchSystemTest.py +438 -195
  100. toil/test/batchSystems/batch_system_plugin_test.py +18 -7
  101. toil/test/batchSystems/test_gridengine.py +173 -0
  102. toil/test/batchSystems/test_lsf_helper.py +67 -58
  103. toil/test/batchSystems/test_slurm.py +93 -47
  104. toil/test/cactus/test_cactus_integration.py +20 -22
  105. toil/test/cwl/cwlTest.py +271 -71
  106. toil/test/cwl/measure_default_memory.cwl +12 -0
  107. toil/test/cwl/not_run_required_input.cwl +29 -0
  108. toil/test/cwl/scatter_duplicate_outputs.cwl +40 -0
  109. toil/test/docs/scriptsTest.py +60 -34
  110. toil/test/jobStores/jobStoreTest.py +412 -235
  111. toil/test/lib/aws/test_iam.py +116 -48
  112. toil/test/lib/aws/test_s3.py +16 -9
  113. toil/test/lib/aws/test_utils.py +5 -6
  114. toil/test/lib/dockerTest.py +118 -141
  115. toil/test/lib/test_conversions.py +113 -115
  116. toil/test/lib/test_ec2.py +57 -49
  117. toil/test/lib/test_integration.py +104 -0
  118. toil/test/lib/test_misc.py +12 -5
  119. toil/test/mesos/MesosDataStructuresTest.py +23 -10
  120. toil/test/mesos/helloWorld.py +7 -6
  121. toil/test/mesos/stress.py +25 -20
  122. toil/test/options/options.py +7 -2
  123. toil/test/provisioners/aws/awsProvisionerTest.py +293 -140
  124. toil/test/provisioners/clusterScalerTest.py +440 -250
  125. toil/test/provisioners/clusterTest.py +81 -42
  126. toil/test/provisioners/gceProvisionerTest.py +174 -100
  127. toil/test/provisioners/provisionerTest.py +25 -13
  128. toil/test/provisioners/restartScript.py +5 -4
  129. toil/test/server/serverTest.py +188 -141
  130. toil/test/sort/restart_sort.py +137 -68
  131. toil/test/sort/sort.py +134 -66
  132. toil/test/sort/sortTest.py +91 -49
  133. toil/test/src/autoDeploymentTest.py +140 -100
  134. toil/test/src/busTest.py +20 -18
  135. toil/test/src/checkpointTest.py +8 -2
  136. toil/test/src/deferredFunctionTest.py +49 -35
  137. toil/test/src/dockerCheckTest.py +33 -26
  138. toil/test/src/environmentTest.py +20 -10
  139. toil/test/src/fileStoreTest.py +538 -271
  140. toil/test/src/helloWorldTest.py +7 -4
  141. toil/test/src/importExportFileTest.py +61 -31
  142. toil/test/src/jobDescriptionTest.py +32 -17
  143. toil/test/src/jobEncapsulationTest.py +2 -0
  144. toil/test/src/jobFileStoreTest.py +74 -50
  145. toil/test/src/jobServiceTest.py +187 -73
  146. toil/test/src/jobTest.py +120 -70
  147. toil/test/src/miscTests.py +19 -18
  148. toil/test/src/promisedRequirementTest.py +82 -36
  149. toil/test/src/promisesTest.py +7 -6
  150. toil/test/src/realtimeLoggerTest.py +6 -6
  151. toil/test/src/regularLogTest.py +71 -37
  152. toil/test/src/resourceTest.py +80 -49
  153. toil/test/src/restartDAGTest.py +36 -22
  154. toil/test/src/resumabilityTest.py +9 -2
  155. toil/test/src/retainTempDirTest.py +45 -14
  156. toil/test/src/systemTest.py +12 -8
  157. toil/test/src/threadingTest.py +44 -25
  158. toil/test/src/toilContextManagerTest.py +10 -7
  159. toil/test/src/userDefinedJobArgTypeTest.py +8 -5
  160. toil/test/src/workerTest.py +33 -16
  161. toil/test/utils/toilDebugTest.py +70 -58
  162. toil/test/utils/toilKillTest.py +4 -5
  163. toil/test/utils/utilsTest.py +239 -102
  164. toil/test/wdl/wdltoil_test.py +789 -148
  165. toil/test/wdl/wdltoil_test_kubernetes.py +37 -23
  166. toil/toilState.py +52 -26
  167. toil/utils/toilConfig.py +13 -4
  168. toil/utils/toilDebugFile.py +44 -27
  169. toil/utils/toilDebugJob.py +85 -25
  170. toil/utils/toilDestroyCluster.py +11 -6
  171. toil/utils/toilKill.py +8 -3
  172. toil/utils/toilLaunchCluster.py +251 -145
  173. toil/utils/toilMain.py +37 -16
  174. toil/utils/toilRsyncCluster.py +27 -14
  175. toil/utils/toilSshCluster.py +45 -22
  176. toil/utils/toilStats.py +75 -36
  177. toil/utils/toilStatus.py +226 -119
  178. toil/utils/toilUpdateEC2Instances.py +3 -1
  179. toil/version.py +11 -11
  180. toil/wdl/utils.py +5 -5
  181. toil/wdl/wdltoil.py +3513 -1052
  182. toil/worker.py +269 -128
  183. toil-8.0.0.dist-info/METADATA +173 -0
  184. toil-8.0.0.dist-info/RECORD +253 -0
  185. {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/WHEEL +1 -1
  186. toil-7.0.0.dist-info/METADATA +0 -158
  187. toil-7.0.0.dist-info/RECORD +0 -244
  188. {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/LICENSE +0 -0
  189. {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/entry_points.txt +0 -0
  190. {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,8 @@ import importlib
16
16
  import logging
17
17
  import pkgutil
18
18
  import warnings
19
- from typing import TYPE_CHECKING, Callable, Dict, List, Sequence, Tuple, Type
19
+ from collections.abc import Sequence
20
+ from typing import TYPE_CHECKING, Callable
20
21
 
21
22
  from toil.lib.compatibility import deprecated
22
23
  from toil.lib.memoize import memoize
@@ -30,7 +31,10 @@ logger = logging.getLogger(__name__)
30
31
  # Plugin system/API
31
32
  #####
32
33
 
33
- def add_batch_system_factory(key: str, class_factory: Callable[[], Type['AbstractBatchSystem']]):
34
+
35
+ def add_batch_system_factory(
36
+ key: str, class_factory: Callable[[], type["AbstractBatchSystem"]]
37
+ ):
34
38
  """
35
39
  Adds a batch system to the registry for workflow or plugin-supplied batch systems.
36
40
 
@@ -39,6 +43,7 @@ def add_batch_system_factory(key: str, class_factory: Callable[[], Type['Abstrac
39
43
  _registry_keys.append(key)
40
44
  _registry[key] = class_factory
41
45
 
46
+
42
47
  def get_batch_systems() -> Sequence[str]:
43
48
  """
44
49
  Get the names of all the availsble batch systems.
@@ -47,7 +52,8 @@ def get_batch_systems() -> Sequence[str]:
47
52
 
48
53
  return _registry_keys
49
54
 
50
- def get_batch_system(key: str) -> Type['AbstractBatchSystem']:
55
+
56
+ def get_batch_system(key: str) -> type["AbstractBatchSystem"]:
51
57
  """
52
58
  Get a batch system class by name.
53
59
 
@@ -58,68 +64,81 @@ def get_batch_system(key: str) -> Type['AbstractBatchSystem']:
58
64
  return _registry[key]()
59
65
 
60
66
 
61
- DEFAULT_BATCH_SYSTEM = 'single_machine'
67
+ DEFAULT_BATCH_SYSTEM = "single_machine"
62
68
 
63
69
  #####
64
70
  # Built-in batch systems
65
71
  #####
66
72
 
73
+
67
74
  def aws_batch_batch_system_factory():
68
75
  from toil.batchSystems.awsBatch import AWSBatchBatchSystem
76
+
69
77
  return AWSBatchBatchSystem
70
78
 
79
+
71
80
  def gridengine_batch_system_factory():
72
81
  from toil.batchSystems.gridengine import GridEngineBatchSystem
82
+
73
83
  return GridEngineBatchSystem
74
84
 
75
85
 
76
86
  def lsf_batch_system_factory():
77
87
  from toil.batchSystems.lsf import LSFBatchSystem
88
+
78
89
  return LSFBatchSystem
79
90
 
80
91
 
81
92
  def single_machine_batch_system_factory():
82
93
  from toil.batchSystems.singleMachine import SingleMachineBatchSystem
94
+
83
95
  return SingleMachineBatchSystem
84
96
 
85
97
 
86
98
  def mesos_batch_system_factory():
87
99
  from toil.batchSystems.mesos.batchSystem import MesosBatchSystem
100
+
88
101
  return MesosBatchSystem
89
102
 
90
103
 
91
104
  def slurm_batch_system_factory():
92
105
  from toil.batchSystems.slurm import SlurmBatchSystem
106
+
93
107
  return SlurmBatchSystem
94
108
 
109
+
95
110
  def torque_batch_system_factory():
96
111
  from toil.batchSystems.torque import TorqueBatchSystem
112
+
97
113
  return TorqueBatchSystem
98
114
 
99
115
 
100
116
  def htcondor_batch_system_factory():
101
117
  from toil.batchSystems.htcondor import HTCondorBatchSystem
118
+
102
119
  return HTCondorBatchSystem
103
120
 
104
121
 
105
122
  def kubernetes_batch_system_factory():
106
123
  from toil.batchSystems.kubernetes import KubernetesBatchSystem
124
+
107
125
  return KubernetesBatchSystem
108
126
 
127
+
109
128
  #####
110
129
  # Registry implementation
111
130
  #####
112
131
 
113
- _registry: Dict[str, Callable[[], Type["AbstractBatchSystem"]]] = {
114
- 'aws_batch' : aws_batch_batch_system_factory,
115
- 'single_machine' : single_machine_batch_system_factory,
116
- 'grid_engine' : gridengine_batch_system_factory,
117
- 'lsf' : lsf_batch_system_factory,
118
- 'mesos' : mesos_batch_system_factory,
119
- 'slurm' : slurm_batch_system_factory,
120
- 'torque' : torque_batch_system_factory,
121
- 'htcondor' : htcondor_batch_system_factory,
122
- 'kubernetes' : kubernetes_batch_system_factory
132
+ _registry: dict[str, Callable[[], type["AbstractBatchSystem"]]] = {
133
+ "aws_batch": aws_batch_batch_system_factory,
134
+ "single_machine": single_machine_batch_system_factory,
135
+ "grid_engine": gridengine_batch_system_factory,
136
+ "lsf": lsf_batch_system_factory,
137
+ "mesos": mesos_batch_system_factory,
138
+ "slurm": slurm_batch_system_factory,
139
+ "torque": torque_batch_system_factory,
140
+ "htcondor": htcondor_batch_system_factory,
141
+ "kubernetes": kubernetes_batch_system_factory,
123
142
  }
124
143
  _registry_keys = list(_registry.keys())
125
144
 
@@ -127,6 +146,7 @@ _registry_keys = list(_registry.keys())
127
146
  # add_batch_system_factory()
128
147
  _PLUGIN_NAME_PREFIX = "toil_batch_system_"
129
148
 
149
+
130
150
  @memoize
131
151
  def _load_all_plugins() -> None:
132
152
  """
@@ -139,6 +159,7 @@ def _load_all_plugins() -> None:
139
159
  # If it is a Toil batch system plugin, import it
140
160
  importlib.import_module(name)
141
161
 
162
+
142
163
  #####
143
164
  # Deprecated API
144
165
  #####
@@ -155,17 +176,24 @@ def __getattr__(name):
155
176
  See <https://stackoverflow.com/a/48242860>.
156
177
  """
157
178
  if name == "BATCH_SYSTEM_FACTORY_REGISTRY":
158
- warnings.warn("BATCH_SYSTEM_FACTORY_REGISTRY is deprecated; use get_batch_system() or add_batch_system_factory()", DeprecationWarning)
179
+ warnings.warn(
180
+ "BATCH_SYSTEM_FACTORY_REGISTRY is deprecated; use get_batch_system() or add_batch_system_factory()",
181
+ DeprecationWarning,
182
+ )
159
183
  return _registry
160
184
  elif name == "BATCH_SYSTEMS":
161
- warnings.warn("BATCH_SYSTEMS is deprecated; use get_batch_systems()", DeprecationWarning)
185
+ warnings.warn(
186
+ "BATCH_SYSTEMS is deprecated; use get_batch_systems()", DeprecationWarning
187
+ )
162
188
  return _registry_keys
163
189
  else:
164
190
  raise AttributeError(f"Module {__name__} ahs no attribute {name}")
165
191
 
166
192
 
167
193
  @deprecated(new_function_name="add_batch_system_factory")
168
- def addBatchSystemFactory(key: str, batchSystemFactory: Callable[[], Type['AbstractBatchSystem']]):
194
+ def addBatchSystemFactory(
195
+ key: str, batchSystemFactory: Callable[[], type["AbstractBatchSystem"]]
196
+ ):
169
197
  """
170
198
  Deprecated method to add a batch system.
171
199
  """
@@ -180,7 +208,10 @@ def addBatchSystemFactory(key: str, batchSystemFactory: Callable[[], Type['Abstr
180
208
  # the globals because module-level globals are their own references, so we
181
209
  # can't touch this module's global name bindings from a client module.
182
210
 
183
- def save_batch_system_plugin_state() -> Tuple[List[str], Dict[str, Callable[[], Type['AbstractBatchSystem']]]]:
211
+
212
+ def save_batch_system_plugin_state() -> (
213
+ tuple[list[str], dict[str, Callable[[], type["AbstractBatchSystem"]]]]
214
+ ):
184
215
  """
185
216
  Return a snapshot of the plugin registry that can be restored to remove
186
217
  added plugins. Useful for testing the plugin system in-process with other
@@ -190,7 +221,10 @@ def save_batch_system_plugin_state() -> Tuple[List[str], Dict[str, Callable[[],
190
221
  snapshot = (list(_registry_keys), dict(_registry))
191
222
  return snapshot
192
223
 
193
- def restore_batch_system_plugin_state(snapshot: Tuple[List[str], Dict[str, Callable[[], Type['AbstractBatchSystem']]]]):
224
+
225
+ def restore_batch_system_plugin_state(
226
+ snapshot: tuple[list[str], dict[str, Callable[[], type["AbstractBatchSystem"]]]]
227
+ ):
194
228
  """
195
229
  Restore the batch system registry state to a snapshot from
196
230
  save_batch_system_plugin_state().