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.
- toil/__init__.py +18 -13
- toil/batchSystems/abstractBatchSystem.py +39 -13
- toil/batchSystems/abstractGridEngineBatchSystem.py +24 -24
- toil/batchSystems/awsBatch.py +14 -14
- toil/batchSystems/cleanup_support.py +7 -3
- toil/batchSystems/contained_executor.py +3 -3
- toil/batchSystems/htcondor.py +0 -1
- toil/batchSystems/kubernetes.py +34 -31
- toil/batchSystems/local_support.py +3 -1
- toil/batchSystems/lsf.py +7 -7
- toil/batchSystems/mesos/batchSystem.py +7 -7
- toil/batchSystems/options.py +32 -83
- toil/batchSystems/registry.py +104 -23
- toil/batchSystems/singleMachine.py +16 -13
- toil/batchSystems/slurm.py +87 -16
- toil/batchSystems/torque.py +0 -1
- toil/bus.py +44 -8
- toil/common.py +544 -753
- toil/cwl/__init__.py +28 -32
- toil/cwl/cwltoil.py +595 -574
- toil/cwl/utils.py +55 -10
- toil/exceptions.py +1 -1
- toil/fileStores/__init__.py +2 -2
- toil/fileStores/abstractFileStore.py +88 -14
- toil/fileStores/cachingFileStore.py +610 -549
- toil/fileStores/nonCachingFileStore.py +46 -22
- toil/job.py +182 -101
- toil/jobStores/abstractJobStore.py +161 -95
- toil/jobStores/aws/jobStore.py +23 -9
- toil/jobStores/aws/utils.py +6 -6
- toil/jobStores/fileJobStore.py +116 -18
- toil/jobStores/googleJobStore.py +16 -7
- toil/jobStores/utils.py +5 -6
- toil/leader.py +87 -56
- toil/lib/accelerators.py +10 -5
- toil/lib/aws/__init__.py +3 -14
- toil/lib/aws/ami.py +22 -9
- toil/lib/aws/iam.py +21 -13
- toil/lib/aws/session.py +2 -16
- toil/lib/aws/utils.py +4 -5
- toil/lib/compatibility.py +1 -1
- toil/lib/conversions.py +26 -3
- toil/lib/docker.py +22 -23
- toil/lib/ec2.py +10 -6
- toil/lib/ec2nodes.py +106 -100
- toil/lib/encryption/_nacl.py +2 -1
- toil/lib/generatedEC2Lists.py +325 -18
- toil/lib/io.py +49 -2
- toil/lib/misc.py +1 -1
- toil/lib/resources.py +9 -2
- toil/lib/threading.py +101 -38
- toil/options/common.py +736 -0
- toil/options/cwl.py +336 -0
- toil/options/wdl.py +37 -0
- toil/provisioners/abstractProvisioner.py +9 -4
- toil/provisioners/aws/__init__.py +3 -6
- toil/provisioners/aws/awsProvisioner.py +6 -0
- toil/provisioners/clusterScaler.py +3 -2
- toil/provisioners/gceProvisioner.py +2 -2
- toil/realtimeLogger.py +2 -1
- toil/resource.py +24 -18
- toil/server/app.py +2 -3
- toil/server/cli/wes_cwl_runner.py +4 -4
- toil/server/utils.py +1 -1
- toil/server/wes/abstract_backend.py +3 -2
- toil/server/wes/amazon_wes_utils.py +5 -4
- toil/server/wes/tasks.py +2 -3
- toil/server/wes/toil_backend.py +2 -10
- toil/server/wsgi_app.py +2 -0
- toil/serviceManager.py +12 -10
- toil/statsAndLogging.py +41 -9
- toil/test/__init__.py +29 -54
- toil/test/batchSystems/batchSystemTest.py +11 -111
- toil/test/batchSystems/test_slurm.py +24 -8
- toil/test/cactus/__init__.py +0 -0
- toil/test/cactus/test_cactus_integration.py +58 -0
- toil/test/cwl/cwlTest.py +438 -223
- toil/test/cwl/glob_dir.cwl +15 -0
- toil/test/cwl/preemptible.cwl +21 -0
- toil/test/cwl/preemptible_expression.cwl +28 -0
- toil/test/cwl/revsort.cwl +1 -1
- toil/test/cwl/revsort2.cwl +1 -1
- toil/test/docs/scriptsTest.py +2 -3
- toil/test/jobStores/jobStoreTest.py +34 -21
- toil/test/lib/aws/test_iam.py +4 -14
- toil/test/lib/aws/test_utils.py +0 -3
- toil/test/lib/dockerTest.py +4 -4
- toil/test/lib/test_ec2.py +12 -17
- toil/test/mesos/helloWorld.py +4 -5
- toil/test/mesos/stress.py +1 -1
- toil/test/{wdl/conftest.py → options/__init__.py} +0 -10
- toil/test/options/options.py +37 -0
- toil/test/provisioners/aws/awsProvisionerTest.py +9 -5
- toil/test/provisioners/clusterScalerTest.py +6 -4
- toil/test/provisioners/clusterTest.py +23 -11
- toil/test/provisioners/gceProvisionerTest.py +0 -6
- toil/test/provisioners/restartScript.py +3 -2
- toil/test/server/serverTest.py +1 -1
- toil/test/sort/restart_sort.py +2 -1
- toil/test/sort/sort.py +2 -1
- toil/test/sort/sortTest.py +2 -13
- toil/test/src/autoDeploymentTest.py +45 -45
- toil/test/src/busTest.py +5 -5
- toil/test/src/checkpointTest.py +2 -2
- toil/test/src/deferredFunctionTest.py +1 -1
- toil/test/src/fileStoreTest.py +32 -16
- toil/test/src/helloWorldTest.py +1 -1
- toil/test/src/importExportFileTest.py +1 -1
- toil/test/src/jobDescriptionTest.py +2 -1
- toil/test/src/jobServiceTest.py +1 -1
- toil/test/src/jobTest.py +18 -18
- toil/test/src/miscTests.py +5 -3
- toil/test/src/promisedRequirementTest.py +3 -3
- toil/test/src/realtimeLoggerTest.py +1 -1
- toil/test/src/resourceTest.py +2 -2
- toil/test/src/restartDAGTest.py +1 -1
- toil/test/src/resumabilityTest.py +36 -2
- toil/test/src/retainTempDirTest.py +1 -1
- toil/test/src/systemTest.py +2 -2
- toil/test/src/toilContextManagerTest.py +2 -2
- toil/test/src/userDefinedJobArgTypeTest.py +1 -1
- toil/test/utils/toilDebugTest.py +98 -32
- toil/test/utils/toilKillTest.py +2 -2
- toil/test/utils/utilsTest.py +23 -3
- toil/test/wdl/wdltoil_test.py +223 -45
- toil/toilState.py +7 -6
- toil/utils/toilClean.py +1 -1
- toil/utils/toilConfig.py +36 -0
- toil/utils/toilDebugFile.py +60 -33
- toil/utils/toilDebugJob.py +39 -12
- toil/utils/toilDestroyCluster.py +1 -1
- toil/utils/toilKill.py +1 -1
- toil/utils/toilLaunchCluster.py +13 -2
- toil/utils/toilMain.py +3 -2
- toil/utils/toilRsyncCluster.py +1 -1
- toil/utils/toilSshCluster.py +1 -1
- toil/utils/toilStats.py +445 -305
- toil/utils/toilStatus.py +2 -5
- toil/version.py +10 -10
- toil/wdl/utils.py +2 -122
- toil/wdl/wdltoil.py +1257 -492
- toil/worker.py +55 -46
- toil-6.1.0.dist-info/METADATA +124 -0
- toil-6.1.0.dist-info/RECORD +241 -0
- {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/WHEEL +1 -1
- {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/entry_points.txt +0 -1
- toil/batchSystems/parasol.py +0 -379
- toil/batchSystems/tes.py +0 -459
- toil/test/batchSystems/parasolTestSupport.py +0 -117
- toil/test/wdl/builtinTest.py +0 -506
- toil/test/wdl/toilwdlTest.py +0 -522
- toil/wdl/toilwdl.py +0 -141
- toil/wdl/versions/dev.py +0 -107
- toil/wdl/versions/draft2.py +0 -980
- toil/wdl/versions/v1.py +0 -794
- toil/wdl/wdl_analysis.py +0 -116
- toil/wdl/wdl_functions.py +0 -997
- toil/wdl/wdl_synthesis.py +0 -1011
- toil/wdl/wdl_types.py +0 -243
- toil-5.12.0.dist-info/METADATA +0 -118
- toil-5.12.0.dist-info/RECORD +0 -244
- /toil/{wdl/versions → options}/__init__.py +0 -0
- {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/LICENSE +0 -0
- {toil-5.12.0.dist-info → toil-6.1.0.dist-info}/top_level.txt +0 -0
toil/utils/toilDebugJob.py
CHANGED
|
@@ -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=
|
|
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",
|
|
30
|
-
help="
|
|
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
|
-
|
|
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
|
-
|
|
45
|
+
did_something = False
|
|
39
46
|
|
|
40
47
|
if options.printJobInfo:
|
|
41
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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)
|
toil/utils/toilDestroyCluster.py
CHANGED
|
@@ -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()
|
toil/utils/toilLaunchCluster.py
CHANGED
|
@@ -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'],
|
|
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
|
|
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(
|
|
81
|
+
print(metadata_version('toil'))
|
|
81
82
|
except:
|
|
82
83
|
print(f'Version gathered from toil.version: {version}')
|
toil/utils/toilRsyncCluster.py
CHANGED
|
@@ -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"
|
toil/utils/toilSshCluster.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(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',
|