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.
Files changed (155) hide show
  1. toil/__init__.py +5 -9
  2. toil/batchSystems/abstractBatchSystem.py +23 -22
  3. toil/batchSystems/abstractGridEngineBatchSystem.py +17 -12
  4. toil/batchSystems/awsBatch.py +8 -8
  5. toil/batchSystems/cleanup_support.py +4 -4
  6. toil/batchSystems/contained_executor.py +3 -3
  7. toil/batchSystems/gridengine.py +3 -4
  8. toil/batchSystems/htcondor.py +5 -5
  9. toil/batchSystems/kubernetes.py +65 -63
  10. toil/batchSystems/local_support.py +2 -3
  11. toil/batchSystems/lsf.py +6 -7
  12. toil/batchSystems/mesos/batchSystem.py +11 -7
  13. toil/batchSystems/mesos/test/__init__.py +1 -2
  14. toil/batchSystems/options.py +9 -10
  15. toil/batchSystems/registry.py +3 -7
  16. toil/batchSystems/singleMachine.py +8 -11
  17. toil/batchSystems/slurm.py +49 -38
  18. toil/batchSystems/torque.py +3 -4
  19. toil/bus.py +36 -34
  20. toil/common.py +129 -89
  21. toil/cwl/cwltoil.py +857 -729
  22. toil/cwl/utils.py +44 -35
  23. toil/fileStores/__init__.py +3 -1
  24. toil/fileStores/abstractFileStore.py +28 -30
  25. toil/fileStores/cachingFileStore.py +8 -8
  26. toil/fileStores/nonCachingFileStore.py +10 -21
  27. toil/job.py +159 -158
  28. toil/jobStores/abstractJobStore.py +68 -69
  29. toil/jobStores/aws/jobStore.py +249 -213
  30. toil/jobStores/aws/utils.py +13 -24
  31. toil/jobStores/fileJobStore.py +28 -22
  32. toil/jobStores/googleJobStore.py +21 -17
  33. toil/jobStores/utils.py +3 -7
  34. toil/leader.py +17 -22
  35. toil/lib/accelerators.py +6 -4
  36. toil/lib/aws/__init__.py +9 -10
  37. toil/lib/aws/ami.py +33 -19
  38. toil/lib/aws/iam.py +6 -6
  39. toil/lib/aws/s3.py +259 -157
  40. toil/lib/aws/session.py +76 -76
  41. toil/lib/aws/utils.py +51 -43
  42. toil/lib/checksum.py +19 -15
  43. toil/lib/compatibility.py +3 -2
  44. toil/lib/conversions.py +45 -18
  45. toil/lib/directory.py +29 -26
  46. toil/lib/docker.py +93 -99
  47. toil/lib/dockstore.py +77 -50
  48. toil/lib/ec2.py +39 -38
  49. toil/lib/ec2nodes.py +11 -4
  50. toil/lib/exceptions.py +8 -5
  51. toil/lib/ftp_utils.py +9 -14
  52. toil/lib/generatedEC2Lists.py +161 -20
  53. toil/lib/history.py +141 -97
  54. toil/lib/history_submission.py +163 -72
  55. toil/lib/io.py +27 -17
  56. toil/lib/memoize.py +2 -1
  57. toil/lib/misc.py +15 -11
  58. toil/lib/pipes.py +40 -25
  59. toil/lib/plugins.py +12 -8
  60. toil/lib/resources.py +1 -0
  61. toil/lib/retry.py +32 -38
  62. toil/lib/threading.py +12 -12
  63. toil/lib/throttle.py +1 -2
  64. toil/lib/trs.py +113 -51
  65. toil/lib/url.py +14 -23
  66. toil/lib/web.py +7 -2
  67. toil/options/common.py +18 -15
  68. toil/options/cwl.py +2 -2
  69. toil/options/runner.py +9 -5
  70. toil/options/wdl.py +1 -3
  71. toil/provisioners/__init__.py +9 -9
  72. toil/provisioners/abstractProvisioner.py +22 -20
  73. toil/provisioners/aws/__init__.py +20 -14
  74. toil/provisioners/aws/awsProvisioner.py +10 -8
  75. toil/provisioners/clusterScaler.py +19 -18
  76. toil/provisioners/gceProvisioner.py +2 -3
  77. toil/provisioners/node.py +11 -13
  78. toil/realtimeLogger.py +4 -4
  79. toil/resource.py +5 -5
  80. toil/server/app.py +2 -2
  81. toil/server/cli/wes_cwl_runner.py +11 -11
  82. toil/server/utils.py +18 -21
  83. toil/server/wes/abstract_backend.py +9 -8
  84. toil/server/wes/amazon_wes_utils.py +3 -3
  85. toil/server/wes/tasks.py +3 -5
  86. toil/server/wes/toil_backend.py +17 -21
  87. toil/server/wsgi_app.py +3 -3
  88. toil/serviceManager.py +3 -4
  89. toil/statsAndLogging.py +12 -13
  90. toil/test/__init__.py +33 -24
  91. toil/test/batchSystems/batchSystemTest.py +12 -11
  92. toil/test/batchSystems/batch_system_plugin_test.py +3 -5
  93. toil/test/batchSystems/test_slurm.py +38 -24
  94. toil/test/cwl/conftest.py +5 -6
  95. toil/test/cwl/cwlTest.py +194 -78
  96. toil/test/cwl/download_file_uri.json +6 -0
  97. toil/test/cwl/download_file_uri_no_hostname.json +6 -0
  98. toil/test/docs/scripts/tutorial_staging.py +1 -0
  99. toil/test/jobStores/jobStoreTest.py +9 -7
  100. toil/test/lib/aws/test_iam.py +1 -3
  101. toil/test/lib/aws/test_s3.py +1 -1
  102. toil/test/lib/dockerTest.py +9 -9
  103. toil/test/lib/test_ec2.py +12 -11
  104. toil/test/lib/test_history.py +4 -4
  105. toil/test/lib/test_trs.py +16 -14
  106. toil/test/lib/test_url.py +7 -6
  107. toil/test/lib/url_plugin_test.py +12 -18
  108. toil/test/provisioners/aws/awsProvisionerTest.py +10 -8
  109. toil/test/provisioners/clusterScalerTest.py +2 -5
  110. toil/test/provisioners/clusterTest.py +1 -3
  111. toil/test/server/serverTest.py +13 -4
  112. toil/test/sort/restart_sort.py +2 -6
  113. toil/test/sort/sort.py +3 -8
  114. toil/test/src/deferredFunctionTest.py +7 -7
  115. toil/test/src/environmentTest.py +1 -2
  116. toil/test/src/fileStoreTest.py +5 -5
  117. toil/test/src/importExportFileTest.py +5 -6
  118. toil/test/src/jobServiceTest.py +22 -14
  119. toil/test/src/jobTest.py +121 -25
  120. toil/test/src/miscTests.py +5 -7
  121. toil/test/src/promisedRequirementTest.py +8 -7
  122. toil/test/src/regularLogTest.py +2 -3
  123. toil/test/src/resourceTest.py +5 -8
  124. toil/test/src/restartDAGTest.py +5 -6
  125. toil/test/src/resumabilityTest.py +2 -2
  126. toil/test/src/retainTempDirTest.py +3 -3
  127. toil/test/src/systemTest.py +3 -3
  128. toil/test/src/threadingTest.py +1 -1
  129. toil/test/src/workerTest.py +1 -2
  130. toil/test/utils/toilDebugTest.py +6 -4
  131. toil/test/utils/toilKillTest.py +1 -1
  132. toil/test/utils/utilsTest.py +15 -14
  133. toil/test/wdl/wdltoil_test.py +247 -124
  134. toil/test/wdl/wdltoil_test_kubernetes.py +2 -2
  135. toil/toilState.py +2 -3
  136. toil/utils/toilDebugFile.py +3 -8
  137. toil/utils/toilDebugJob.py +1 -2
  138. toil/utils/toilLaunchCluster.py +1 -2
  139. toil/utils/toilSshCluster.py +2 -0
  140. toil/utils/toilStats.py +19 -24
  141. toil/utils/toilStatus.py +11 -14
  142. toil/version.py +10 -10
  143. toil/wdl/wdltoil.py +313 -209
  144. toil/worker.py +18 -12
  145. {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/METADATA +11 -14
  146. {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/RECORD +150 -153
  147. {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/WHEEL +1 -1
  148. toil/test/cwl/staging_cat.cwl +0 -27
  149. toil/test/cwl/staging_make_file.cwl +0 -25
  150. toil/test/cwl/staging_workflow.cwl +0 -43
  151. toil/test/cwl/zero_default.cwl +0 -61
  152. toil/test/utils/ABCWorkflowDebug/ABC.txt +0 -1
  153. {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/entry_points.txt +0 -0
  154. {toil-9.1.1.dist-info → toil-9.2.0.dist-info}/licenses/LICENSE +0 -0
  155. {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: Optional[dict[str, JobDescription]] = None,
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: Optional[JobDescription] = None
209
+ new_truth: JobDescription | None = None
211
210
  while True:
212
211
  try:
213
212
  new_truth = self.__job_store.load_job(job_id)
@@ -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",
@@ -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: Optional[list[tuple[str, str]]] = None
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
 
@@ -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[Union[int, tuple[int, int]]] = []
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 != []
@@ -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, Callable, Optional, TextIO, Union
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: Optional[int] = None) -> str:
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: Optional[int] = None, alone: bool = False) -> str:
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{}".format(k, trailer), field)
115
+ return pad_str(f"{k:g}Ki{trailer}", field)
115
116
  if k < (1024 * 1024):
116
- return pad_str("{:.1f}Mi{}".format(k / 1024.0, trailer), field)
117
+ return pad_str(f"{k / 1024.0:.1f}Mi{trailer}", field)
117
118
  if k < (1024 * 1024 * 1024):
118
- return pad_str("{:.1f}Gi{}".format(k / 1024.0 / 1024.0, trailer), field)
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: Optional[int] = None, unit: str = "s", alone: bool = False
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: Optional[int] = None,
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}{}".format(t, unit_text)
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: Optional[int] = None,
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: Union[int, float, None], field: Optional[int] = None, nan_value: str = "NaN"
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: Optional[int] = None,
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: Optional[ColumnWidths] = None,
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 {}".format(i, name))
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, Optional
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: Optional[list[str]] = None):
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("Workflow does not have a root job (yet? anymore?). Cannot look for jobs.")
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: Optional[list[JobDescription]] = None,
363
- foundJobStoreIDs: Optional[set[str]] = None,
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.1'
1
+ baseVersion = '9.2.0'
2
2
  cgcloudVersion = '1.6.0a1.dev393'
3
- version = '9.1.1-f654a3c80f5318ae2ec2e5ecb278a05e1e844a58'
4
- cacheTag = 'cache-local-py3.9'
5
- mainCacheTag = 'cache-master-py3.9'
6
- distVersion = '9.1.1'
7
- exactPython = 'python3.9'
8
- python = 'python3.9'
9
- dockerTag = '9.1.1-f654a3c80f5318ae2ec2e5ecb278a05e1e844a58-py3.9'
10
- currentCommit = 'f654a3c80f5318ae2ec2e5ecb278a05e1e844a58'
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.20250715140722'
14
+ cwltool_version = '3.1.20260108082145'