toil.wdl.wdltoil¶
Attributes¶
Memoize a function result based on its parameters using this decorator. |
|
Exceptions¶
Common base class for all non-exit exceptions. |
|
Unspecified run-time error. |
|
Common base class for all non-exit exceptions. |
|
Base exception class for all locator exceptions. |
|
Raised in the scaler thread when a job cannot fit in any available node |
Classes¶
A context manager that represents a Toil workflow. |
|
A small wrapper around Python's builtin string class. |
|
Interface used to allow user code run by Toil to read and write files. |
|
Requirement for one or more computational accelerators, like a GPU or FPGA. |
|
Class represents a unit of work in toil. |
|
References a return value from a method as a promise before the method itself is run. |
|
Placeholder for a unregistered job ID used by a JobDescription. |
|
Represents the physical storage for the jobs and files in a Toil workflow. |
|
Global resource monitoring widget. |
|
WDL size() implementation that avoids downloading files. |
|
Standard library implementation for WDL as run on Toil. |
|
Standard library implementation to use inside a WDL task command evaluation. |
|
Standard library implementation for WDL as run on Toil, with additional |
|
Base job class for all WDL-related jobs. |
|
Job that determines the resources needed to run a WDL job. |
|
Job that runs a WDL task. |
|
Job that evaluates a WDL workflow node. |
|
Job that evaluates a list of WDL workflow nodes, which are in the same |
|
Job that collects the results from WDL workflow nodes and combines their |
|
Represents a graph of WDL WorkflowNodes. |
|
Job that can create more graph for a section of the wrokflow. |
|
Job that evaluates a scatter in a WDL workflow. Runs the body for each |
|
Job that takes all new bindings created in an array of input environments, |
|
Job that evaluates a conditional in a WDL workflow. |
|
Job that evaluates an entire WDL workflow. |
|
Job which evaluates an outputs section (such as for a workflow). |
|
Job that evaluates an entire WDL workflow, and returns the workflow outputs |
Functions¶
|
Add all Toil command line options to a parser. |
|
Parse an AcceleratorRequirement specified by user code. |
|
Function for ensuring you actually have a promised value, and not just a promise. |
|
Function for ensuring you actually have a collection of promised values, |
|
Returns a float representing the converted input in dst_units. |
|
Given a string representation of some memory (i.e. '1024 Mib'), return the |
|
Make a human-readable string into a bool. |
|
Make a temporary directory like tempfile.mkdtemp, but with relaxed permissions. |
Get the current user name, or a suitable substitute string if the user name |
|
|
Context manager that locks a mutex. The mutex is identified by the given |
|
Run code in a context where WDL errors will be reported with pretty formatting. |
|
Create a decorator to report WDL errors with the given task message. |
|
Get potential absolute URIs to check for an imported file. |
|
Implementation of a MiniWDL read_source function that can use any |
|
Combine variable bindings from multiple predecessor tasks into one set for |
|
Log bindings to the console, even if some are still promises. |
|
Get the supertype that can hold values of all the given types. |
|
Iterate over all WDL workflow nodes in the given node, including inputs, |
|
Get the combined workflow_node_dependencies of root and everything under |
|
Encode a Toil file ID and its source path in a URI that starts with the scheme in TOIL_URI_SCHEME. |
|
Unpack a URI made by make_toil_uri to retrieve the FileID and the basename |
|
Evaluate output decls with a given bindings environment and standard library. |
|
Decide if a filename is a known kind of URL |
|
Evaluate an expression when we know the name of it. |
|
Evaluate the expression of a declaration node, or raise an error. |
|
Evaluate a bunch of expressions with names, and make them into a fresh set of bindings. inputs_dict is a mapping of |
|
If the name of the declaration is already defined in the environment, return its value. Otherwise, return the evaluated expression. |
|
Make sure all the File values embedded in the given bindings point to files |
|
Make sure all the File values embedded in the given bindings point to files |
|
Based off of WDL.runtime.task_container.add_paths from miniwdl |
|
Make sure all File values embedded in the given bindings are imported, |
|
Make sure all the File values embedded in the given bindings point to files |
|
Get the paths of all files in the bindings. Doesn't guarantee that |
|
Run all File values embedded in the given bindings through the given |
|
Run all File values' types and values embedded in the given bindings |
|
Run all File values' types and values embedded in the given binding's value through the given |
|
Run all File values embedded in the given value through the given |
|
Monkeypatch miniwdl's WDL.Value.Base.coerce() function to virtualize files when they are represented as Strings. |
|
A Toil workflow to interpret WDL input files. |
Module Contents¶
- exception toil.wdl.wdltoil.InsufficientSystemResources(requirer, resource, available=None, batch_system=None, source=None, details=[])¶
Bases:
ExceptionCommon base class for all non-exit exceptions.
- Parameters:
requirer (toil.job.Requirer)
resource (str)
available (Optional[toil.job.ParsedRequirement])
batch_system (Optional[str])
source (Optional[str])
details (List[str])
- class toil.wdl.wdltoil.Toil(options)¶
Bases:
ContextManager[Toil]A context manager that represents a Toil workflow.
Specifically the batch system, job store, and its configuration.
- Parameters:
options (argparse.Namespace)
- __enter__()¶
Derive configuration from the command line options.
Then load the job store and, on restart, consolidate the derived configuration with the one from the previous invocation of the workflow.
- Return type:
- __exit__(exc_type, exc_val, exc_tb)¶
Clean up after a workflow invocation.
Depending on the configuration, delete the job store.
- Parameters:
exc_type (Optional[Type[BaseException]])
exc_val (Optional[BaseException])
exc_tb (Optional[types.TracebackType])
- Return type:
Literal[False]
- start(rootJob)¶
Invoke a Toil workflow with the given job as the root for an initial run.
This method must be called in the body of a
with Toil(...) as toil:statement. This method should not be called more than once for a workflow that has not finished.- Parameters:
rootJob (toil.job.Job) – The root job of the workflow
- Returns:
The root job’s return value
- Return type:
Any
- restart()¶
Restarts a workflow that has been interrupted.
- Returns:
The root job’s return value
- Return type:
Any
- classmethod getJobStore(locator)¶
Create an instance of the concrete job store implementation that matches the given locator.
- Parameters:
locator (str) – The location of the job store to be represent by the instance
- Returns:
an instance of a concrete subclass of AbstractJobStore
- Return type:
- static createBatchSystem(config)¶
Create an instance of the batch system specified in the given config.
- Parameters:
config (Config) – the current configuration
- Returns:
an instance of a concrete subclass of AbstractBatchSystem
- Return type:
- importFile(srcUrl: str, sharedFileName: str, symlink: bool = True) None¶
- importFile(srcUrl: str, sharedFileName: None = None, symlink: bool = True) toil.fileStores.FileID
- import_file(src_uri: str, shared_file_name: str, symlink: bool = True, check_existence: bool = True) None¶
- import_file(src_uri: str, shared_file_name: None = None, symlink: bool = True, check_existence: bool = True) toil.fileStores.FileID
Import the file at the given URL into the job store.
By default, returns None if the file does not exist.
- Parameters:
check_existence – If true, raise FileNotFoundError if the file does not exist. If false, return None when the file does not exist.
See
toil.jobStores.abstractJobStore.AbstractJobStore.importFile()for a full description
- exportFile(jobStoreFileID, dstUrl)¶
- Parameters:
jobStoreFileID (toil.fileStores.FileID)
dstUrl (str)
- Return type:
None
- export_file(file_id, dst_uri)¶
Export file to destination pointed at by the destination URL.
See
toil.jobStores.abstractJobStore.AbstractJobStore.exportFile()for a full description- Parameters:
file_id (toil.fileStores.FileID)
dst_uri (str)
- Return type:
None
- static normalize_uri(uri, check_existence=False)¶
Given a URI, if it has no scheme, prepend “file:”.
- static getToilWorkDir(configWorkDir=None)¶
Return a path to a writable directory under which per-workflow directories exist.
This directory is always required to exist on a machine, even if the Toil worker has not run yet. If your workers and leader have different temp directories, you may need to set TOIL_WORKDIR.
- classmethod get_toil_coordination_dir(config_work_dir, config_coordination_dir)¶
Return a path to a writable directory, which will be in memory if convenient. Ought to be used for file locking and coordination.
- Parameters:
- Returns:
Path to the Toil coordination directory. Ought to be on a POSIX filesystem that allows directories containing open files to be deleted.
- Return type:
- static get_workflow_path_component(workflow_id)¶
Get a safe filesystem path component for a workflow.
Will be consistent for all processes on a given machine, and different for all processes on different machines.
- classmethod getLocalWorkflowDir(workflowID, configWorkDir=None)¶
Return the directory where worker directories and the cache will be located for this workflow on this machine.
- classmethod get_local_workflow_coordination_dir(workflow_id, config_work_dir, config_coordination_dir)¶
Return the directory where coordination files should be located for this workflow on this machine. These include internal Toil databases and lock files for the machine.
If an in-memory filesystem is available, it is used. Otherwise, the local workflow directory, which may be on a shared network filesystem, is used.
- Parameters:
- Returns:
Path to the local workflow coordination directory on this machine.
- Return type:
- toil.wdl.wdltoil.addOptions(parser, jobstore_as_flag=False, cwl=False, wdl=False)¶
Add all Toil command line options to a parser.
Support for config files if using configargparse. This will also check and set up the default config file.
- Parameters:
jobstore_as_flag (bool) – make the job store option a –jobStore flag instead of a required jobStore positional argument.
cwl (bool) – Whether CWL options are expected. If so, CWL options won’t be suppressed.
wdl (bool) – Whether WDL options are expected. If so, WDL options won’t be suppressed.
parser (argparse.ArgumentParser)
- Return type:
None
- class toil.wdl.wdltoil.FileID(fileStoreID, size, executable=False)¶
Bases:
strA small wrapper around Python’s builtin string class.
It is used to represent a file’s ID in the file store, and has a size attribute that is the file’s size in bytes. This object is returned by importFile and writeGlobalFile.
Calls into the file store can use bare strings; size will be queried from the job store if unavailable in the ID.
- classmethod forPath(fileStoreID, filePath)¶
- class toil.wdl.wdltoil.AbstractFileStore(jobStore, jobDesc, file_store_dir, waitForPreviousCommit)¶
Bases:
abc.ABCInterface used to allow user code run by Toil to read and write files.
Also provides the interface to other Toil facilities used by user code, including:
normal (non-real-time) logging
finding the correct temporary directory for scratch work
importing and exporting files into and out of the workflow
Stores user files in the jobStore, but keeps them separate from actual jobs.
May implement caching.
Passed as argument to the
toil.job.Job.run()method.Access to files is only permitted inside the context manager provided by
toil.fileStores.abstractFileStore.AbstractFileStore.open().Also responsible for committing completed jobs back to the job store with an update operation, and allowing that commit operation to be waited for.
- Parameters:
jobDesc (toil.job.JobDescription)
file_store_dir (str)
waitForPreviousCommit (Callable[[], Any])
- static createFileStore(jobStore, jobDesc, file_store_dir, waitForPreviousCommit, caching)¶
Create a concreate FileStore.
- Parameters:
jobDesc (toil.job.JobDescription)
file_store_dir (str)
waitForPreviousCommit (Callable[[], Any])
caching (Optional[bool])
- Return type:
Union[toil.fileStores.nonCachingFileStore.NonCachingFileStore, toil.fileStores.cachingFileStore.CachingFileStore]
- static shutdownFileStore(workflowID, config_work_dir, config_coordination_dir)¶
Carry out any necessary filestore-specific cleanup.
This is a destructive operation and it is important to ensure that there are no other running processes on the system that are modifying or using the file store for this workflow.
This is the intended to be the last call to the file store in a Toil run, called by the batch system cleanup function upon batch system shutdown.
- open(job)¶
Create the context manager around tasks prior and after a job has been run.
File operations are only permitted inside the context manager.
Implementations must only yield from within with super().open(job):.
- Parameters:
job (toil.job.Job) – The job instance of the toil job to run.
- Return type:
Generator[None, None, None]
- get_disk_usage()¶
Get the number of bytes of disk used by the last job run under open().
Disk usage is measured at the end of the job. TODO: Sample periodically and record peak usage.
- Return type:
Optional[int]
- getLocalTempDir()¶
Get a new local temporary directory in which to write files.
The directory will only persist for the duration of the job.
- Returns:
The absolute path to a new local temporary directory. This directory will exist for the duration of the job only, and is guaranteed to be deleted once the job terminates, removing all files it contains recursively.
- Return type:
- getLocalTempFile(suffix=None, prefix=None)¶
Get a new local temporary file that will persist for the duration of the job.
- Parameters:
- Returns:
The absolute path to a local temporary file. This file will exist for the duration of the job only, and is guaranteed to be deleted once the job terminates.
- Return type:
- getLocalTempFileName(suffix=None, prefix=None)¶
Get a valid name for a new local file. Don’t actually create a file at the path.
- Parameters:
- Returns:
Path to valid file
- Return type:
- abstract writeGlobalFile(localFileName, cleanup=False)¶
Upload a file (as a path) to the job store.
If the file is in a FileStore-managed temporary directory (i.e. from
toil.fileStores.abstractFileStore.AbstractFileStore.getLocalTempDir()), it will become a local copy of the file, eligible for deletion bytoil.fileStores.abstractFileStore.AbstractFileStore.deleteLocalFile().If an executable file on the local filesystem is uploaded, its executability will be preserved when it is downloaded again.
- Parameters:
localFileName (str) – The path to the local file to upload. The last path component (basename of the file) will remain associated with the file in the file store, if supported by the backing JobStore, so that the file can be searched for by name or name glob.
cleanup (bool) – if True then the copy of the global file will be deleted once the job and all its successors have completed running. If not the global file must be deleted manually.
- Returns:
an ID that can be used to retrieve the file.
- Return type:
- writeGlobalFileStream(cleanup=False, basename=None, encoding=None, errors=None)¶
Similar to writeGlobalFile, but allows the writing of a stream to the job store. The yielded file handle does not need to and should not be closed explicitly.
- Parameters:
encoding (Optional[str]) – The name of the encoding used to decode the file. Encodings are the same as for decode(). Defaults to None which represents binary mode.
errors (Optional[str]) – Specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
cleanup (bool) – is as in
toil.fileStores.abstractFileStore.AbstractFileStore.writeGlobalFile().basename (Optional[str]) – If supported by the backing JobStore, use the given file basename so that when searching the job store with a query matching that basename, the file will be detected.
- Returns:
A context manager yielding a tuple of 1) a file handle which can be written to and 2) the toil.fileStores.FileID of the resulting file in the job store.
- Return type:
Iterator[Tuple[toil.lib.io.WriteWatchingStream, toil.fileStores.FileID]]
- logAccess(fileStoreID, destination=None)¶
Record that the given file was read by the job.
(to be announced if the job fails)
If destination is not None, it gives the path that the file was downloaded to. Otherwise, assumes that the file was streamed.
Must be called by
readGlobalFile()andreadGlobalFileStream()implementations.- Parameters:
fileStoreID (Union[toil.fileStores.FileID, str])
destination (Union[str, None])
- Return type:
None
- abstract readGlobalFile(fileStoreID, userPath=None, cache=True, mutable=False, symlink=False)¶
Make the file associated with fileStoreID available locally.
If mutable is True, then a copy of the file will be created locally so that the original is not modified and does not change the file for other jobs. If mutable is False, then a link can be created to the file, saving disk resources. The file that is downloaded will be executable if and only if it was originally uploaded from an executable file on the local filesystem.
If a user path is specified, it is used as the destination. If a user path isn’t specified, the file is stored in the local temp directory with an encoded name.
The destination file must not be deleted by the user; it can only be deleted through deleteLocalFile.
Implementations must call
logAccess()to report the download.- Parameters:
fileStoreID (str) – job store id for the file
userPath (Optional[str]) – a path to the name of file to which the global file will be copied or hard-linked (see below).
cache (bool) – Described in
toil.fileStores.CachingFileStore.readGlobalFile()mutable (bool) – Described in
toil.fileStores.CachingFileStore.readGlobalFile()symlink (bool) – True if caller can accept symlink, False if caller can only accept a normal file or hardlink
- Returns:
An absolute path to a local, temporary copy of the file keyed by fileStoreID.
- Return type:
- readGlobalFileStream(fileStoreID: str, encoding: Literal[None] = None, errors: str | None = None) ContextManager[IO[bytes]]¶
- readGlobalFileStream(fileStoreID: str, encoding: str, errors: str | None = None) ContextManager[IO[str]]
Read a stream from the job store; similar to readGlobalFile.
The yielded file handle does not need to and should not be closed explicitly.
- Parameters:
encoding – the name of the encoding used to decode the file. Encodings are the same as for decode(). Defaults to None which represents binary mode.
errors – an optional string that specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
Implementations must call
logAccess()to report the download.- Returns:
a context manager yielding a file handle which can be read from.
- getGlobalFileSize(fileStoreID)¶
Get the size of the file pointed to by the given ID, in bytes.
If a FileID or something else with a non-None ‘size’ field, gets that.
Otherwise, asks the job store to poll the file’s size.
Note that the job store may overestimate the file’s size, for example if it is encrypted and had to be augmented with an IV or other encryption framing.
- Parameters:
fileStoreID (Union[toil.fileStores.FileID, str]) – File ID for the file
- Returns:
File’s size in bytes, as stored in the job store
- Return type:
- abstract deleteLocalFile(fileStoreID)¶
Delete local copies of files associated with the provided job store ID.
Raises an OSError with an errno of errno.ENOENT if no such local copies exist. Thus, cannot be called multiple times in succession.
The files deleted are all those previously read from this file ID via readGlobalFile by the current job into the job’s file-store-provided temp directory, plus the file that was written to create the given file ID, if it was written by the current job from the job’s file-store-provided temp directory.
- Parameters:
fileStoreID (Union[toil.fileStores.FileID, str]) – File Store ID of the file to be deleted.
- Return type:
None
- abstract deleteGlobalFile(fileStoreID)¶
Delete local files and then permanently deletes them from the job store.
To ensure that the job can be restarted if necessary, the delete will not happen until after the job’s run method has completed.
- Parameters:
fileStoreID (Union[toil.fileStores.FileID, str]) – the File Store ID of the file to be deleted.
- Return type:
None
- importFile(srcUrl, sharedFileName=None)¶
- Parameters:
- Return type:
Optional[toil.fileStores.FileID]
- import_file(src_uri, shared_file_name=None)¶
- Parameters:
- Return type:
Optional[toil.fileStores.FileID]
- exportFile(jobStoreFileID, dstUrl)¶
- Parameters:
jobStoreFileID (toil.fileStores.FileID)
dstUrl (str)
- Return type:
None
- abstract export_file(file_id, dst_uri)¶
- Parameters:
file_id (toil.fileStores.FileID)
dst_uri (str)
- Return type:
None
- log_to_leader(text, level=logging.INFO)¶
Send a logging message to the leader. The message will also be logged by the worker at the same level.
- log_user_stream(name, stream)¶
Send a stream of UTF-8 text to the leader as a named log stream.
Useful for things like the error logs of Docker containers. The leader will show it to the user or organize it appropriately for user-level log information.
- abstract startCommit(jobState=False)¶
Update the status of the job on the disk.
May bump the version number of the job.
May start an asynchronous process. Call waitForCommit() to wait on that process. You must waitForCommit() before committing any further updates to the job. During the asynchronous process, it is safe to modify the job; modifications after this call will not be committed until the next call.
- Parameters:
jobState (bool) – If True, commit the state of the FileStore’s job, and file deletes. Otherwise, commit only file creates/updates.
- Return type:
None
- abstract waitForCommit()¶
Blocks while startCommit is running.
This function is called by this job’s successor to ensure that it does not begin modifying the job store until after this job has finished doing so.
Might be called when startCommit is never called on a particular instance, in which case it does not block.
- Returns:
Always returns True
- Return type:
- classmethod shutdown(shutdown_info)¶
- Abstractmethod:
- Parameters:
shutdown_info (Any)
- Return type:
None
Shutdown the filestore on this node.
This is intended to be called on batch system shutdown.
- Parameters:
shutdown_info (Any) – The implementation-specific shutdown information, for shutting down the file store and removing all its state and all job local temp directories from the node.
- Return type:
None
- class toil.wdl.wdltoil.AcceleratorRequirement¶
Bases:
TypedDictRequirement for one or more computational accelerators, like a GPU or FPGA.
- kind: str¶
What kind of accelerator is required. Can be “gpu”. Other kinds defined in the future might be “fpga”, etc.
- model: typing_extensions.NotRequired[str]¶
What model of accelerator is needed. The exact set of values available depends on what the backing scheduler calls its accelerators; strings like “nvidia-tesla-k80” might be expected to work. If a specific model of accelerator is not required, this should be absent.
- brand: typing_extensions.NotRequired[str]¶
What brand or manufacturer of accelerator is required. The exact set of values available depends on what the backing scheduler calls the brands of its accleerators; strings like “nvidia” or “amd” might be expected to work. If a specific brand of accelerator is not required (for example, because the job can use multiple brands of accelerator that support a given API) this should be absent.
- class toil.wdl.wdltoil.Job(memory=None, cores=None, disk=None, accelerators=None, preemptible=None, preemptable=None, unitName='', checkpoint=False, displayName='', descriptionClass=None, local=None)¶
Class represents a unit of work in toil.
- Parameters:
memory (Optional[ParseableIndivisibleResource])
cores (Optional[ParseableDivisibleResource])
disk (Optional[ParseableIndivisibleResource])
accelerators (Optional[ParseableAcceleratorRequirement])
preemptible (Optional[ParseableFlag])
preemptable (Optional[ParseableFlag])
unitName (Optional[str])
checkpoint (Optional[bool])
displayName (Optional[str])
descriptionClass (Optional[type])
local (Optional[bool])
- __str__()¶
Produce a useful logging string to identify this Job and distinguish it from its JobDescription.
- check_initialized()¶
Ensure that Job.__init__() has been called by any subclass __init__().
This uses the fact that the self._description instance variable should always be set after __init__().
If __init__() has not been called, raise an error.
- Return type:
None
- property jobStoreID: str | TemporaryID¶
Get the ID of this Job.
- Return type:
Union[str, TemporaryID]
- property description: JobDescription¶
Expose the JobDescription that describes this job.
- Return type:
- property memory¶
- The maximum number of bytes of memory the job will require to run.
- property accelerators: List[AcceleratorRequirement]¶
Any accelerators, such as GPUs, that are needed.
- Return type:
List[AcceleratorRequirement]
- preemptable()¶
- assignConfig(config)¶
Assign the given config object.
It will be used by various actions implemented inside the Job class.
- Parameters:
config (toil.common.Config) – Config object to query
- Return type:
None
- run(fileStore)¶
Override this function to perform work and dynamically create successor jobs.
- Parameters:
fileStore (toil.fileStores.abstractFileStore.AbstractFileStore) – Used to create local and globally sharable temporary files and to send log messages to the leader process.
- Returns:
The return value of the function can be passed to other jobs by means of
toil.job.Job.rv().- Return type:
Any
- addChild(childJob)¶
Add a childJob to be run as child of this job.
Child jobs will be run directly after this job’s
toil.job.Job.run()method has completed.
- hasChild(childJob)¶
Check if childJob is already a child of this job.
- addFollowOn(followOnJob)¶
Add a follow-on job.
Follow-on jobs will be run after the child jobs and their successors have been run.
- hasPredecessor(job)¶
Check if a given job is already a predecessor of this job.
- hasFollowOn(followOnJob)¶
Check if given job is already a follow-on of this job.
- addService(service, parentService=None)¶
Add a service.
The
toil.job.Job.Service.start()method of the service will be called after the run method has completed but before any successors are run. The service’stoil.job.Job.Service.stop()method will be called once the successors of the job have been run.Services allow things like databases and servers to be started and accessed by jobs in a workflow.
- Raises:
toil.job.JobException – If service has already been made the child of a job or another service.
- Parameters:
- Returns:
a promise that will be replaced with the return value from
toil.job.Job.Service.start()of service in any successor of the job.- Return type:
- hasService(service)¶
Return True if the given Service is a service of this job, and False otherwise.
- addChildFn(fn, *args, **kwargs)¶
Add a function as a child job.
- Parameters:
fn (Callable) – Function to be run as a child job with
*argsand**kwargsas arguments to this function. See toil.job.FunctionWrappingJob for reserved keyword arguments used to specify resource requirements.- Returns:
The new child job that wraps fn.
- Return type:
- addFollowOnFn(fn, *args, **kwargs)¶
Add a function as a follow-on job.
- Parameters:
fn (Callable) – Function to be run as a follow-on job with
*argsand**kwargsas arguments to this function. See toil.job.FunctionWrappingJob for reserved keyword arguments used to specify resource requirements.- Returns:
The new follow-on job that wraps fn.
- Return type:
- addChildJobFn(fn, *args, **kwargs)¶
Add a job function as a child job.
See
toil.job.JobFunctionWrappingJobfor a definition of a job function.- Parameters:
fn (Callable) – Job function to be run as a child job with
*argsand**kwargsas arguments to this function. See toil.job.JobFunctionWrappingJob for reserved keyword arguments used to specify resource requirements.- Returns:
The new child job that wraps fn.
- Return type:
- addFollowOnJobFn(fn, *args, **kwargs)¶
Add a follow-on job function.
See
toil.job.JobFunctionWrappingJobfor a definition of a job function.- Parameters:
fn (Callable) – Job function to be run as a follow-on job with
*argsand**kwargsas arguments to this function. See toil.job.JobFunctionWrappingJob for reserved keyword arguments used to specify resource requirements.- Returns:
The new follow-on job that wraps fn.
- Return type:
- property tempDir: str¶
Shortcut to calling
job.fileStore.getLocalTempDir().Temp dir is created on first call and will be returned for first and future calls :return: Path to tempDir. See job.fileStore.getLocalTempDir
- Return type:
- log(text, level=logging.INFO)¶
Log using
fileStore.log_to_leader().- Parameters:
text (str)
- Return type:
None
- static wrapFn(fn, *args, **kwargs)¶
Makes a Job out of a function.
Convenience function for constructor of
toil.job.FunctionWrappingJob.- Parameters:
fn – Function to be run with
*argsand**kwargsas arguments. See toil.job.JobFunctionWrappingJob for reserved keyword arguments used to specify resource requirements.- Returns:
The new function that wraps fn.
- Return type:
- static wrapJobFn(fn, *args, **kwargs)¶
Makes a Job out of a job function.
Convenience function for constructor of
toil.job.JobFunctionWrappingJob.- Parameters:
fn – Job function to be run with
*argsand**kwargsas arguments. See toil.job.JobFunctionWrappingJob for reserved keyword arguments used to specify resource requirements.- Returns:
The new job function that wraps fn.
- Return type:
- encapsulate(name=None)¶
Encapsulates the job, see
toil.job.EncapsulatedJob. Convenience function for constructor oftoil.job.EncapsulatedJob.- Parameters:
name (Optional[str]) – Human-readable name for the encapsulated job.
- Returns:
an encapsulated version of this job.
- Return type:
- rv(*path)¶
Create a promise (
toil.job.Promise).The “promise” representing a return value of the job’s run method, or, in case of a function-wrapping job, the wrapped function’s return value.
- Parameters:
path ((Any)) – Optional path for selecting a component of the promised return value. If absent or empty, the entire return value will be used. Otherwise, the first element of the path is used to select an individual item of the return value. For that to work, the return value must be a list, dictionary or of any other type implementing the __getitem__() magic method. If the selected item is yet another composite value, the second element of the path can be used to select an item from it, and so on. For example, if the return value is [6,{‘a’:42}], .rv(0) would select 6 , rv(1) would select {‘a’:3} while rv(1,’a’) would select 3. To select a slice from a return value that is slicable, e.g. tuple or list, the path element should be a slice object. For example, assuming that the return value is [6, 7, 8, 9] then .rv(slice(1, 3)) would select [7, 8]. Note that slicing really only makes sense at the end of path.
- Returns:
A promise representing the return value of this jobs
toil.job.Job.run()method.- Return type:
- registerPromise(path)¶
- prepareForPromiseRegistration(jobStore)¶
Set up to allow this job’s promises to register themselves.
Prepare this job (the promisor) so that its promises can register themselves with it, when the jobs they are promised to (promisees) are serialized.
The promissee holds the reference to the promise (usually as part of the job arguments) and when it is being pickled, so will the promises it refers to. Pickling a promise triggers it to be registered with the promissor.
- Parameters:
- Return type:
None
- checkJobGraphForDeadlocks()¶
Ensures that a graph of Jobs (that hasn’t yet been saved to the JobStore) doesn’t contain any pathological relationships between jobs that would result in deadlocks if we tried to run the jobs.
See
toil.job.Job.checkJobGraphConnected(),toil.job.Job.checkJobGraphAcyclic()andtoil.job.Job.checkNewCheckpointsAreLeafVertices()for more info.- Raises:
toil.job.JobGraphDeadlockException – if the job graph is cyclic, contains multiple roots or contains checkpoint jobs that are not leaf vertices when defined (see
toil.job.Job.checkNewCheckpointsAreLeaves()).
- getRootJobs()¶
Return the set of root job objects that contain this job.
A root job is a job with no predecessors (i.e. which are not children, follow-ons, or services).
Only deals with jobs created here, rather than loaded from the job store.
- Return type:
Set[Job]
- checkJobGraphConnected()¶
- Raises:
toil.job.JobGraphDeadlockException – if
toil.job.Job.getRootJobs()does not contain exactly one root job.
As execution always starts from one root job, having multiple root jobs will cause a deadlock to occur.
Only deals with jobs created here, rather than loaded from the job store.
- checkJobGraphAcylic()¶
- Raises:
toil.job.JobGraphDeadlockException – if the connected component of jobs containing this job contains any cycles of child/followOn dependencies in the augmented job graph (see below). Such cycles are not allowed in valid job graphs.
A follow-on edge (A, B) between two jobs A and B is equivalent to adding a child edge to B from (1) A, (2) from each child of A, and (3) from the successors of each child of A. We call each such edge an edge an “implied” edge. The augmented job graph is a job graph including all the implied edges.
For a job graph G = (V, E) the algorithm is
O(|V|^2). It isO(|V| + |E|)for a graph with no follow-ons. The former follow-on case could be improved!Only deals with jobs created here, rather than loaded from the job store.
- checkNewCheckpointsAreLeafVertices()¶
A checkpoint job is a job that is restarted if either it fails, or if any of its successors completely fails, exhausting their retries.
A job is a leaf it is has no successors.
A checkpoint job must be a leaf when initially added to the job graph. When its run method is invoked it can then create direct successors. This restriction is made to simplify implementation.
Only works on connected components of jobs not yet added to the JobStore.
- Raises:
toil.job.JobGraphDeadlockException – if there exists a job being added to the graph for which checkpoint=True and which is not a leaf.
- Return type:
None
- defer(function, *args, **kwargs)¶
Register a deferred function, i.e. a callable that will be invoked after the current attempt at running this job concludes. A job attempt is said to conclude when the job function (or the
toil.job.Job.run()method for class-based jobs) returns, raises an exception or after the process running it terminates abnormally. A deferred function will be called on the node that attempted to run the job, even if a subsequent attempt is made on another node. A deferred function should be idempotent because it may be called multiple times on the same node or even in the same process. More than one deferred function may be registered per job attempt by calling this method repeatedly with different arguments. If the same function is registered twice with the same or different arguments, it will be called twice per job attempt.Examples for deferred functions are ones that handle cleanup of resources external to Toil, like Docker containers, files outside the work directory, etc.
- class Runner¶
Used to setup and run Toil workflow.
- static getDefaultArgumentParser(jobstore_as_flag=False)¶
Get argument parser with added toil workflow options.
- Parameters:
jobstore_as_flag (bool) – make the job store option a –jobStore flag instead of a required jobStore positional argument.
- Returns:
The argument parser used by a toil workflow with added Toil options.
- Return type:
- static getDefaultOptions(jobStore=None, jobstore_as_flag=False)¶
Get default options for a toil workflow.
- Parameters:
- Returns:
The options used by a toil workflow.
- Return type:
- static addToilOptions(parser, jobstore_as_flag=False)¶
Adds the default toil options to an
optparseorargparseparser object.- Parameters:
parser (Union[optparse.OptionParser, argparse.ArgumentParser]) – Options object to add toil options to.
jobstore_as_flag (bool) – make the job store option a –jobStore flag instead of a required jobStore positional argument.
- Return type:
None
- static startToil(job, options)¶
Run the toil workflow using the given options.
Deprecated by toil.common.Toil.start.
(see Job.Runner.getDefaultOptions and Job.Runner.addToilOptions) starting with this job. :param job: root job of the workflow :raises: toil.exceptions.FailedJobsException if at the end of function there remain failed jobs. :return: The return value of the root job’s run function.
- Parameters:
job (Job)
- Return type:
Any
- class Service(memory=None, cores=None, disk=None, accelerators=None, preemptible=None, unitName=None)¶
Bases:
RequirerAbstract class used to define the interface to a service.
Should be subclassed by the user to define services.
Is not executed as a job; runs within a ServiceHostJob.
- abstract start(job)¶
Start the service.
- Parameters:
job (Job) – The underlying host job that the service is being run in. Can be used to register deferred functions, or to access the fileStore for creating temporary files.
- Returns:
An object describing how to access the service. The object must be pickleable and will be used by jobs to access the service (see
toil.job.Job.addService()).- Return type:
Any
- abstract stop(job)¶
Stops the service. Function can block until complete.
- Parameters:
job (Job) – The underlying host job that the service is being run in. Can be used to register deferred functions, or to access the fileStore for creating temporary files.
- Return type:
None
- check()¶
Checks the service is still running.
- Raises:
exceptions.RuntimeError – If the service failed, this will cause the service job to be labeled failed.
- Returns:
True if the service is still running, else False. If False then the service job will be terminated, and considered a success. Important point: if the service job exits due to a failure, it should raise a RuntimeError, not return False!
- Return type:
- getUserScript()¶
- Return type:
- getTopologicalOrderingOfJobs()¶
- Returns:
a list of jobs such that for all pairs of indices i, j for which i < j, the job at index i can be run before the job at index j.
- Return type:
List[Job]
Only considers jobs in this job’s subgraph that are newly added, not loaded from the job store.
Ignores service jobs.
- saveBody(jobStore)¶
Save the execution data for just this job to the JobStore, and fill in the JobDescription with the information needed to retrieve it.
The Job’s JobDescription must have already had a real jobStoreID assigned to it.
Does not save the JobDescription.
- Parameters:
jobStore (toil.jobStores.abstractJobStore.AbstractJobStore) – The job store to save the job body into.
- Return type:
None
- saveAsRootJob(jobStore)¶
Save this job to the given jobStore as the root job of the workflow.
- Returns:
the JobDescription describing this job.
- Parameters:
- Return type:
- classmethod loadJob(job_store, job_description)¶
Retrieves a
toil.job.Jobinstance from a JobStore- Parameters:
job_store (toil.jobStores.abstractJobStore.AbstractJobStore) – The job store.
job_description (JobDescription) – the JobDescription of the job to retrieve.
- Returns:
The job referenced by the JobDescription.
- Return type:
- set_debug_flag(flag)¶
Enable the given debug option on the job.
- Parameters:
flag (str)
- Return type:
None
- has_debug_flag(flag)¶
Return true if the given debug flag is set.
- files_downloaded_hook(host_and_job_paths=None)¶
Function that subclasses can call when they have downloaded their input files.
Will abort the job if the “download_only” debug flag is set.
Can be hinted a list of file path pairs outside and inside the job container, in which case the container environment can be reconstructed.
- class toil.wdl.wdltoil.Promise(job, path)¶
References a return value from a method as a promise before the method itself is run.
References a return value from a
toil.job.Job.run()ortoil.job.Job.Service.start()method as a promise before the method itself is run.Let T be a job. Instances of
Promise(termed a promise) are returned by T.rv(), which is used to reference the return value of T’s run function. When the promise is passed to the constructor (or as an argument to a wrapped function) of a different, successor job the promise will be replaced by the actual referenced return value. This mechanism allows a return values from one job’s run method to be input argument to job before the former job’s run function has been executed.- Parameters:
job (Job)
path (Any)
- filesToDelete¶
A set of IDs of files containing promised values when we know we won’t need them anymore
- __reduce__()¶
Return the Promise class and construction arguments.
Called during pickling when a promise (an instance of this class) is about to be be pickled. Returns the Promise class and construction arguments that will be evaluated during unpickling, namely the job store coordinates of a file that will hold the promised return value. By the time the promise is about to be unpickled, that file should be populated.
- toil.wdl.wdltoil.Promised¶
- class toil.wdl.wdltoil.TemporaryID¶
Placeholder for a unregistered job ID used by a JobDescription.
- Needs to be held:
By JobDescription objects to record normal relationships.
By Jobs to key their connected-component registries and to record predecessor relationships to facilitate EncapsulatedJob adding itself as a child.
By Services to tie back to their hosting jobs, so the service tree can be built up from Service objects.
- toil.wdl.wdltoil.parse_accelerator(spec)¶
Parse an AcceleratorRequirement specified by user code.
Supports formats like:
>>> parse_accelerator(8) {'count': 8, 'kind': 'gpu'}
>>> parse_accelerator("1") {'count': 1, 'kind': 'gpu'}
>>> parse_accelerator("nvidia-tesla-k80") {'count': 1, 'kind': 'gpu', 'brand': 'nvidia', 'model': 'nvidia-tesla-k80'}
>>> parse_accelerator("nvidia-tesla-k80:2") {'count': 2, 'kind': 'gpu', 'brand': 'nvidia', 'model': 'nvidia-tesla-k80'}
>>> parse_accelerator("gpu") {'count': 1, 'kind': 'gpu'}
>>> parse_accelerator("cuda:1") {'count': 1, 'kind': 'gpu', 'brand': 'nvidia', 'api': 'cuda'}
>>> parse_accelerator({"kind": "gpu"}) {'count': 1, 'kind': 'gpu'}
>>> parse_accelerator({"brand": "nvidia", "count": 5}) {'count': 5, 'kind': 'gpu', 'brand': 'nvidia'}
Assumes that if not specified, we are talking about GPUs, and about one of them. Knows that “gpu” is a kind, and “cuda” is an API, and “nvidia” is a brand.
- Raises:
ValueError – if it gets something it can’t parse
TypeError – if it gets something it can’t parse because it’s the wrong type.
- Parameters:
- Return type:
- toil.wdl.wdltoil.unwrap(p)¶
Function for ensuring you actually have a promised value, and not just a promise. Mostly useful for satisfying type-checking.
The “unwrap” terminology is borrowed from Rust.
- Parameters:
p (Promised[T])
- Return type:
T
- toil.wdl.wdltoil.unwrap_all(p)¶
Function for ensuring you actually have a collection of promised values, and not any remaining promises. Mostly useful for satisfying type-checking.
The “unwrap” terminology is borrowed from Rust.
- Parameters:
p (Sequence[Promised[T]])
- Return type:
Sequence[T]
- class toil.wdl.wdltoil.AbstractJobStore(locator)¶
Bases:
abc.ABCRepresents the physical storage for the jobs and files in a Toil workflow.
JobStores are responsible for storing
toil.job.JobDescription(which relate jobs to each other) and files.Actual
toil.job.Jobobjects are stored in files, referenced by JobDescriptions. All the non-file CRUD methods the JobStore provides deal in JobDescriptions and not full, executable Jobs.To actually get ahold of a
toil.job.Job, usetoil.job.Job.loadJob()with a JobStore and the relevant JobDescription.- Parameters:
locator (str)
- initialize(config)¶
Initialize this job store.
Create the physical storage for this job store, allocate a workflow ID and persist the given Toil configuration to the store.
- Parameters:
config (toil.common.Config) – the Toil configuration to initialize this job store with. The given configuration will be updated with the newly allocated workflow ID.
- Raises:
JobStoreExistsException – if the physical storage for this job store already exists
- Return type:
None
- writeConfig()¶
- Return type:
None
- write_config()¶
Persists the value of the
AbstractJobStore.configattribute to the job store, so that it can be retrieved later by other instances of this class.- Return type:
None
- resume()¶
Connect this instance to the physical storage it represents and load the Toil configuration into the
AbstractJobStore.configattribute.- Raises:
NoSuchJobStoreException – if the physical storage for this job store doesn’t exist
- Return type:
None
- property config: toil.common.Config¶
Return the Toil configuration associated with this job store.
- Return type:
- property locator: str¶
Get the locator that defines the job store, which can be used to connect to it.
- Return type:
- rootJobStoreIDFileName = 'rootJobStoreID'¶
- setRootJob(rootJobStoreID)¶
Set the root job of the workflow backed by this job store.
- Parameters:
rootJobStoreID (toil.fileStores.FileID)
- Return type:
None
- set_root_job(job_id)¶
Set the root job of the workflow backed by this job store.
- Parameters:
job_id (toil.fileStores.FileID) – The ID of the job to set as root
- Return type:
None
- loadRootJob()¶
- Return type:
- load_root_job()¶
Loads the JobDescription for the root job in the current job store.
- Raises:
toil.job.JobException – If no root job is set or if the root job doesn’t exist in this job store
- Returns:
The root job.
- Return type:
- createRootJob(desc)¶
- Parameters:
desc (toil.job.JobDescription)
- Return type:
- create_root_job(job_description)¶
Create the given JobDescription and set it as the root job in this job store.
- Parameters:
job_description (toil.job.JobDescription) – JobDescription to save and make the root job.
- Return type:
- getRootJobReturnValue()¶
- Return type:
Any
- get_root_job_return_value()¶
Parse the return value from the root job.
Raises an exception if the root job hasn’t fulfilled its promise yet.
- Return type:
Any
- importFile(srcUrl: str, sharedFileName: str, hardlink: bool = False, symlink: bool = True) None¶
- importFile(srcUrl: str, sharedFileName: None = None, hardlink: bool = False, symlink: bool = True) toil.fileStores.FileID
- import_file(src_uri: str, shared_file_name: str, hardlink: bool = False, symlink: bool = True) None¶
- import_file(src_uri: str, shared_file_name: None = None, hardlink: bool = False, symlink: bool = True) toil.fileStores.FileID
Imports the file at the given URL into job store. The ID of the newly imported file is returned. If the name of a shared file name is provided, the file will be imported as such and None is returned. If an executable file on the local filesystem is uploaded, its executability will be preserved when it is downloaded.
Currently supported schemes are:
- ‘s3’ for objects in Amazon S3
e.g. s3://bucket/key
- ‘file’ for local files
- ‘http’
- ‘gs’
e.g. gs://bucket/file
Raises FileNotFoundError if the file does not exist.
- Parameters:
- Returns:
The jobStoreFileID of the imported file or None if shared_file_name was given
- Return type:
toil.fileStores.FileID or None
- exportFile(jobStoreFileID, dstUrl)¶
- Parameters:
jobStoreFileID (toil.fileStores.FileID)
dstUrl (str)
- Return type:
None
- export_file(file_id, dst_uri)¶
Exports file to destination pointed at by the destination URL. The exported file will be executable if and only if it was originally uploaded from an executable file on the local filesystem.
Refer to
AbstractJobStore.import_file()documentation for currently supported URL schemes.Note that the helper method _exportFile is used to read from the source and write to destination. To implement any optimizations that circumvent this, the _exportFile method should be overridden by subclasses of AbstractJobStore.
- classmethod url_exists(src_uri)¶
Return True if the file at the given URI exists, and False otherwise.
- classmethod get_size(src_uri)¶
Get the size in bytes of the file at the given URL, or None if it cannot be obtained.
- classmethod get_is_directory(src_uri)¶
Return True if the thing at the given URL is a directory, and False if it is a file. The URL may or may not end in ‘/’.
- classmethod list_url(src_uri)¶
List the directory at the given URL. Returned path components can be joined with ‘/’ onto the passed URL to form new URLs. Those that end in ‘/’ correspond to directories. The provided URL may or may not end with ‘/’.
Currently supported schemes are:
- ‘s3’ for objects in Amazon S3
e.g. s3://bucket/prefix/
- ‘file’ for local files
- classmethod read_from_url(src_uri, writable)¶
Read the given URL and write its content into the given writable stream.
Raises FileNotFoundError if the URL doesn’t exist.
- classmethod open_url(src_uri)¶
Read from the given URI.
Raises FileNotFoundError if the URL doesn’t exist.
Has a readable stream interface, unlike
read_from_url()which takes a writable stream.
- abstract destroy()¶
The inverse of
initialize(), this method deletes the physical storage represented by this instance. While not being atomic, this method is at least idempotent, as a means to counteract potential issues with eventual consistency exhibited by the underlying storage mechanisms. This means that if the method fails (raises an exception), it may (and should be) invoked again. If the underlying storage mechanism is eventually consistent, even a successful invocation is not an ironclad guarantee that the physical storage vanished completely and immediately. A successful invocation only guarantees that the deletion will eventually happen. It is therefore recommended to not immediately reuse the same job store location for a new Toil workflow.- Return type:
None
- get_env()¶
Returns a dictionary of environment variables that this job store requires to be set in order to function properly on a worker.
- clean(jobCache=None)¶
Function to cleanup the state of a job store after a restart.
Fixes jobs that might have been partially updated. Resets the try counts and removes jobs that are not successors of the current root job.
- Parameters:
jobCache (Optional[Dict[Union[str, toil.job.TemporaryID], toil.job.JobDescription]]) – if a value it must be a dict from job ID keys to JobDescription object values. Jobs will be loaded from the cache (which can be downloaded from the job store in a batch) instead of piecemeal when recursed into.
- Return type:
- assignID(jobDescription)¶
- Parameters:
jobDescription (toil.job.JobDescription)
- Return type:
None
- abstract assign_job_id(job_description)¶
Get a new jobStoreID to be used by the described job, and assigns it to the JobDescription.
Files associated with the assigned ID will be accepted even if the JobDescription has never been created or updated.
- Parameters:
job_description (toil.job.JobDescription) – The JobDescription to give an ID to
- Return type:
None
- batch()¶
If supported by the batch system, calls to create() with this context manager active will be performed in a batch after the context manager is released.
- Return type:
Iterator[None]
- create(jobDescription)¶
- Parameters:
jobDescription (toil.job.JobDescription)
- Return type:
- abstract create_job(job_description)¶
Writes the given JobDescription to the job store. The job must have an ID assigned already.
Must call jobDescription.pre_update_hook()
- Returns:
The JobDescription passed.
- Return type:
- Parameters:
job_description (toil.job.JobDescription)
- abstract job_exists(job_id)¶
Indicates whether a description of the job with the specified jobStoreID exists in the job store
- publicUrlExpiration¶
- abstract get_public_url(file_name)¶
Returns a publicly accessible URL to the given file in the job store. The returned URL may expire as early as 1h after its been returned. Throw an exception if the file does not exist.
- Parameters:
file_name (str) – the jobStoreFileID of the file to generate a URL for
- Raises:
NoSuchFileException – if the specified file does not exist in this job store
- Return type:
Differs from
getPublicUrl()in that this method is for generating URLs for shared files written bywriteSharedFileStream().Returns a publicly accessible URL to the given file in the job store. The returned URL starts with ‘http:’, ‘https:’ or ‘file:’. The returned URL may expire as early as 1h after its been returned. Throw an exception if the file does not exist.
- Parameters:
shared_file_name (str) – The name of the shared file to generate a publically accessible url for.
- Raises:
NoSuchFileException – raised if the specified file does not exist in the store
- Return type:
- abstract load_job(job_id)¶
Loads the description of the job referenced by the given ID, assigns it the job store’s config, and returns it.
May declare the job to have failed (see
toil.job.JobDescription.setupJobAfterFailure()) if there is evidence of a failed update attempt.- Parameters:
job_id (str) – the ID of the job to load
- Raises:
NoSuchJobException – if there is no job with the given ID
- Return type:
- update(jobDescription)¶
- Parameters:
jobDescription (toil.job.JobDescription)
- Return type:
None
- abstract update_job(job_description)¶
Persists changes to the state of the given JobDescription in this store atomically.
Must call jobDescription.pre_update_hook()
- Parameters:
job (toil.job.JobDescription) – the job to write to this job store
job_description (toil.job.JobDescription)
- Return type:
None
- abstract delete_job(job_id)¶
Removes the JobDescription from the store atomically. You may not then subsequently call load(), write(), update(), etc. with the same jobStoreID or any JobDescription bearing it.
This operation is idempotent, i.e. deleting a job twice or deleting a non-existent job will succeed silently.
- Parameters:
job_id (str) – the ID of the job to delete from this job store
- Return type:
None
- abstract jobs()¶
Best effort attempt to return iterator on JobDescriptions for all jobs in the store. The iterator may not return all jobs and may also contain orphaned jobs that have already finished successfully and should not be rerun. To guarantee you get any and all jobs that can be run instead construct a more expensive ToilState object
- Returns:
Returns iterator on jobs in the store. The iterator may or may not contain all jobs and may contain invalid jobs
- Return type:
Iterator[toil.job.jobDescription]
- writeFile(localFilePath, jobStoreID=None, cleanup=False)¶
- abstract write_file(local_path, job_id=None, cleanup=False)¶
Takes a file (as a path) and places it in this job store. Returns an ID that can be used to retrieve the file at a later time. The file is written in a atomic manner. It will not appear in the jobStore until the write has successfully completed.
- Parameters:
local_path (str) – the path to the local file that will be uploaded to the job store. The last path component (basename of the file) will remain associated with the file in the file store, if supported, so that the file can be searched for by name or name glob.
job_id (str) – the id of a job, or None. If specified, the may be associated with that job in a job-store-specific way. This may influence the returned ID.
cleanup (bool) – Whether to attempt to delete the file when the job whose jobStoreID was given as jobStoreID is deleted with jobStore.delete(job). If jobStoreID was not given, does nothing.
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
NoSuchJobException – if the job specified via jobStoreID does not exist
- Return type:
FIXME: some implementations may not raise this
- writeFileStream(jobStoreID=None, cleanup=False, basename=None, encoding=None, errors=None)¶
- abstract write_file_stream(job_id=None, cleanup=False, basename=None, encoding=None, errors=None)¶
Similar to writeFile, but returns a context manager yielding a tuple of 1) a file handle which can be written to and 2) the ID of the resulting file in the job store. The yielded file handle does not need to and should not be closed explicitly. The file is written in a atomic manner. It will not appear in the jobStore until the write has successfully completed.
- Parameters:
job_id (str) – the id of a job, or None. If specified, the may be associated with that job in a job-store-specific way. This may influence the returned ID.
cleanup (bool) – Whether to attempt to delete the file when the job whose jobStoreID was given as jobStoreID is deleted with jobStore.delete(job). If jobStoreID was not given, does nothing.
basename (str) – If supported by the implementation, use the given file basename so that when searching the job store with a query matching that basename, the file will be detected.
encoding (str) – the name of the encoding used to encode the file. Encodings are the same as for encode(). Defaults to None which represents binary mode.
errors (str) – an optional string that specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
NoSuchJobException – if the job specified via jobStoreID does not exist
- Return type:
FIXME: some implementations may not raise this
- Returns:
a context manager yielding a file handle which can be written to and an ID that references the newly created file and can be used to read the file in the future.
- Return type:
- Parameters:
- getEmptyFileStoreID(jobStoreID=None, cleanup=False, basename=None)¶
- abstract get_empty_file_store_id(job_id=None, cleanup=False, basename=None)¶
Creates an empty file in the job store and returns its ID. Call to fileExists(getEmptyFileStoreID(jobStoreID)) will return True.
- Parameters:
job_id (str) – the id of a job, or None. If specified, the may be associated with that job in a job-store-specific way. This may influence the returned ID.
cleanup (bool) – Whether to attempt to delete the file when the job whose jobStoreID was given as jobStoreID is deleted with jobStore.delete(job). If jobStoreID was not given, does nothing.
basename (str) – If supported by the implementation, use the given file basename so that when searching the job store with a query matching that basename, the file will be detected.
- Returns:
a jobStoreFileID that references the newly created file and can be used to reference the file in the future.
- Return type:
- readFile(jobStoreFileID, localFilePath, symlink=False)¶
- abstract read_file(file_id, local_path, symlink=False)¶
Copies or hard links the file referenced by jobStoreFileID to the given local file path. The version will be consistent with the last copy of the file written/updated. If the file in the job store is later modified via updateFile or updateFileStream, it is implementation-defined whether those writes will be visible at localFilePath. The file is copied in an atomic manner. It will not appear in the local file system until the copy has completed.
The file at the given local path may not be modified after this method returns!
Note! Implementations of readFile need to respect/provide the executable attribute on FileIDs.
- Parameters:
file_id (str) – ID of the file to be copied
local_path (str) – the local path indicating where to place the contents of the given file in the job store
symlink (bool) – whether the reader can tolerate a symlink. If set to true, the job store may create a symlink instead of a full copy of the file or a hard link.
- Return type:
None
- readFileStream(jobStoreFileID, encoding=None, errors=None)¶
- read_file_stream(file_id: toil.fileStores.FileID | str, encoding: Literal[None] = None, errors: str | None = None) ContextManager[IO[bytes]]¶
- read_file_stream(file_id: toil.fileStores.FileID | str, encoding: str, errors: str | None = None) ContextManager[IO[str]]
Similar to readFile, but returns a context manager yielding a file handle which can be read from. The yielded file handle does not need to and should not be closed explicitly.
- Parameters:
file_id (str) – ID of the file to get a readable file handle for
encoding (str) – the name of the encoding used to decode the file. Encodings are the same as for decode(). Defaults to None which represents binary mode.
errors (str) – an optional string that specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
- Returns:
a context manager yielding a file handle which can be read from
- Return type:
- abstract delete_file(file_id)¶
Deletes the file with the given ID from this job store. This operation is idempotent, i.e. deleting a file twice or deleting a non-existent file will succeed silently.
- Parameters:
file_id (str) – ID of the file to delete
- Return type:
None
- fileExists(jobStoreFileID)¶
Determine whether a file exists in this job store.
- abstract file_exists(file_id)¶
Determine whether a file exists in this job store.
- getFileSize(jobStoreFileID)¶
Get the size of the given file in bytes.
- abstract get_file_size(file_id)¶
Get the size of the given file in bytes, or 0 if it does not exist when queried.
Note that job stores which encrypt files might return overestimates of file sizes, since the encrypted file may have been padded to the nearest block, augmented with an initialization vector, etc.
- updateFile(jobStoreFileID, localFilePath)¶
Replaces the existing version of a file in the job store.
- abstract update_file(file_id, local_path)¶
Replaces the existing version of a file in the job store.
Throws an exception if the file does not exist.
- Parameters:
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
NoSuchFileException – if the specified file does not exist
- Return type:
None
- updateFileStream(jobStoreFileID, encoding=None, errors=None)¶
- abstract update_file_stream(file_id, encoding=None, errors=None)¶
Replaces the existing version of a file in the job store. Similar to writeFile, but returns a context manager yielding a file handle which can be written to. The yielded file handle does not need to and should not be closed explicitly.
- Parameters:
file_id (str) – the ID of the file in the job store to be updated
encoding (str) – the name of the encoding used to encode the file. Encodings are the same as for encode(). Defaults to None which represents binary mode.
errors (str) – an optional string that specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
NoSuchFileException – if the specified file does not exist
- Return type:
Iterator[IO[Any]]
Returns a context manager yielding a writable file handle to the global file referenced by the given name. File will be created in an atomic manner.
- Parameters:
shared_file_name (str) – A file name matching AbstractJobStore.fileNameRegex, unique within this job store
encrypted (bool) – True if the file must be encrypted, None if it may be encrypted or False if it must be stored in the clear.
encoding (str) – the name of the encoding used to encode the file. Encodings are the same as for encode(). Defaults to None which represents binary mode.
errors (str) – an optional string that specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
- Returns:
a context manager yielding a writable file handle
- Return type:
Iterator[IO[bytes]]
Returns a context manager yielding a readable file handle to the global file referenced by the given name.
- Parameters:
shared_file_name (str) – A file name matching AbstractJobStore.fileNameRegex, unique within this job store
encoding (str) – the name of the encoding used to decode the file. Encodings are the same as for decode(). Defaults to None which represents binary mode.
errors (str) – an optional string that specifies how encoding errors are to be handled. Errors are the same as for open(). Defaults to ‘strict’ when an encoding is specified.
- Returns:
a context manager yielding a readable file handle
- Return type:
Iterator[IO[bytes]]
- writeStatsAndLogging(statsAndLoggingString)¶
- Parameters:
statsAndLoggingString (str)
- Return type:
None
- abstract write_logs(msg)¶
Stores a message as a log in the jobstore.
- Parameters:
msg (str) – the string to be written
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
- Return type:
None
- readStatsAndLogging(callback, readAll=False)¶
- abstract read_logs(callback, read_all=False)¶
Reads logs accumulated by the write_logs() method. For each log this method calls the given callback function with the message as an argument (rather than returning logs directly, this method must be supplied with a callback which will process log messages).
Only unread logs will be read unless the read_all parameter is set.
- Parameters:
callback (Callable) – a function to be applied to each of the stats file handles found
read_all (bool) – a boolean indicating whether to read the already processed stats files in addition to the unread stats files
- Raises:
ConcurrentFileModificationException – if the file was modified concurrently during an invocation of this method
- Returns:
the number of stats files processed
- Return type:
- write_leader_pid()¶
Write the pid of this process to a file in the job store.
Overwriting the current contents of pid.log is a feature, not a bug of this method. Other methods will rely on always having the most current pid available. So far there is no reason to store any old pids.
- Return type:
None
- read_leader_pid()¶
Read the pid of the leader process to a file in the job store.
- Raises:
NoSuchFileException – If the PID file doesn’t exist.
- Return type:
- write_leader_node_id()¶
Write the leader node id to the job store. This should only be called by the leader.
- Return type:
None
- read_leader_node_id()¶
Read the leader node id stored in the job store.
- Raises:
NoSuchFileException – If the node ID file doesn’t exist.
- Return type:
- write_kill_flag(kill=False)¶
Write a file inside the job store that serves as a kill flag.
The initialized file contains the characters “NO”. This should only be changed when the user runs the “toil kill” command.
Changing this file to a “YES” triggers a kill of the leader process. The workers are expected to be cleaned up by the leader.
- Parameters:
kill (bool)
- Return type:
None
- read_kill_flag()¶
Read the kill flag from the job store, and return True if the leader has been killed. False otherwise.
- Return type:
- default_caching()¶
Jobstore’s preference as to whether it likes caching or doesn’t care about it. Some jobstores benefit from caching, however on some local configurations it can be flaky.
see https://github.com/DataBiosphere/toil/issues/4218
- Return type:
- exception toil.wdl.wdltoil.UnimplementedURLException(url, operation)¶
Bases:
RuntimeErrorUnspecified run-time error.
- Parameters:
url (urllib.parse.ParseResult)
operation (str)
- exception toil.wdl.wdltoil.InvalidImportExportUrlException(url)¶
Bases:
ExceptionCommon base class for all non-exit exceptions.
- Parameters:
url (urllib.parse.ParseResult)
- exception toil.wdl.wdltoil.LocatorException(error_msg, locator, prefix=None)¶
Bases:
ExceptionBase exception class for all locator exceptions. For example, job store/aws bucket exceptions where they already exist
- toil.wdl.wdltoil.convert_units(num, src_unit, dst_unit='B')¶
Returns a float representing the converted input in dst_units.
- toil.wdl.wdltoil.human2bytes(string)¶
Given a string representation of some memory (i.e. ‘1024 Mib’), return the integer number of bytes.
- toil.wdl.wdltoil.strtobool(val)¶
Make a human-readable string into a bool.
Convert a string along the lines of “y”, “1”, “ON”, “TrUe”, or “Yes” to True, and the corresponding false-ish values to False.
- toil.wdl.wdltoil.mkdtemp(suffix=None, prefix=None, dir=None)¶
Make a temporary directory like tempfile.mkdtemp, but with relaxed permissions.
The permissions on the directory will be 711 instead of 700, allowing the group and all other users to traverse the directory. This is necessary if the directory is on NFS and the Docker daemon would like to mount it or a file inside it into a container, because on NFS even the Docker daemon appears bound by the file permissions.
See <https://github.com/DataBiosphere/toil/issues/4644>, and <https://stackoverflow.com/a/67928880> which talks about a similar problem but in the context of user namespaces.
- toil.wdl.wdltoil.memoize¶
Memoize a function result based on its parameters using this decorator.
For example, this can be used in place of lazy initialization. If the decorating function is invoked by multiple threads, the decorated function may be called more than once with the same arguments.
- toil.wdl.wdltoil.get_user_name()¶
Get the current user name, or a suitable substitute string if the user name is not available.
- Return type:
- class toil.wdl.wdltoil.ResourceMonitor¶
Global resource monitoring widget.
Presents class methods to get the resource usage of this process and child processes, and other class methods to adjust the statistics so they can account for e.g. resources used inside containers, or other resource usage that should be billable to the current process.
- classmethod record_extra_memory(peak_ki)¶
Become responsible for the given peak memory usage, in kibibytes.
The memory will be treated as if it was used by a child process at the time our real child processes were also using their peak memory.
- Parameters:
peak_ki (int)
- Return type:
None
- classmethod record_extra_cpu(seconds)¶
Become responsible for the given CPU time.
The CPU time will be treated as if it had been used by a child process.
- Parameters:
seconds (float)
- Return type:
None
- classmethod get_total_cpu_time_and_memory_usage()¶
Gives the total cpu time of itself and all its children, and the maximum RSS memory usage of itself and its single largest child (in kibibytes).
- toil.wdl.wdltoil.global_mutex(base_dir, mutex)¶
Context manager that locks a mutex. The mutex is identified by the given name, and scoped to the given directory. Works across all containers that have access to the given diectory. Mutexes held by dead processes are automatically released.
Only works between processes, NOT between threads.
- exception toil.wdl.wdltoil.JobTooBigError(job=None, shape=None, constraints=None)¶
Bases:
ExceptionRaised in the scaler thread when a job cannot fit in any available node type and is likely to lock up the workflow.
- Parameters:
job (Optional[toil.job.JobDescription])
shape (Optional[toil.provisioners.abstractProvisioner.Shape])
constraints (Optional[List[FailedConstraint]])
- toil.wdl.wdltoil.logger¶
- toil.wdl.wdltoil.wdl_error_reporter(task, exit=False, log=logger.critical)¶
Run code in a context where WDL errors will be reported with pretty formatting.
- toil.wdl.wdltoil.F¶
- toil.wdl.wdltoil.report_wdl_errors(task, exit=False, log=logger.critical)¶
Create a decorator to report WDL errors with the given task message.
Decorator can then be applied to a function, and if a WDL error happens it will say that it could not {task}.
- toil.wdl.wdltoil.potential_absolute_uris(uri, path, importer=None)¶
Get potential absolute URIs to check for an imported file.
Given a URI or bare path, yield in turn all the URIs, with schemes, where we should actually try to find it, given that we want to search under/against the given paths or URIs, the current directory, and the given importing WDL document if any.
- async toil.wdl.wdltoil.toil_read_source(uri, path, importer)¶
Implementation of a MiniWDL read_source function that can use any filename or URL supported by Toil.
Needs to be async because MiniWDL will await its result.
- toil.wdl.wdltoil.WDLBindings¶
- toil.wdl.wdltoil.combine_bindings(all_bindings)¶
Combine variable bindings from multiple predecessor tasks into one set for the current task.
- Parameters:
all_bindings (Sequence[WDLBindings])
- Return type:
WDLBindings
- toil.wdl.wdltoil.log_bindings(log_function, message, all_bindings)¶
Log bindings to the console, even if some are still promises.
- Parameters:
log_function (Callable[Ellipsis, None]) – Function (like logger.info) to call to log data
message (str) – Message to log before the bindings
all_bindings (Sequence[toil.job.Promised[WDLBindings]]) – A list of bindings or promises for bindings, to log
- Return type:
None
- toil.wdl.wdltoil.get_supertype(types)¶
Get the supertype that can hold values of all the given types.
- Parameters:
types (Sequence[Optional[WDL.Type.Base]])
- Return type:
WDL.Type.Base
- toil.wdl.wdltoil.for_each_node(root)¶
Iterate over all WDL workflow nodes in the given node, including inputs, internal nodes of conditionals and scatters, and gather nodes.
- Parameters:
root (WDL.Tree.WorkflowNode)
- Return type:
Iterator[WDL.Tree.WorkflowNode]
- toil.wdl.wdltoil.recursive_dependencies(root)¶
Get the combined workflow_node_dependencies of root and everything under it, which are not on anything in that subtree.
Useful because section nodes can have internal nodes with dependencies not reflected in those of the section node itself.
- Parameters:
root (WDL.Tree.WorkflowNode)
- Return type:
Set[str]
- toil.wdl.wdltoil.TOIL_URI_SCHEME = 'toilfile:'¶
- toil.wdl.wdltoil.pack_toil_uri(file_id, dir_id, file_basename)¶
Encode a Toil file ID and its source path in a URI that starts with the scheme in TOIL_URI_SCHEME.
- Parameters:
file_id (toil.fileStores.FileID)
dir_id (uuid.UUID)
file_basename (str)
- Return type:
- toil.wdl.wdltoil.unpack_toil_uri(toil_uri)¶
Unpack a URI made by make_toil_uri to retrieve the FileID and the basename (no path prefix) that the file is supposed to have.
- Parameters:
toil_uri (str)
- Return type:
Tuple[toil.fileStores.FileID, str, str]
- toil.wdl.wdltoil.evaluate_output_decls(output_decls, all_bindings, standard_library)¶
Evaluate output decls with a given bindings environment and standard library. Creates a new bindings object that only contains the bindings from the given decls. Guarantees that each decl in output_decls can access the variables defined by the previous ones. :param all_bindings: Environment to use when evaluating decls :param output_decls: Decls to evaluate :param standard_library: Standard library :return: New bindings object with only the output_decls
- Parameters:
output_decls (List[WDL.Tree.Decl])
all_bindings (WDL.Env.Bindings[WDL.Value.Base])
standard_library (WDL.StdLib.Base)
- Return type:
WDL.Env.Bindings[WDL.Value.Base]
- class toil.wdl.wdltoil.NonDownloadingSize¶
Bases:
WDL.StdLib._SizeWDL size() implementation that avoids downloading files.
MiniWDL’s default size() implementation downloads the whole file to get its size. We want to be able to get file sizes from code running on the leader, where there may not be space to download the whole file. So we override the fancy class that implements it so that we can handle sizes for FileIDs using the FileID’s stored size info.
- toil.wdl.wdltoil.is_url(filename, schemes=['http:', 'https:', 's3:', 'gs:', TOIL_URI_SCHEME])¶
Decide if a filename is a known kind of URL
- class toil.wdl.wdltoil.ToilWDLStdLibBase(file_store, execution_dir=None)¶
Bases:
WDL.StdLib.BaseStandard library implementation for WDL as run on Toil.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
execution_dir (Optional[str])
Share caches for devirtualizing and virtualizing files with another instance.
Files devirtualized by one instance can be re-virtualized back to their original virtualized filenames by the other.
- Parameters:
other (ToilWDLStdLibBase)
- Return type:
None
- static devirtualize_to(filename, dest_dir, file_source, execution_dir)¶
Download or export a WDL virtualized filename/URL to the given directory.
The destination directory must already exist.
Makes sure sibling files stay siblings and files with the same name don’t clobber each other. Called from within this class for tasks, and statically at the end of the workflow for outputs.
Returns the local path to the file. If it already had a local path elsewhere, it might not actually be put in dest_dir.
- Parameters:
filename (str)
dest_dir (str)
file_source (Union[toil.fileStores.abstractFileStore.AbstractFileStore, toil.common.Toil])
execution_dir (Optional[str])
- Return type:
- class toil.wdl.wdltoil.ToilWDLStdLibTaskCommand(file_store, container)¶
Bases:
ToilWDLStdLibBaseStandard library implementation to use inside a WDL task command evaluation.
Expects all the filenames in variable bindings to be container-side paths; these are the “virtualized” filenames, while the “devirtualized” filenames are host-side paths.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
container (WDL.runtime.task_container.TaskContainer)
- class toil.wdl.wdltoil.ToilWDLStdLibTaskOutputs(file_store, stdout_path, stderr_path, file_to_mountpoint, current_directory_override=None)¶
Bases:
ToilWDLStdLibBase,WDL.StdLib.TaskOutputsStandard library implementation for WDL as run on Toil, with additional functions only allowed in task output sections.
- Parameters:
- toil.wdl.wdltoil.evaluate_named_expression(context, name, expected_type, expression, environment, stdlib)¶
Evaluate an expression when we know the name of it.
- Parameters:
context (Union[WDL.Error.SourceNode, WDL.Error.SourcePosition])
name (str)
expected_type (Optional[WDL.Type.Base])
expression (Optional[WDL.Expr.Base])
environment (WDLBindings)
stdlib (WDL.StdLib.Base)
- Return type:
WDL.Value.Base
- toil.wdl.wdltoil.evaluate_decl(node, environment, stdlib)¶
Evaluate the expression of a declaration node, or raise an error.
- Parameters:
node (WDL.Tree.Decl)
environment (WDLBindings)
stdlib (WDL.StdLib.Base)
- Return type:
WDL.Value.Base
- toil.wdl.wdltoil.evaluate_call_inputs(context, expressions, environment, stdlib, inputs_dict=None)¶
Evaluate a bunch of expressions with names, and make them into a fresh set of bindings. inputs_dict is a mapping of variable names to their expected type for the input decls in a task.
- toil.wdl.wdltoil.evaluate_defaultable_decl(node, environment, stdlib)¶
If the name of the declaration is already defined in the environment, return its value. Otherwise, return the evaluated expression.
- Parameters:
node (WDL.Tree.Decl)
environment (WDLBindings)
stdlib (WDL.StdLib.Base)
- Return type:
WDL.Value.Base
- toil.wdl.wdltoil.devirtualize_files(environment, stdlib)¶
Make sure all the File values embedded in the given bindings point to files that are actually available to command line commands. The same virtual file always maps to the same devirtualized filename even with duplicates
- Parameters:
environment (WDLBindings)
stdlib (WDL.StdLib.Base)
- Return type:
WDLBindings
- toil.wdl.wdltoil.virtualize_files(environment, stdlib)¶
Make sure all the File values embedded in the given bindings point to files that are usable from other machines.
- Parameters:
environment (WDLBindings)
stdlib (WDL.StdLib.Base)
- Return type:
WDLBindings
- toil.wdl.wdltoil.add_paths(task_container, host_paths)¶
Based off of WDL.runtime.task_container.add_paths from miniwdl Maps the host path to the container paths
- Parameters:
task_container (WDL.runtime.task_container.TaskContainer)
host_paths (Iterable[str])
- Return type:
None
- toil.wdl.wdltoil.import_files(environment, toil, path=None, skip_remote=False)¶
Make sure all File values embedded in the given bindings are imported, using the given Toil object.
- Parameters:
path (Optional[List[str]]) – If set, try resolving input location relative to the URLs or directories in this list.
skip_remote (bool) – If set, don’t try to import files from remote locations. Leave them as URIs.
environment (WDLBindings)
toil (toil.common.Toil)
- Return type:
WDLBindings
- toil.wdl.wdltoil.drop_missing_files(environment, current_directory_override=None)¶
Make sure all the File values embedded in the given bindings point to files that exist, or are null.
Files must not be virtualized.
- Parameters:
environment (WDLBindings)
current_directory_override (Optional[str])
- Return type:
WDLBindings
- toil.wdl.wdltoil.get_file_paths_in_bindings(environment)¶
Get the paths of all files in the bindings. Doesn’t guarantee that duplicates are removed.
TODO: Duplicative with WDL.runtime.task._fspaths, except that is internal and supports Directory objects.
- Parameters:
environment (WDLBindings)
- Return type:
List[str]
- toil.wdl.wdltoil.map_over_typed_files_in_bindings(environment, transform)¶
Run all File values embedded in the given bindings through the given transformation function.
TODO: Replace with WDL.Value.rewrite_env_paths or WDL.Value.rewrite_files
- toil.wdl.wdltoil.map_over_files_in_bindings(bindings, transform)¶
Run all File values’ types and values embedded in the given bindings through the given transformation function.
TODO: Replace with WDL.Value.rewrite_env_paths or WDL.Value.rewrite_files
- toil.wdl.wdltoil.map_over_typed_files_in_binding(binding, transform)¶
Run all File values’ types and values embedded in the given binding’s value through the given transformation function.
- toil.wdl.wdltoil.map_over_typed_files_in_value(value, transform)¶
Run all File values embedded in the given value through the given transformation function.
If the transform returns None, the file value is changed to Null.
The transform has access to the type information for the value, so it knows if it may return None, depending on if the value is optional or not.
The transform is allowed to return None only if the mapping result won’t actually be used, to allow for scans. So error checking needs to be part of the transform itself.
- class toil.wdl.wdltoil.WDLBaseJob(wdl_options=None, **kwargs)¶
Bases:
toil.job.JobBase job class for all WDL-related jobs.
Responsible for post-processing returned bindings, to do things like add in null values for things not defined in a section. Post-processing operations can be added onto any job before it is saved, and will be applied as long as the job’s run method calls postprocess().
Also responsible for remembering the Toil WDL configuration keys and values.
- run(file_store)¶
Run a WDL-related job.
Remember to decorate non-trivial overrides with
report_wdl_errors().- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
Any
- then_underlay(underlay)¶
Apply an underlay of backup bindings to the result.
- Parameters:
underlay (toil.job.Promised[WDLBindings])
- Return type:
None
- then_remove(remove)¶
Remove the given bindings from the result.
- Parameters:
remove (toil.job.Promised[WDLBindings])
- Return type:
None
- then_namespace(namespace)¶
Put the result bindings into a namespace.
- Parameters:
namespace (str)
- Return type:
None
- then_overlay(overlay)¶
Overlay the given bindings on top of the (possibly namespaced) result.
- Parameters:
overlay (toil.job.Promised[WDLBindings])
- Return type:
None
- postprocess(bindings)¶
Apply queued changes to bindings.
Should be applied by subclasses’ run() implementations to their return values.
- Parameters:
bindings (WDLBindings)
- Return type:
WDLBindings
- defer_postprocessing(other)¶
Give our postprocessing steps to a different job.
Use this when you are returning a promise for bindings, on the job that issues the promise.
- Parameters:
other (WDLBaseJob)
- Return type:
None
- class toil.wdl.wdltoil.WDLTaskWrapperJob(task, prev_node_results, task_id, namespace, task_path, **kwargs)¶
Bases:
WDLBaseJobJob that determines the resources needed to run a WDL job.
Responsible for evaluating the input declarations for unspecified inputs, evaluating the runtime section, and scheduling or chaining to the real WDL job.
All bindings are in terms of task-internal names.
- Parameters:
- run(file_store)¶
Evaluate inputs and runtime and schedule the task.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLTaskJob(task, task_internal_bindings, runtime_bindings, task_id, namespace, task_path, **kwargs)¶
Bases:
WDLBaseJobJob that runs a WDL task.
Responsible for re-evaluating input declarations for unspecified inputs, evaluating the runtime section, re-scheduling if resources are not available, running any command, and evaluating the outputs.
All bindings are in terms of task-internal names.
- Parameters:
- INJECTED_MESSAGE_DIR = '.toil_wdl_runtime'¶
- add_injections(command_string, task_container)¶
Inject extra Bash code from the Toil WDL runtime into the command for the container.
Currently doesn’t implement the MiniWDL plugin system, but does add resource usage monitoring to Docker containers.
- handle_injection_messages(outputs_library)¶
Handle any data received from injected runtime code in the container.
- Parameters:
outputs_library (ToilWDLStdLibTaskOutputs)
- Return type:
None
- handle_message_file(file_path)¶
Handle a message file received from in-container injected code.
Takes the host-side path of the file.
- Parameters:
file_path (str)
- Return type:
None
- can_mount_proc()¶
Determine if –containall will work for Singularity. On Kubernetes, this will result in operation not permitted See: https://github.com/apptainer/singularity/issues/5857
So if Kubernetes is detected, return False :return: bool
- Return type:
- run(file_store)¶
Actually run the task.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLWorkflowNodeJob(node, prev_node_results, namespace, task_path, wdl_options=None, **kwargs)¶
Bases:
WDLBaseJobJob that evaluates a WDL workflow node.
- Parameters:
- run(file_store)¶
Actually execute the workflow node.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLWorkflowNodeListJob(nodes, prev_node_results, namespace, wdl_options=None, **kwargs)¶
Bases:
WDLBaseJobJob that evaluates a list of WDL workflow nodes, which are in the same scope and in a topological dependency order, and which do not call out to any other workflows or tasks or sections.
- Parameters:
- run(file_store)¶
Actually execute the workflow nodes.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLCombineBindingsJob(prev_node_results, **kwargs)¶
Bases:
WDLBaseJobJob that collects the results from WDL workflow nodes and combines their environment changes.
- Parameters:
prev_node_results (Sequence[toil.job.Promised[WDLBindings]])
kwargs (Any)
- run(file_store)¶
Aggregate incoming results.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
WDLBindings
- class toil.wdl.wdltoil.WDLWorkflowGraph(nodes)¶
Represents a graph of WDL WorkflowNodes.
Operates at a certain level of instantiation (i.e. sub-sections are represented by single nodes).
Assumes all relevant nodes are provided; dependencies outside the provided nodes are assumed to be satisfied already.
- Parameters:
nodes (Sequence[WDL.Tree.WorkflowNode])
- real_id(node_id)¶
Map multiple IDs for what we consider the same node to one ID.
This elides/resolves gathers.
- is_decl(node_id)¶
Return True if a node represents a WDL declaration, and false otherwise.
- get_dependencies(node_id)¶
Get all the nodes that a node depends on, recursively (into the node if it has a body) but not transitively.
Produces dependencies after resolving gathers and internal-to-section dependencies, on nodes that are also in this graph.
- get_transitive_dependencies(node_id)¶
Get all the nodes that a node depends on, transitively.
- class toil.wdl.wdltoil.WDLSectionJob(namespace, task_path, wdl_options=None, **kwargs)¶
Bases:
WDLBaseJobJob that can create more graph for a section of the wrokflow.
- static coalesce_nodes(order, section_graph)¶
Given a topological order of WDL workflow node IDs, produce a list of lists of IDs, still in topological order, where each list of IDs can be run under a single Toil job.
- Parameters:
order (List[str])
section_graph (WDLWorkflowGraph)
- Return type:
List[List[str]]
- create_subgraph(nodes, gather_nodes, environment, local_environment=None, subscript=None)¶
Make a Toil job to evaluate a subgraph inside a workflow or workflow section.
- Returns:
a child Job that will return the aggregated environment after running all the things in the section.
- Parameters:
gather_nodes (Sequence[WDL.Tree.Gather]) – Names exposed by these will always be defined with something, even if the code that defines them does not actually run.
environment (WDLBindings) – Bindings in this environment will be used to evaluate the subgraph and will be passed through.
local_environment (Optional[WDLBindings]) – Bindings in this environment will be used to evaluate the subgraph but will go out of scope at the end of the section.
subscript (Optional[int]) – If the subgraph is being evaluated multiple times, this should be a disambiguating integer for logging.
nodes (Sequence[WDL.Tree.WorkflowNode])
- Return type:
- make_gather_bindings(gathers, undefined)¶
Given a collection of Gathers, create bindings from every identifier gathered, to the given “undefined” placeholder (which would be Null for a single execution of the body, or an empty array for a completely unexecuted scatter).
These bindings can be overlaid with bindings from the actual execution, so that references to names defined in unexecuted code get a proper default undefined value, and not a KeyError at runtime.
The information to do this comes from MiniWDL’s “gathers” system: <https://miniwdl.readthedocs.io/en/latest/WDL.html#WDL.Tree.WorkflowSection.gathers>
TODO: This approach will scale O(n^2) when run on n nested conditionals, because generating these bindings for the outer conditional will visit all the bindings from the inner ones.
- Parameters:
gathers (Sequence[WDL.Tree.Gather])
undefined (WDL.Value.Base)
- Return type:
WDLBindings
- class toil.wdl.wdltoil.WDLScatterJob(scatter, prev_node_results, namespace, task_path, wdl_options=None, **kwargs)¶
Bases:
WDLSectionJobJob that evaluates a scatter in a WDL workflow. Runs the body for each value in an array, and makes arrays of the new bindings created in each instance of the body. If an instance of the body doesn’t create a binding, it gets a null value in the corresponding array.
- Parameters:
- run(file_store)¶
Run the scatter.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLArrayBindingsJob(input_bindings, base_bindings, **kwargs)¶
Bases:
WDLBaseJobJob that takes all new bindings created in an array of input environments, relative to a base environment, and produces bindings where each new binding name is bound to an array of the values in all the input environments.
Useful for producing the results of a scatter.
- Parameters:
input_bindings (Sequence[toil.job.Promised[WDLBindings]])
base_bindings (WDLBindings)
kwargs (Any)
- run(file_store)¶
Actually produce the array-ified bindings now that promised values are available.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
WDLBindings
- class toil.wdl.wdltoil.WDLConditionalJob(conditional, prev_node_results, namespace, task_path, wdl_options=None, **kwargs)¶
Bases:
WDLSectionJobJob that evaluates a conditional in a WDL workflow.
- Parameters:
- run(file_store)¶
Run the conditional.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLWorkflowJob(workflow, prev_node_results, workflow_id, namespace, task_path, wdl_options=None, **kwargs)¶
Bases:
WDLSectionJobJob that evaluates an entire WDL workflow.
- Parameters:
- run(file_store)¶
Run the workflow. Return the result of the workflow.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- class toil.wdl.wdltoil.WDLOutputsJob(workflow, bindings, wdl_options=None, **kwargs)¶
Bases:
WDLBaseJobJob which evaluates an outputs section (such as for a workflow).
Returns an environment with just the outputs bound, in no namespace.
- Parameters:
- run(file_store)¶
Make bindings for the outputs.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
WDLBindings
- class toil.wdl.wdltoil.WDLRootJob(workflow, inputs, wdl_options=None, **kwargs)¶
Bases:
WDLSectionJobJob that evaluates an entire WDL workflow, and returns the workflow outputs namespaced with the workflow name. Inputs may or may not be namespaced with the workflow name; both forms are accepted.
- Parameters:
- run(file_store)¶
Actually build the subgraph.
- Parameters:
file_store (toil.fileStores.abstractFileStore.AbstractFileStore)
- Return type:
toil.job.Promised[WDLBindings]
- toil.wdl.wdltoil.monkeypatch_coerce(standard_library)¶
Monkeypatch miniwdl’s WDL.Value.Base.coerce() function to virtualize files when they are represented as Strings. Calls _virtualize_filename from a given standard library object. :param standard_library: a standard library object :return
- Parameters:
standard_library (ToilWDLStdLibBase)
- Return type:
Generator[None, None, None]
- toil.wdl.wdltoil.main()¶
A Toil workflow to interpret WDL input files.
- Return type:
None