toil 9.1.1__py3-none-any.whl → 9.2.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 +5 -9
- toil/batchSystems/abstractBatchSystem.py +23 -22
- toil/batchSystems/abstractGridEngineBatchSystem.py +17 -12
- toil/batchSystems/awsBatch.py +8 -8
- toil/batchSystems/cleanup_support.py +4 -4
- toil/batchSystems/contained_executor.py +3 -3
- toil/batchSystems/gridengine.py +3 -4
- toil/batchSystems/htcondor.py +5 -5
- toil/batchSystems/kubernetes.py +65 -63
- toil/batchSystems/local_support.py +2 -3
- toil/batchSystems/lsf.py +6 -7
- toil/batchSystems/mesos/batchSystem.py +11 -7
- toil/batchSystems/mesos/test/__init__.py +1 -2
- toil/batchSystems/options.py +9 -10
- toil/batchSystems/registry.py +3 -7
- toil/batchSystems/singleMachine.py +8 -11
- toil/batchSystems/slurm.py +49 -38
- toil/batchSystems/torque.py +3 -4
- toil/bus.py +36 -34
- toil/common.py +129 -89
- toil/cwl/cwltoil.py +857 -729
- toil/cwl/utils.py +44 -35
- toil/fileStores/__init__.py +3 -1
- toil/fileStores/abstractFileStore.py +28 -30
- toil/fileStores/cachingFileStore.py +8 -8
- toil/fileStores/nonCachingFileStore.py +10 -21
- toil/job.py +159 -158
- toil/jobStores/abstractJobStore.py +68 -69
- toil/jobStores/aws/jobStore.py +249 -213
- toil/jobStores/aws/utils.py +13 -24
- toil/jobStores/fileJobStore.py +28 -22
- toil/jobStores/googleJobStore.py +21 -17
- toil/jobStores/utils.py +3 -7
- toil/leader.py +17 -22
- toil/lib/accelerators.py +6 -4
- toil/lib/aws/__init__.py +9 -10
- toil/lib/aws/ami.py +33 -19
- toil/lib/aws/iam.py +6 -6
- toil/lib/aws/s3.py +259 -157
- toil/lib/aws/session.py +76 -76
- toil/lib/aws/utils.py +51 -43
- toil/lib/checksum.py +19 -15
- toil/lib/compatibility.py +3 -2
- toil/lib/conversions.py +45 -18
- toil/lib/directory.py +29 -26
- toil/lib/docker.py +93 -99
- toil/lib/dockstore.py +77 -50
- toil/lib/ec2.py +39 -38
- toil/lib/ec2nodes.py +11 -4
- toil/lib/exceptions.py +8 -5
- toil/lib/ftp_utils.py +9 -14
- toil/lib/generatedEC2Lists.py +161 -20
- toil/lib/history.py +141 -97
- toil/lib/history_submission.py +163 -72
- toil/lib/io.py +27 -17
- toil/lib/memoize.py +2 -1
- toil/lib/misc.py +15 -11
- toil/lib/pipes.py +40 -25
- toil/lib/plugins.py +12 -8
- toil/lib/resources.py +1 -0
- toil/lib/retry.py +32 -38
- toil/lib/threading.py +12 -12
- toil/lib/throttle.py +1 -2
- toil/lib/trs.py +113 -51
- toil/lib/url.py +14 -23
- toil/lib/web.py +7 -2
- toil/options/common.py +18 -15
- toil/options/cwl.py +2 -2
- toil/options/runner.py +9 -5
- toil/options/wdl.py +1 -3
- toil/provisioners/__init__.py +9 -9
- toil/provisioners/abstractProvisioner.py +22 -20
- toil/provisioners/aws/__init__.py +20 -14
- toil/provisioners/aws/awsProvisioner.py +10 -8
- toil/provisioners/clusterScaler.py +19 -18
- toil/provisioners/gceProvisioner.py +2 -3
- toil/provisioners/node.py +11 -13
- toil/realtimeLogger.py +4 -4
- toil/resource.py +5 -5
- toil/server/app.py +2 -2
- toil/server/cli/wes_cwl_runner.py +11 -11
- toil/server/utils.py +18 -21
- toil/server/wes/abstract_backend.py +9 -8
- toil/server/wes/amazon_wes_utils.py +3 -3
- toil/server/wes/tasks.py +3 -5
- toil/server/wes/toil_backend.py +17 -21
- toil/server/wsgi_app.py +3 -3
- toil/serviceManager.py +3 -4
- toil/statsAndLogging.py +12 -13
- toil/test/__init__.py +33 -24
- toil/test/batchSystems/batchSystemTest.py +12 -11
- toil/test/batchSystems/batch_system_plugin_test.py +3 -5
- toil/test/batchSystems/test_slurm.py +38 -24
- toil/test/cwl/conftest.py +5 -6
- toil/test/cwl/cwlTest.py +194 -78
- toil/test/cwl/download_file_uri.json +6 -0
- toil/test/cwl/download_file_uri_no_hostname.json +6 -0
- toil/test/docs/scripts/tutorial_staging.py +1 -0
- toil/test/jobStores/jobStoreTest.py +9 -7
- toil/test/lib/aws/test_iam.py +1 -3
- toil/test/lib/aws/test_s3.py +1 -1
- toil/test/lib/dockerTest.py +9 -9
- toil/test/lib/test_ec2.py +12 -11
- toil/test/lib/test_history.py +4 -4
- toil/test/lib/test_trs.py +16 -14
- toil/test/lib/test_url.py +7 -6
- toil/test/lib/url_plugin_test.py +12 -18
- toil/test/provisioners/aws/awsProvisionerTest.py +10 -8
- toil/test/provisioners/clusterScalerTest.py +2 -5
- toil/test/provisioners/clusterTest.py +1 -3
- toil/test/server/serverTest.py +13 -4
- toil/test/sort/restart_sort.py +2 -6
- toil/test/sort/sort.py +3 -8
- toil/test/src/deferredFunctionTest.py +7 -7
- toil/test/src/environmentTest.py +1 -2
- toil/test/src/fileStoreTest.py +5 -5
- toil/test/src/importExportFileTest.py +5 -6
- toil/test/src/jobServiceTest.py +22 -14
- toil/test/src/jobTest.py +121 -25
- toil/test/src/miscTests.py +5 -7
- toil/test/src/promisedRequirementTest.py +8 -7
- toil/test/src/regularLogTest.py +2 -3
- toil/test/src/resourceTest.py +5 -8
- toil/test/src/restartDAGTest.py +5 -6
- toil/test/src/resumabilityTest.py +2 -2
- toil/test/src/retainTempDirTest.py +3 -3
- toil/test/src/systemTest.py +3 -3
- toil/test/src/threadingTest.py +1 -1
- toil/test/src/workerTest.py +1 -2
- toil/test/utils/toilDebugTest.py +6 -4
- toil/test/utils/toilKillTest.py +1 -1
- toil/test/utils/utilsTest.py +15 -14
- toil/test/wdl/wdltoil_test.py +247 -124
- toil/test/wdl/wdltoil_test_kubernetes.py +2 -2
- toil/toilState.py +2 -3
- toil/utils/toilDebugFile.py +3 -8
- toil/utils/toilDebugJob.py +1 -2
- toil/utils/toilLaunchCluster.py +1 -2
- toil/utils/toilSshCluster.py +2 -0
- toil/utils/toilStats.py +19 -24
- toil/utils/toilStatus.py +11 -14
- toil/version.py +10 -10
- toil/wdl/wdltoil.py +313 -209
- toil/worker.py +18 -12
- {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/METADATA +11 -14
- {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/RECORD +150 -153
- {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/WHEEL +1 -1
- toil/test/cwl/staging_cat.cwl +0 -27
- toil/test/cwl/staging_make_file.cwl +0 -25
- toil/test/cwl/staging_workflow.cwl +0 -43
- toil/test/cwl/zero_default.cwl +0 -61
- toil/test/utils/ABCWorkflowDebug/ABC.txt +0 -1
- {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/entry_points.txt +0 -0
- {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/licenses/LICENSE +0 -0
- {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import unittest
|
|
2
3
|
from uuid import uuid4
|
|
3
4
|
|
|
4
|
-
import logging
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
7
7
|
from toil.provisioners import cluster_factory
|
|
@@ -12,9 +12,9 @@ from toil.test.wdl.wdltoil_test import (
|
|
|
12
12
|
WDL_CONFORMANCE_TEST_REPO,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
|
-
|
|
16
15
|
logger = logging.getLogger(__name__)
|
|
17
16
|
|
|
17
|
+
|
|
18
18
|
@integrative
|
|
19
19
|
@slow
|
|
20
20
|
@pytest.mark.timeout(1800)
|
toil/toilState.py
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
import logging
|
|
15
15
|
import time
|
|
16
|
-
from typing import Optional
|
|
17
16
|
|
|
18
17
|
from toil.bus import JobUpdatedMessage, MessageBus
|
|
19
18
|
from toil.job import CheckpointJobDescription, JobDescription
|
|
@@ -102,7 +101,7 @@ class ToilState:
|
|
|
102
101
|
def load_workflow(
|
|
103
102
|
self,
|
|
104
103
|
rootJob: JobDescription,
|
|
105
|
-
jobCache:
|
|
104
|
+
jobCache: dict[str, JobDescription] | None = None,
|
|
106
105
|
) -> None:
|
|
107
106
|
"""
|
|
108
107
|
Load the workflow rooted at the given job.
|
|
@@ -207,7 +206,7 @@ class ToilState:
|
|
|
207
206
|
start_time = time.time()
|
|
208
207
|
wait_time = 0.1
|
|
209
208
|
initially_known = job_id in self.__job_database
|
|
210
|
-
new_truth:
|
|
209
|
+
new_truth: JobDescription | None = None
|
|
211
210
|
while True:
|
|
212
211
|
try:
|
|
213
212
|
new_truth = self.__job_store.load_job(job_id)
|
toil/utils/toilDebugFile.py
CHANGED
|
@@ -16,7 +16,6 @@ import argparse
|
|
|
16
16
|
import logging
|
|
17
17
|
import os.path
|
|
18
18
|
import sys
|
|
19
|
-
from typing import Optional
|
|
20
19
|
|
|
21
20
|
from toil.common import Config, Toil, parser_with_common_options
|
|
22
21
|
from toil.jobStores.fileJobStore import FileJobStore
|
|
@@ -51,16 +50,12 @@ def fetchJobStoreFiles(jobStore: FileJobStore, options: argparse.Namespace) -> N
|
|
|
51
50
|
)
|
|
52
51
|
jobStore.read_file(
|
|
53
52
|
jobStoreFileID,
|
|
54
|
-
os.path.join(
|
|
55
|
-
options.localFilePath, os.path.basename(jobStoreFileID)
|
|
56
|
-
),
|
|
53
|
+
os.path.join(options.localFilePath, os.path.basename(jobStoreFileID)),
|
|
57
54
|
symlink=options.useSymlinks,
|
|
58
55
|
)
|
|
59
56
|
|
|
60
57
|
|
|
61
|
-
def printContentsOfJobStore(
|
|
62
|
-
job_store: FileJobStore, job_id: Optional[str] = None
|
|
63
|
-
) -> None:
|
|
58
|
+
def printContentsOfJobStore(job_store: FileJobStore, job_id: str | None = None) -> None:
|
|
64
59
|
"""
|
|
65
60
|
Fetch a list of all files contained in the job store if nameOfJob is not
|
|
66
61
|
declared, otherwise it only prints out the names of files for that specific
|
|
@@ -100,7 +95,7 @@ def main() -> None:
|
|
|
100
95
|
"--localFilePath",
|
|
101
96
|
type=str,
|
|
102
97
|
default=".",
|
|
103
|
-
help="Location to which to copy job store files."
|
|
98
|
+
help="Location to which to copy job store files.",
|
|
104
99
|
)
|
|
105
100
|
parser.add_argument(
|
|
106
101
|
"--fetch",
|
toil/utils/toilDebugJob.py
CHANGED
|
@@ -18,7 +18,6 @@ import os
|
|
|
18
18
|
import pprint
|
|
19
19
|
import sys
|
|
20
20
|
from pathlib import Path
|
|
21
|
-
from typing import Optional
|
|
22
21
|
|
|
23
22
|
from toil.common import Toil, parser_with_common_options
|
|
24
23
|
from toil.job import FilesDownloadedStoppingPointReached
|
|
@@ -163,7 +162,7 @@ def main() -> None:
|
|
|
163
162
|
# And tell the job to just download files
|
|
164
163
|
debug_flags.add("download_only")
|
|
165
164
|
# We might need to reconstruct a container environment.
|
|
166
|
-
host_and_job_paths:
|
|
165
|
+
host_and_job_paths: list[tuple[str, str]] | None = None
|
|
167
166
|
# Track if the run succeeded without error
|
|
168
167
|
run_succeeded = False
|
|
169
168
|
|
toil/utils/toilLaunchCluster.py
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
|
|
16
16
|
import logging
|
|
17
17
|
import os
|
|
18
|
-
from typing import Union
|
|
19
18
|
|
|
20
19
|
from toil import applianceSelf
|
|
21
20
|
from toil.common import parser_with_common_options
|
|
@@ -217,7 +216,7 @@ def main() -> None:
|
|
|
217
216
|
|
|
218
217
|
# This holds either ints to launch static nodes, or tuples of ints
|
|
219
218
|
# specifying ranges to launch managed auto-scaling nodes, for each type.
|
|
220
|
-
nodeCounts: list[
|
|
219
|
+
nodeCounts: list[int | tuple[int, int]] = []
|
|
221
220
|
|
|
222
221
|
if (worker_node_types != [] or worker_node_ranges != []) and not (
|
|
223
222
|
worker_node_types != [] and worker_node_ranges != []
|
toil/utils/toilSshCluster.py
CHANGED
|
@@ -23,6 +23,7 @@ from toil.statsAndLogging import set_logging_from_options
|
|
|
23
23
|
|
|
24
24
|
logger = logging.getLogger(__name__)
|
|
25
25
|
|
|
26
|
+
|
|
26
27
|
def have_ipv6() -> bool:
|
|
27
28
|
"""
|
|
28
29
|
Return True if the IPv6 loopback interface is useable.
|
|
@@ -40,6 +41,7 @@ def have_ipv6() -> bool:
|
|
|
40
41
|
pass
|
|
41
42
|
return False
|
|
42
43
|
|
|
44
|
+
|
|
43
45
|
def main() -> None:
|
|
44
46
|
parser = parser_with_common_options(
|
|
45
47
|
provisioner_options=True, jobstore_option=False, prog="toil ssh-cluster"
|
toil/utils/toilStats.py
CHANGED
|
@@ -17,8 +17,9 @@ import logging
|
|
|
17
17
|
import math
|
|
18
18
|
import sys
|
|
19
19
|
from argparse import ArgumentParser, Namespace
|
|
20
|
+
from collections.abc import Callable
|
|
20
21
|
from functools import partial
|
|
21
|
-
from typing import Any,
|
|
22
|
+
from typing import Any, TextIO
|
|
22
23
|
|
|
23
24
|
from toil.common import Config, Toil, parser_with_common_options
|
|
24
25
|
from toil.job import Job
|
|
@@ -98,7 +99,7 @@ class ColumnWidths:
|
|
|
98
99
|
print("%s %s %d" % (c, f, self.get_width(c, f)))
|
|
99
100
|
|
|
100
101
|
|
|
101
|
-
def pad_str(s: str, field:
|
|
102
|
+
def pad_str(s: str, field: int | None = None) -> str:
|
|
102
103
|
"""Pad the beginning of a string with spaces, if necessary."""
|
|
103
104
|
if field is None or len(s) >= field:
|
|
104
105
|
return s
|
|
@@ -106,31 +107,27 @@ def pad_str(s: str, field: Optional[int] = None) -> str:
|
|
|
106
107
|
return " " * (field - len(s)) + s
|
|
107
108
|
|
|
108
109
|
|
|
109
|
-
def pretty_space(k: float, field:
|
|
110
|
+
def pretty_space(k: float, field: int | None = None, alone: bool = False) -> str:
|
|
110
111
|
"""Given input k as kibibytes, return a nicely formatted string."""
|
|
111
112
|
# If we don't have a header to say bytes, include the B.
|
|
112
113
|
trailer = "B" if alone else ""
|
|
113
114
|
if k < 1024:
|
|
114
|
-
return pad_str("{:g}Ki{}"
|
|
115
|
+
return pad_str(f"{k:g}Ki{trailer}", field)
|
|
115
116
|
if k < (1024 * 1024):
|
|
116
|
-
return pad_str("{
|
|
117
|
+
return pad_str(f"{k / 1024.0:.1f}Mi{trailer}", field)
|
|
117
118
|
if k < (1024 * 1024 * 1024):
|
|
118
|
-
return pad_str("{
|
|
119
|
+
return pad_str(f"{k / 1024.0 / 1024.0:.1f}Gi{trailer}", field)
|
|
119
120
|
if k < (1024 * 1024 * 1024 * 1024):
|
|
120
|
-
return pad_str(
|
|
121
|
-
"{:.1f}Ti{}".format(k / 1024.0 / 1024.0 / 1024.0, trailer), field
|
|
122
|
-
)
|
|
121
|
+
return pad_str(f"{k / 1024.0 / 1024.0 / 1024.0:.1f}Ti{trailer}", field)
|
|
123
122
|
if k < (1024 * 1024 * 1024 * 1024 * 1024):
|
|
124
|
-
return pad_str(
|
|
125
|
-
"{:.1f}Pi{}".format(k / 1024.0 / 1024.0 / 1024.0 / 1024.0, trailer), field
|
|
126
|
-
)
|
|
123
|
+
return pad_str(f"{k / 1024.0 / 1024.0 / 1024.0 / 1024.0:.1f}Pi{trailer}", field)
|
|
127
124
|
|
|
128
125
|
# due to https://stackoverflow.com/questions/47149154
|
|
129
126
|
assert False
|
|
130
127
|
|
|
131
128
|
|
|
132
129
|
def pretty_time(
|
|
133
|
-
t: float, field:
|
|
130
|
+
t: float, field: int | None = None, unit: str = "s", alone: bool = False
|
|
134
131
|
) -> str:
|
|
135
132
|
"""
|
|
136
133
|
Given input t as seconds, return a nicely formatted string.
|
|
@@ -194,7 +191,7 @@ def report_unit(unit: str) -> str:
|
|
|
194
191
|
def report_time(
|
|
195
192
|
t: float,
|
|
196
193
|
options: Namespace,
|
|
197
|
-
field:
|
|
194
|
+
field: int | None = None,
|
|
198
195
|
unit: str = "s",
|
|
199
196
|
alone: bool = False,
|
|
200
197
|
) -> str:
|
|
@@ -206,13 +203,13 @@ def report_time(
|
|
|
206
203
|
if field is not None:
|
|
207
204
|
assert field >= len(unit_text)
|
|
208
205
|
return "%*.2f%s" % (field - len(unit_text), t, unit_text)
|
|
209
|
-
return "{:.2f}{}"
|
|
206
|
+
return f"{t:.2f}{unit_text}"
|
|
210
207
|
|
|
211
208
|
|
|
212
209
|
def report_space(
|
|
213
210
|
k: float,
|
|
214
211
|
options: Namespace,
|
|
215
|
-
field:
|
|
212
|
+
field: int | None = None,
|
|
216
213
|
unit: str = "KiB",
|
|
217
214
|
alone: bool = False,
|
|
218
215
|
) -> str:
|
|
@@ -238,7 +235,7 @@ def report_space(
|
|
|
238
235
|
|
|
239
236
|
|
|
240
237
|
def report_number(
|
|
241
|
-
n:
|
|
238
|
+
n: int | float | None, field: int | None = None, nan_value: str = "NaN"
|
|
242
239
|
) -> str:
|
|
243
240
|
"""
|
|
244
241
|
Given a number, report back the correct format as string.
|
|
@@ -257,7 +254,7 @@ def report(
|
|
|
257
254
|
v: float,
|
|
258
255
|
category: str,
|
|
259
256
|
options: Namespace,
|
|
260
|
-
field:
|
|
257
|
+
field: int | None = None,
|
|
261
258
|
alone=False,
|
|
262
259
|
) -> str:
|
|
263
260
|
"""
|
|
@@ -283,7 +280,7 @@ def sprint_tag(
|
|
|
283
280
|
key: str,
|
|
284
281
|
tag: Expando,
|
|
285
282
|
options: Namespace,
|
|
286
|
-
columnWidths:
|
|
283
|
+
columnWidths: ColumnWidths | None = None,
|
|
287
284
|
) -> str:
|
|
288
285
|
"""Generate a pretty-print ready string from a JTTag()."""
|
|
289
286
|
if columnWidths is None:
|
|
@@ -404,9 +401,7 @@ def sort_jobs(jobTypes: list[Any], options: Namespace) -> list[Any]:
|
|
|
404
401
|
if options.sortCategory in CATEGORIES:
|
|
405
402
|
return sorted(
|
|
406
403
|
jobTypes,
|
|
407
|
-
key=lambda tag: getattr(
|
|
408
|
-
tag, "{}_{}".format(sortField, options.sortCategory)
|
|
409
|
-
),
|
|
404
|
+
key=lambda tag: getattr(tag, f"{sortField}_{options.sortCategory}"),
|
|
410
405
|
reverse=options.sort == "decending",
|
|
411
406
|
)
|
|
412
407
|
elif options.sortCategory == "alpha":
|
|
@@ -491,7 +486,7 @@ def build_element(
|
|
|
491
486
|
|
|
492
487
|
def assertNonnegative(i: float, name: str) -> float:
|
|
493
488
|
if i < 0:
|
|
494
|
-
raise RuntimeError("Negative value {} reported for {}"
|
|
489
|
+
raise RuntimeError(f"Negative value {i} reported for {name}")
|
|
495
490
|
else:
|
|
496
491
|
return float(i)
|
|
497
492
|
|
|
@@ -509,7 +504,7 @@ def build_element(
|
|
|
509
504
|
float(item.get(category_key, defaults[category])), category
|
|
510
505
|
)
|
|
511
506
|
values.append(category_value)
|
|
512
|
-
|
|
507
|
+
|
|
513
508
|
excess_cpu_items = 0
|
|
514
509
|
for index in range(0, len(item_values[CATEGORIES[0]])):
|
|
515
510
|
# For each item, compute the computed categories
|
toil/utils/toilStatus.py
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import logging
|
|
16
16
|
import os
|
|
17
17
|
import sys
|
|
18
|
-
from typing import Any
|
|
18
|
+
from typing import Any
|
|
19
19
|
|
|
20
20
|
from toil.bus import replay_message_bus
|
|
21
21
|
from toil.common import Toil, parser_with_common_options
|
|
@@ -29,7 +29,7 @@ logger = logging.getLogger(__name__)
|
|
|
29
29
|
class ToilStatus:
|
|
30
30
|
"""Tool for reporting on job status."""
|
|
31
31
|
|
|
32
|
-
def __init__(self, jobStoreName: str, specifiedJobs:
|
|
32
|
+
def __init__(self, jobStoreName: str, specifiedJobs: list[str] | None = None):
|
|
33
33
|
self.jobStoreName = jobStoreName
|
|
34
34
|
self.jobStore = Toil.resumeJobStore(jobStoreName)
|
|
35
35
|
|
|
@@ -42,7 +42,9 @@ class ToilStatus:
|
|
|
42
42
|
self.jobsToReport = self.traverseJobGraph(rootJob)
|
|
43
43
|
except JobException:
|
|
44
44
|
# Root job isn't set.
|
|
45
|
-
logger.warning(
|
|
45
|
+
logger.warning(
|
|
46
|
+
"Workflow does not have a root job (yet? anymore?). Cannot look for jobs."
|
|
47
|
+
)
|
|
46
48
|
self.jobsToReport = []
|
|
47
49
|
|
|
48
50
|
else:
|
|
@@ -60,19 +62,14 @@ class ToilStatus:
|
|
|
60
62
|
"""
|
|
61
63
|
Change a job ID into a GraphViz node name.
|
|
62
64
|
"""
|
|
63
|
-
replacements = [
|
|
64
|
-
("_", "_u_"),
|
|
65
|
-
("/", "_s_"),
|
|
66
|
-
("-", "_d_")
|
|
67
|
-
]
|
|
65
|
+
replacements = [("_", "_u_"), ("/", "_s_"), ("-", "_d_")]
|
|
68
66
|
result = job_id
|
|
69
67
|
for char, replacement in replacements:
|
|
70
68
|
result = result.replace(char, replacement)
|
|
71
69
|
return result
|
|
70
|
+
|
|
72
71
|
id_strings = [str(job.jobStoreID) for job in self.jobsToReport]
|
|
73
|
-
jobsToNodeNames = {
|
|
74
|
-
s: id_to_name(s) for s in id_strings
|
|
75
|
-
}
|
|
72
|
+
jobsToNodeNames = {s: id_to_name(s) for s in id_strings}
|
|
76
73
|
|
|
77
74
|
# Print the nodes
|
|
78
75
|
for job in set(self.jobsToReport):
|
|
@@ -81,7 +78,7 @@ class ToilStatus:
|
|
|
81
78
|
jobsToNodeNames[str(job.jobStoreID)],
|
|
82
79
|
job.jobName,
|
|
83
80
|
job.displayName,
|
|
84
|
-
"black" if job.has_body() else "green"
|
|
81
|
+
"black" if job.has_body() else "green",
|
|
85
82
|
)
|
|
86
83
|
)
|
|
87
84
|
|
|
@@ -359,8 +356,8 @@ class ToilStatus:
|
|
|
359
356
|
def traverseJobGraph(
|
|
360
357
|
self,
|
|
361
358
|
rootJob: JobDescription,
|
|
362
|
-
jobsToReport:
|
|
363
|
-
foundJobStoreIDs:
|
|
359
|
+
jobsToReport: list[JobDescription] | None = None,
|
|
360
|
+
foundJobStoreIDs: set[str] | None = None,
|
|
364
361
|
) -> list[JobDescription]:
|
|
365
362
|
"""
|
|
366
363
|
Find all current jobs in the jobStore and return them as an Array.
|
toil/version.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
baseVersion = '9.
|
|
1
|
+
baseVersion = '9.2.0'
|
|
2
2
|
cgcloudVersion = '1.6.0a1.dev393'
|
|
3
|
-
version = '9.
|
|
4
|
-
cacheTag = 'cache-local-py3.
|
|
5
|
-
mainCacheTag = 'cache-master-py3.
|
|
6
|
-
distVersion = '9.
|
|
7
|
-
exactPython = 'python3.
|
|
8
|
-
python = 'python3.
|
|
9
|
-
dockerTag = '9.
|
|
10
|
-
currentCommit = '
|
|
3
|
+
version = '9.2.0-03ecbc5c4965941b0d87c26cc2d09415dbeb670c'
|
|
4
|
+
cacheTag = 'cache-local-py3.10'
|
|
5
|
+
mainCacheTag = 'cache-master-py3.10'
|
|
6
|
+
distVersion = '9.2.0'
|
|
7
|
+
exactPython = 'python3.10'
|
|
8
|
+
python = 'python3.10'
|
|
9
|
+
dockerTag = '9.2.0-03ecbc5c4965941b0d87c26cc2d09415dbeb670c-py3.10'
|
|
10
|
+
currentCommit = '03ecbc5c4965941b0d87c26cc2d09415dbeb670c'
|
|
11
11
|
dockerRegistry = 'quay.io/ucsc_cgl'
|
|
12
12
|
dockerName = 'toil'
|
|
13
13
|
dirty = False
|
|
14
|
-
cwltool_version = '3.1.
|
|
14
|
+
cwltool_version = '3.1.20260108082145'
|