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.
- toil/__init__.py +121 -83
- toil/batchSystems/__init__.py +1 -0
- toil/batchSystems/abstractBatchSystem.py +137 -77
- toil/batchSystems/abstractGridEngineBatchSystem.py +211 -101
- toil/batchSystems/awsBatch.py +237 -128
- toil/batchSystems/cleanup_support.py +22 -16
- toil/batchSystems/contained_executor.py +30 -26
- toil/batchSystems/gridengine.py +85 -49
- toil/batchSystems/htcondor.py +164 -87
- toil/batchSystems/kubernetes.py +622 -386
- toil/batchSystems/local_support.py +17 -12
- toil/batchSystems/lsf.py +132 -79
- toil/batchSystems/lsfHelper.py +13 -11
- toil/batchSystems/mesos/__init__.py +41 -29
- toil/batchSystems/mesos/batchSystem.py +288 -149
- toil/batchSystems/mesos/executor.py +77 -49
- toil/batchSystems/mesos/test/__init__.py +31 -23
- toil/batchSystems/options.py +38 -29
- toil/batchSystems/registry.py +53 -19
- toil/batchSystems/singleMachine.py +293 -123
- toil/batchSystems/slurm.py +489 -137
- toil/batchSystems/torque.py +46 -32
- toil/bus.py +141 -73
- toil/common.py +630 -359
- toil/cwl/__init__.py +1 -1
- toil/cwl/cwltoil.py +1114 -532
- toil/cwl/utils.py +17 -22
- toil/deferred.py +62 -41
- toil/exceptions.py +5 -3
- toil/fileStores/__init__.py +5 -5
- toil/fileStores/abstractFileStore.py +88 -57
- toil/fileStores/cachingFileStore.py +711 -247
- toil/fileStores/nonCachingFileStore.py +113 -75
- toil/job.py +988 -315
- toil/jobStores/abstractJobStore.py +387 -243
- toil/jobStores/aws/jobStore.py +727 -403
- toil/jobStores/aws/utils.py +161 -109
- toil/jobStores/conftest.py +1 -0
- toil/jobStores/fileJobStore.py +289 -151
- toil/jobStores/googleJobStore.py +137 -70
- toil/jobStores/utils.py +36 -15
- toil/leader.py +614 -269
- toil/lib/accelerators.py +115 -18
- toil/lib/aws/__init__.py +55 -28
- toil/lib/aws/ami.py +122 -87
- toil/lib/aws/iam.py +284 -108
- toil/lib/aws/s3.py +31 -0
- toil/lib/aws/session.py +193 -58
- toil/lib/aws/utils.py +238 -218
- toil/lib/bioio.py +13 -5
- toil/lib/compatibility.py +11 -6
- toil/lib/conversions.py +83 -49
- toil/lib/docker.py +131 -103
- toil/lib/ec2.py +322 -209
- toil/lib/ec2nodes.py +174 -106
- toil/lib/encryption/_dummy.py +5 -3
- toil/lib/encryption/_nacl.py +10 -6
- toil/lib/encryption/conftest.py +1 -0
- toil/lib/exceptions.py +26 -7
- toil/lib/expando.py +4 -2
- toil/lib/ftp_utils.py +217 -0
- toil/lib/generatedEC2Lists.py +127 -19
- toil/lib/humanize.py +6 -2
- toil/lib/integration.py +341 -0
- toil/lib/io.py +99 -11
- toil/lib/iterables.py +4 -2
- toil/lib/memoize.py +12 -8
- toil/lib/misc.py +65 -18
- toil/lib/objects.py +2 -2
- toil/lib/resources.py +19 -7
- toil/lib/retry.py +115 -77
- toil/lib/threading.py +282 -80
- toil/lib/throttle.py +15 -14
- toil/options/common.py +834 -401
- toil/options/cwl.py +175 -90
- toil/options/runner.py +50 -0
- toil/options/wdl.py +70 -19
- toil/provisioners/__init__.py +111 -46
- toil/provisioners/abstractProvisioner.py +322 -157
- toil/provisioners/aws/__init__.py +62 -30
- toil/provisioners/aws/awsProvisioner.py +980 -627
- toil/provisioners/clusterScaler.py +541 -279
- toil/provisioners/gceProvisioner.py +282 -179
- toil/provisioners/node.py +147 -79
- toil/realtimeLogger.py +34 -22
- toil/resource.py +137 -75
- toil/server/app.py +127 -61
- toil/server/celery_app.py +3 -1
- toil/server/cli/wes_cwl_runner.py +82 -53
- toil/server/utils.py +54 -28
- toil/server/wes/abstract_backend.py +64 -26
- toil/server/wes/amazon_wes_utils.py +21 -15
- toil/server/wes/tasks.py +121 -63
- toil/server/wes/toil_backend.py +142 -107
- toil/server/wsgi_app.py +4 -3
- toil/serviceManager.py +58 -22
- toil/statsAndLogging.py +148 -64
- toil/test/__init__.py +263 -179
- toil/test/batchSystems/batchSystemTest.py +438 -195
- toil/test/batchSystems/batch_system_plugin_test.py +18 -7
- toil/test/batchSystems/test_gridengine.py +173 -0
- toil/test/batchSystems/test_lsf_helper.py +67 -58
- toil/test/batchSystems/test_slurm.py +93 -47
- toil/test/cactus/test_cactus_integration.py +20 -22
- toil/test/cwl/cwlTest.py +271 -71
- toil/test/cwl/measure_default_memory.cwl +12 -0
- toil/test/cwl/not_run_required_input.cwl +29 -0
- toil/test/cwl/scatter_duplicate_outputs.cwl +40 -0
- toil/test/docs/scriptsTest.py +60 -34
- toil/test/jobStores/jobStoreTest.py +412 -235
- toil/test/lib/aws/test_iam.py +116 -48
- toil/test/lib/aws/test_s3.py +16 -9
- toil/test/lib/aws/test_utils.py +5 -6
- toil/test/lib/dockerTest.py +118 -141
- toil/test/lib/test_conversions.py +113 -115
- toil/test/lib/test_ec2.py +57 -49
- toil/test/lib/test_integration.py +104 -0
- toil/test/lib/test_misc.py +12 -5
- toil/test/mesos/MesosDataStructuresTest.py +23 -10
- toil/test/mesos/helloWorld.py +7 -6
- toil/test/mesos/stress.py +25 -20
- toil/test/options/options.py +7 -2
- toil/test/provisioners/aws/awsProvisionerTest.py +293 -140
- toil/test/provisioners/clusterScalerTest.py +440 -250
- toil/test/provisioners/clusterTest.py +81 -42
- toil/test/provisioners/gceProvisionerTest.py +174 -100
- toil/test/provisioners/provisionerTest.py +25 -13
- toil/test/provisioners/restartScript.py +5 -4
- toil/test/server/serverTest.py +188 -141
- toil/test/sort/restart_sort.py +137 -68
- toil/test/sort/sort.py +134 -66
- toil/test/sort/sortTest.py +91 -49
- toil/test/src/autoDeploymentTest.py +140 -100
- toil/test/src/busTest.py +20 -18
- toil/test/src/checkpointTest.py +8 -2
- toil/test/src/deferredFunctionTest.py +49 -35
- toil/test/src/dockerCheckTest.py +33 -26
- toil/test/src/environmentTest.py +20 -10
- toil/test/src/fileStoreTest.py +538 -271
- toil/test/src/helloWorldTest.py +7 -4
- toil/test/src/importExportFileTest.py +61 -31
- toil/test/src/jobDescriptionTest.py +32 -17
- toil/test/src/jobEncapsulationTest.py +2 -0
- toil/test/src/jobFileStoreTest.py +74 -50
- toil/test/src/jobServiceTest.py +187 -73
- toil/test/src/jobTest.py +120 -70
- toil/test/src/miscTests.py +19 -18
- toil/test/src/promisedRequirementTest.py +82 -36
- toil/test/src/promisesTest.py +7 -6
- toil/test/src/realtimeLoggerTest.py +6 -6
- toil/test/src/regularLogTest.py +71 -37
- toil/test/src/resourceTest.py +80 -49
- toil/test/src/restartDAGTest.py +36 -22
- toil/test/src/resumabilityTest.py +9 -2
- toil/test/src/retainTempDirTest.py +45 -14
- toil/test/src/systemTest.py +12 -8
- toil/test/src/threadingTest.py +44 -25
- toil/test/src/toilContextManagerTest.py +10 -7
- toil/test/src/userDefinedJobArgTypeTest.py +8 -5
- toil/test/src/workerTest.py +33 -16
- toil/test/utils/toilDebugTest.py +70 -58
- toil/test/utils/toilKillTest.py +4 -5
- toil/test/utils/utilsTest.py +239 -102
- toil/test/wdl/wdltoil_test.py +789 -148
- toil/test/wdl/wdltoil_test_kubernetes.py +37 -23
- toil/toilState.py +52 -26
- toil/utils/toilConfig.py +13 -4
- toil/utils/toilDebugFile.py +44 -27
- toil/utils/toilDebugJob.py +85 -25
- toil/utils/toilDestroyCluster.py +11 -6
- toil/utils/toilKill.py +8 -3
- toil/utils/toilLaunchCluster.py +251 -145
- toil/utils/toilMain.py +37 -16
- toil/utils/toilRsyncCluster.py +27 -14
- toil/utils/toilSshCluster.py +45 -22
- toil/utils/toilStats.py +75 -36
- toil/utils/toilStatus.py +226 -119
- toil/utils/toilUpdateEC2Instances.py +3 -1
- toil/version.py +11 -11
- toil/wdl/utils.py +5 -5
- toil/wdl/wdltoil.py +3513 -1052
- toil/worker.py +269 -128
- toil-8.0.0.dist-info/METADATA +173 -0
- toil-8.0.0.dist-info/RECORD +253 -0
- {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/WHEEL +1 -1
- toil-7.0.0.dist-info/METADATA +0 -158
- toil-7.0.0.dist-info/RECORD +0 -244
- {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/LICENSE +0 -0
- {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/entry_points.txt +0 -0
- {toil-7.0.0.dist-info → toil-8.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
cwlVersion: v1.2
|
|
2
|
+
class: Workflow
|
|
3
|
+
id: scatter-duplicate-outputs
|
|
4
|
+
|
|
5
|
+
inputs:
|
|
6
|
+
- id: toScatterOver
|
|
7
|
+
type: string[]
|
|
8
|
+
default: ['this','is','an','array','of','more','than','two','things']
|
|
9
|
+
|
|
10
|
+
steps:
|
|
11
|
+
echo:
|
|
12
|
+
run:
|
|
13
|
+
id: scatter
|
|
14
|
+
class: CommandLineTool
|
|
15
|
+
inputs:
|
|
16
|
+
s: string
|
|
17
|
+
baseCommand: [echo]
|
|
18
|
+
arguments: [ $(inputs.s)]
|
|
19
|
+
stdout: scatter.out
|
|
20
|
+
stderr: scatter.err
|
|
21
|
+
outputs:
|
|
22
|
+
out: stdout
|
|
23
|
+
err: stderr
|
|
24
|
+
in:
|
|
25
|
+
- id: s
|
|
26
|
+
source: toScatterOver
|
|
27
|
+
scatter:
|
|
28
|
+
- s
|
|
29
|
+
out:
|
|
30
|
+
- id: out
|
|
31
|
+
- id: err
|
|
32
|
+
|
|
33
|
+
outputs:
|
|
34
|
+
- id: echo_out
|
|
35
|
+
type: File[]
|
|
36
|
+
outputSource: ["echo/out"]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
requirements:
|
|
40
|
+
- class: ScatterFeatureRequirement
|
toil/test/docs/scriptsTest.py
CHANGED
|
@@ -4,19 +4,19 @@ import shutil
|
|
|
4
4
|
import subprocess
|
|
5
5
|
import sys
|
|
6
6
|
import unittest
|
|
7
|
-
import pytest
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
import pytest
|
|
10
9
|
|
|
11
|
-
pkg_root = os.path.abspath(os.path.join(os.path.dirname(__file__),
|
|
10
|
+
pkg_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) # noqa
|
|
12
11
|
sys.path.insert(0, pkg_root) # noqa
|
|
13
12
|
|
|
14
|
-
from toil.test import ToilTest,
|
|
13
|
+
from toil.test import ToilTest, needs_docker
|
|
15
14
|
from toil.version import python
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
class ToilDocumentationTest(ToilTest):
|
|
19
18
|
"""Tests for scripts in the toil tutorials."""
|
|
19
|
+
|
|
20
20
|
@classmethod
|
|
21
21
|
def setUpClass(cls):
|
|
22
22
|
super(ToilTest, cls).setUpClass()
|
|
@@ -25,7 +25,7 @@ class ToilDocumentationTest(ToilTest):
|
|
|
25
25
|
def tearDown(self) -> None:
|
|
26
26
|
super(ToilTest, self).tearDown()
|
|
27
27
|
|
|
28
|
-
jobstores = [
|
|
28
|
+
jobstores = ["/mnt/ephemeral/workspace/toil-pull-requests/toilWorkflowRun"]
|
|
29
29
|
for jobstore in jobstores:
|
|
30
30
|
if os.path.exists(jobstore):
|
|
31
31
|
shutil.rmtree(jobstore)
|
|
@@ -33,19 +33,24 @@ class ToilDocumentationTest(ToilTest):
|
|
|
33
33
|
unittest.TestCase.tearDown(self)
|
|
34
34
|
|
|
35
35
|
"""Just check the exit code"""
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
def checkExitCode(self, script, extra_args: list[str] = []):
|
|
37
38
|
program = os.path.join(self.directory, "scripts", script)
|
|
38
|
-
process = subprocess.Popen(
|
|
39
|
-
|
|
39
|
+
process = subprocess.Popen(
|
|
40
|
+
[python, program, "file:my-jobstore", "--clean=always"] + extra_args,
|
|
41
|
+
stdout=subprocess.PIPE,
|
|
42
|
+
stderr=subprocess.PIPE,
|
|
43
|
+
)
|
|
40
44
|
stdout, stderr = process.communicate()
|
|
41
45
|
if isinstance(stdout, bytes):
|
|
42
|
-
stdout = stdout.decode(
|
|
43
|
-
stderr = stderr.decode(
|
|
46
|
+
stdout = stdout.decode("utf-8")
|
|
47
|
+
stderr = stderr.decode("utf-8")
|
|
44
48
|
if not process.returncode == 0:
|
|
45
49
|
raise RuntimeError(stderr)
|
|
46
|
-
return stdout +
|
|
50
|
+
return stdout + " " + stderr
|
|
47
51
|
|
|
48
52
|
"""Check the exit code and the output"""
|
|
53
|
+
|
|
49
54
|
def checkExpectedOut(self, script, expectedOutput):
|
|
50
55
|
outerr = self.checkExitCode(script)
|
|
51
56
|
|
|
@@ -54,6 +59,7 @@ class ToilDocumentationTest(ToilTest):
|
|
|
54
59
|
self.assertGreater(index, -1, f"Expected:\n{expectedOutput}\nOutput:\n{outerr}")
|
|
55
60
|
|
|
56
61
|
"""Check the exit code and look for a pattern"""
|
|
62
|
+
|
|
57
63
|
def checkExpectedPattern(self, script, expectedPattern):
|
|
58
64
|
outerr = self.checkExitCode(script)
|
|
59
65
|
|
|
@@ -77,16 +83,24 @@ class ToilDocumentationTest(ToilTest):
|
|
|
77
83
|
self.checkExitCode("tutorial_encapsulation2.py")
|
|
78
84
|
|
|
79
85
|
def testHelloworld(self):
|
|
80
|
-
self.checkExpectedOut(
|
|
86
|
+
self.checkExpectedOut(
|
|
87
|
+
"tutorial_helloworld.py", "Hello, world!, here's a message: You did it!\n"
|
|
88
|
+
)
|
|
81
89
|
|
|
82
90
|
def testInvokeworkflow(self):
|
|
83
|
-
self.checkExpectedOut(
|
|
91
|
+
self.checkExpectedOut(
|
|
92
|
+
"tutorial_invokeworkflow.py", "Hello, world!, here's a message: Woot\n"
|
|
93
|
+
)
|
|
84
94
|
|
|
85
95
|
def testInvokeworkflow2(self):
|
|
86
|
-
self.checkExpectedOut(
|
|
96
|
+
self.checkExpectedOut(
|
|
97
|
+
"tutorial_invokeworkflow2.py", "Hello, world!, I have a message: Woot!\n"
|
|
98
|
+
)
|
|
87
99
|
|
|
88
100
|
def testJobFunctions(self):
|
|
89
|
-
self.checkExpectedOut(
|
|
101
|
+
self.checkExpectedOut(
|
|
102
|
+
"tutorial_jobfunctions.py", "Hello world, I have a message: Woot!\n"
|
|
103
|
+
)
|
|
90
104
|
|
|
91
105
|
def testManaging(self):
|
|
92
106
|
self.checkExitCode("tutorial_managing.py")
|
|
@@ -95,39 +109,51 @@ class ToilDocumentationTest(ToilTest):
|
|
|
95
109
|
self.checkExitCode("tutorial_managing2.py")
|
|
96
110
|
|
|
97
111
|
def testMultiplejobs(self):
|
|
98
|
-
self.checkExpectedPattern(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
112
|
+
self.checkExpectedPattern(
|
|
113
|
+
"tutorial_multiplejobs.py",
|
|
114
|
+
"Hello world, I have a message: first.*Hello world, I have a message: "
|
|
115
|
+
"second or third.*Hello world, I have a message: second or third.*Hello world,"
|
|
116
|
+
" I have a message: last",
|
|
117
|
+
)
|
|
102
118
|
|
|
103
119
|
def testMultiplejobs2(self):
|
|
104
|
-
self.checkExpectedPattern(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
120
|
+
self.checkExpectedPattern(
|
|
121
|
+
"tutorial_multiplejobs2.py",
|
|
122
|
+
"Hello world, I have a message: first.*Hello world, I have a message: "
|
|
123
|
+
"second or third.*Hello world, I have a message: second or third.*Hello world,"
|
|
124
|
+
" I have a message: last",
|
|
125
|
+
)
|
|
108
126
|
|
|
109
127
|
def testMultiplejobs3(self):
|
|
110
|
-
self.checkExpectedPattern(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
128
|
+
self.checkExpectedPattern(
|
|
129
|
+
"tutorial_multiplejobs3.py",
|
|
130
|
+
"Hello world, I have a message: first.*Hello world, I have a message: "
|
|
131
|
+
"second or third.*Hello world, I have a message: second or third.*Hello world,"
|
|
132
|
+
" I have a message: last",
|
|
133
|
+
)
|
|
114
134
|
|
|
115
135
|
@pytest.mark.timeout(1200)
|
|
116
136
|
def testPromises2(self):
|
|
117
|
-
self.checkExpectedOut(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
137
|
+
self.checkExpectedOut(
|
|
138
|
+
"tutorial_promises2.py",
|
|
139
|
+
"['00000', '00001', '00010', '00011', '00100', '00101', '00110', '00111',"
|
|
140
|
+
" '01000', '01001', '01010', '01011', '01100', '01101', '01110', '01111',"
|
|
141
|
+
" '10000', '10001', '10010', '10011', '10100', '10101', '10110', '10111',"
|
|
142
|
+
" '11000', '11001', '11010', '11011', '11100', '11101', '11110', '11111']",
|
|
143
|
+
)
|
|
122
144
|
|
|
123
145
|
def testQuickstart(self):
|
|
124
|
-
self.checkExpectedOut(
|
|
146
|
+
self.checkExpectedOut(
|
|
147
|
+
"tutorial_quickstart.py", "Hello, world!, here's a message: Woot\n"
|
|
148
|
+
)
|
|
125
149
|
|
|
126
150
|
def testRequirements(self):
|
|
127
151
|
self.checkExitCode("tutorial_requirements.py")
|
|
128
152
|
|
|
129
153
|
def testArguments(self):
|
|
130
|
-
self.checkExpectedOut(
|
|
154
|
+
self.checkExpectedOut(
|
|
155
|
+
"tutorial_arguments.py", "Hello, world!, here's a message: Woot"
|
|
156
|
+
)
|
|
131
157
|
|
|
132
158
|
@needs_docker
|
|
133
159
|
def testDocker(self):
|