# cwltool.command_line_tool

Implementation of CommandLineTool.

## Attributes

`OutputPortsType` |

## Exceptions

`ParameterOutputWorkflowException` | Common base class for all non-exit exceptions.

## Classes

`PathCheckingMode` | What characters are allowed in path names.
`ExpressionJob` | Job for `ExpressionTool`.
`ExpressionTool` | Abstract CWL Process.
`AbstractOperation` | Abstract CWL Process.
`CallbackJob` | Callback Job class, used by `CommandLineTool.job()`.
`CommandLineTool` | Abstract CWL Process.

## Functions

`remove_path`(f) | Remove any 'path' property, if present.
`revmap_file`(builder, outdir, f) | Remap a file from internal path to external path.
`check_adjust`(accept_re, builder, file_o) | Map files to assigned path inside a container.
`check_valid_locations`(fs_access, ob) |

## Module Contents

class cwltool.command_line_tool.PathCheckingMode

  Bases: `enum.Enum`

  What characters are allowed in path names.

  We have the strict (default) mode and the relaxed mode.

  STRICT

    Accepts names that contain one or more of the following:

    `\w` | unicode word characters this includes most characters that can be part of a word in any language, as well as numbers and the underscore
    `.` | a literal period
    `+` | a literal plus sign
    `,` | a literal comma
    `-` | a literal minus sign
    `:` | a literal colon
    `@` | a literal at-symbol
    `]` | a literal end-square-bracket
    `^` | a literal caret symbol
    `\u2600-\u26FF` | matches a single character in the range between ☀ (index 9728) and ⛿ (index 9983)
    `\U0001f600-\U0001f64f` | matches a single character in the range between 😀 (index 128512) and 🙏 (index 128591)

    Note: the following characters are intentionally not included:

    1. reserved words in POSIX: `!`, `{`, `}`

    2. POSIX metacharacters listed in the CWL standard as okay to reject: `|`, `&`, `;`, `<`, `>`, `(`, `)`, `$`, ```, `"`, `'`, `<space>`, `<tab>`, `<newline>`.

       (In accordance with https://www.commonwl.org/v1.0/CommandLineTool.html#File under “path” )

    3. POSIX path separator: `\`

       (also listed at https://www.commonwl.org/v1.0/CommandLineTool.html#File under “path”)

    4. Additional POSIX metacharacters: `*`, `?`, `[`, `#`, `˜`, `=`, `%`.

    TODO: switch to https://pypi.org/project/regex/ and use `\p{Extended_Pictographic}` instead of the manual emoji ranges

  RELAXED

    Accept anything.

class cwltool.command_line_tool.ExpressionJob(builder, script, output_callback, requirements, hints, outdir=None, tmpdir=None)

  Job for `ExpressionTool`.

  Parameters:

    - builder (cwltool.builder.Builder)

    - script (str)

    - output_callback (cwltool.utils.OutputCallbackType | None)

    - requirements (list[cwltool.utils.CWLObjectType])

    - hints (list[cwltool.utils.CWLObjectType])

    - outdir (str | None)

    - tmpdir (str | None)

  builder
  requirements
  hints
  output_callback
  outdir = None
  tmpdir = None
  script
  run(runtimeContext, tmpdir_lock=None)
    Parameters:

      - runtimeContext (cwltool.context.RuntimeContext)

      - tmpdir_lock (Union[threading.Lock, None])

    Return type:

      None

class cwltool.command_line_tool.ExpressionTool(toolpath_object, loadingContext)

  Bases: `cwltool.process.Process`

  Abstract CWL Process.

  Parameters:

    - toolpath_object (ruamel.yaml.comments.CommentedMap)

    - loadingContext (cwltool.context.LoadingContext)

  job(job_order, output_callbacks, runtimeContext)
    Parameters:

      - job_order (cwltool.utils.CWLObjectType)

      - output_callbacks (cwltool.utils.OutputCallbackType | None)

      - runtimeContext (cwltool.context.RuntimeContext)

    Return type:

      collections.abc.Generator[ExpressionJob, None, None]

class cwltool.command_line_tool.AbstractOperation(toolpath_object, loadingContext)

  Bases: `cwltool.process.Process`

  Abstract CWL Process.

  Parameters:

    - toolpath_object (ruamel.yaml.comments.CommentedMap)

    - loadingContext (cwltool.context.LoadingContext)

  job(job_order, output_callbacks, runtimeContext)
    Parameters:

      - job_order (cwltool.utils.CWLObjectType)

      - output_callbacks (cwltool.utils.OutputCallbackType | None)

      - runtimeContext (cwltool.context.RuntimeContext)

    Return type:

      cwltool.utils.JobsGeneratorType

cwltool.command_line_tool.remove_path(f)

  Remove any ‘path’ property, if present.

  Parameters:

    f (cwltool.utils.CWLObjectType)

  Return type:

    None

cwltool.command_line_tool.revmap_file(builder, outdir, f)

  Remap a file from internal path to external path.

  For Docker, this maps from the path inside tho container to the path outside the container. Recognizes files in the pathmapper or remaps internal output directories to the external directory.

  Parameters:

    - builder (cwltool.builder.Builder)

    - outdir (str)

    - f (cwltool.utils.CWLObjectType)

  Return type:

    cwltool.utils.CWLObjectType | None

class cwltool.command_line_tool.CallbackJob(job, output_callback, cachebuilder, jobcache)

  Callback Job class, used by `CommandLineTool.job()`.

  Parameters:

    - job (CommandLineTool)

    - output_callback (cwltool.utils.OutputCallbackType | None)

    - cachebuilder (cwltool.builder.Builder)

    - jobcache (str)

  job
  output_callback
  cachebuilder
  outdir
  run(runtimeContext, tmpdir_lock=None)
    Parameters:

      - runtimeContext (cwltool.context.RuntimeContext)

      - tmpdir_lock (Union[threading.Lock, None])

    Return type:

      None

cwltool.command_line_tool.check_adjust(accept_re, builder, file_o)

  Map files to assigned path inside a container.

  We need to also explicitly walk over input, as implicit reassignment doesn’t reach everything in builder.bindings

  Parameters:

    - accept_re (re.Pattern[str])

    - builder (cwltool.builder.Builder)

    - file_o (cwltool.utils.CWLObjectType)

  Return type:

    cwltool.utils.CWLObjectType

cwltool.command_line_tool.check_valid_locations(fs_access, ob)
  Parameters:

    - fs_access (cwltool.stdfsaccess.StdFsAccess)

    - ob (cwltool.utils.CWLObjectType)

  Return type:

    None

cwltool.command_line_tool.OutputPortsType

exception cwltool.command_line_tool.ParameterOutputWorkflowException(msg, port, **kwargs)

  Bases: `cwltool.errors.WorkflowException`

  Common base class for all non-exit exceptions.

  Parameters:

    - msg (str)

    - port (cwltool.utils.CWLObjectType)

    - kwargs (Any)

class cwltool.command_line_tool.CommandLineTool(toolpath_object, loadingContext)

  Bases: `cwltool.process.Process`

  Abstract CWL Process.

  Parameters:

    - toolpath_object (ruamel.yaml.comments.CommentedMap)

    - loadingContext (cwltool.context.LoadingContext)

  path_check_mode: PathCheckingMode
  make_job_runner(runtimeContext)

    Return the correct CommandLineJob class given the container settings.

    Parameters:

      runtimeContext (cwltool.context.RuntimeContext)

    Return type:

      type[cwltool.job.JobBase]

  static make_path_mapper(reffiles, stagedir, runtimeContext, separateDirs)
    Parameters:

      - reffiles (list[cwltool.utils.CWLObjectType])

      - stagedir (str)

      - runtimeContext (cwltool.context.RuntimeContext)

      - separateDirs (bool)

    Return type:

      cwltool.pathmapper.PathMapper

  updatePathmap(outdir, pathmap, fn)

    Update a PathMapper with a CWL File or Directory object.

    Parameters:

      - outdir (str)

      - pathmap (cwltool.pathmapper.PathMapper)

      - fn (cwltool.utils.CWLObjectType)

    Return type:

      None

  job(job_order, output_callbacks, runtimeContext)
    Parameters:

      - job_order (cwltool.utils.CWLObjectType)

      - output_callbacks (cwltool.utils.OutputCallbackType)

      - runtimeContext (cwltool.context.RuntimeContext)

    Return type:

      collections.abc.Generator[cwltool.job.JobBase | CallbackJob, None, None]

  collect_output_ports(ports, builder, outdir, rcode, compute_checksum=True, jobname='', readers=None)
    Parameters:

      - ports (ruamel.yaml.comments.CommentedSeq | set[cwltool.utils.CWLObjectType])

      - builder (cwltool.builder.Builder)

      - outdir (str)

      - rcode (int)

      - compute_checksum (bool)

      - jobname (str)

      - readers (collections.abc.MutableMapping[str, cwltool.utils.CWLObjectType] | None)

    Return type:

      OutputPortsType

  collect_output(schema, builder, outdir, fs_access, compute_checksum=True)
    Parameters:

      - schema (cwltool.utils.CWLObjectType)

      - builder (cwltool.builder.Builder)

      - outdir (str)

      - fs_access (cwltool.stdfsaccess.StdFsAccess)

      - compute_checksum (bool)

    Return type:

      cwltool.utils.CWLOutputType | None