:py:mod:`wfexs_backend.workflow_engines.cwl_engine`
===================================================

.. py:module:: wfexs_backend.workflow_engines.cwl_engine

.. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine
   :allowtitles:

Module Contents
---------------

Classes
~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`CWLWorkflowEngine <wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine>`
     -

Functions
~~~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`_normalize_image_id <wfexs_backend.workflow_engines.cwl_engine._normalize_image_id>`
     - .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine._normalize_image_id
          :summary:
   * - :py:obj:`_normalize_sif_id <wfexs_backend.workflow_engines.cwl_engine._normalize_sif_id>`
     - .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine._normalize_sif_id
          :summary:

API
~~~

.. py:function:: _normalize_image_id(string: str) -> wfexs_backend.common.RelPath
   :canonical: wfexs_backend.workflow_engines.cwl_engine._normalize_image_id

   .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine._normalize_image_id

.. py:function:: _normalize_sif_id(string: str) -> wfexs_backend.common.RelPath
   :canonical: wfexs_backend.workflow_engines.cwl_engine._normalize_sif_id

   .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine._normalize_sif_id

.. py:class:: CWLWorkflowEngine(container_factory_clazz: Type[ContainerFactory] = NoContainerFactory, cacheDir: Optional[pathlib.Path] = None, engine_config: Optional[EngineLocalConfig] = None, progs_mapping: Optional[ProgsMapping] = None, engineTweaksDir: Optional[pathlib.Path] = None, cacheWorkflowDir: Optional[pathlib.Path] = None, cacheWorkflowInputsDir: Optional[pathlib.Path] = None, workDir: Optional[pathlib.Path] = None, outputsDir: Optional[pathlib.Path] = None, outputMetaDir: Optional[pathlib.Path] = None, intermediateDir: Optional[pathlib.Path] = None, tempDir: Optional[pathlib.Path] = None, stagedContainersDir: Optional[pathlib.Path] = None, secure_exec: bool = False, allowOther: bool = False, config_directory: Optional[pathlib.Path] = None, writable_containers: bool = False)
   :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine

   Bases: :py:obj:`wfexs_backend.workflow_engines.WorkflowEngine`

   .. py:attribute:: CWLTOOL_PYTHON_PACKAGE
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWLTOOL_PYTHON_PACKAGE
      :value: 'cwltool'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWLTOOL_PYTHON_PACKAGE

   .. py:attribute:: CWL_UTILS_PYTHON_PACKAGE
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWL_UTILS_PYTHON_PACKAGE
      :value: 'cwl-utils'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWL_UTILS_PYTHON_PACKAGE

   .. py:attribute:: SCHEMA_SALAD_PYTHON_PACKAGE
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SCHEMA_SALAD_PYTHON_PACKAGE
      :value: 'schema-salad'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SCHEMA_SALAD_PYTHON_PACKAGE

   .. py:attribute:: CWL_REPO
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWL_REPO
      :value: 'https://github.com/common-workflow-language/'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWL_REPO

   .. py:attribute:: CWLTOOL_REPO
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWLTOOL_REPO
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWLTOOL_REPO

   .. py:attribute:: DEVEL_CWLTOOL_REPO
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEVEL_CWLTOOL_REPO
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEVEL_CWLTOOL_REPO

   .. py:attribute:: CWL_UTILS_REPO
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWL_UTILS_REPO
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWL_UTILS_REPO

   .. py:attribute:: DEFAULT_CWLTOOL_VERSION
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEFAULT_CWLTOOL_VERSION
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEFAULT_CWLTOOL_VERSION

   .. py:attribute:: DEVEL_CWLTOOL_PACKAGE
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEVEL_CWLTOOL_PACKAGE
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEVEL_CWLTOOL_PACKAGE

   .. py:attribute:: DEVEL_CWLTOOL_VERSION
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEVEL_CWLTOOL_VERSION
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.DEVEL_CWLTOOL_VERSION

   .. py:attribute:: PODMAN_CWLTOOL_VERSION
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.PODMAN_CWLTOOL_VERSION
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.PODMAN_CWLTOOL_VERSION

   .. py:attribute:: NO_WRAPPER_CWLTOOL_VERSION
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.NO_WRAPPER_CWLTOOL_VERSION
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.NO_WRAPPER_CWLTOOL_VERSION

   .. py:attribute:: CWLTOOL_MAX_PYVER
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWLTOOL_MAX_PYVER
      :type: Sequence[Tuple[Optional[int], Optional[int], EngineVersion]]
      :value: [(3, None), (3, 6), (None, None)]

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.CWLTOOL_MAX_PYVER

   .. py:attribute:: INPUT_DECLARATIONS_FILENAME
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.INPUT_DECLARATIONS_FILENAME
      :value: 'inputdeclarations.yaml'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.INPUT_DECLARATIONS_FILENAME

   .. py:attribute:: NODEJS_WRAPPER
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.NODEJS_WRAPPER
      :value: 'nodejs_wrapper.bash'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.NODEJS_WRAPPER

   .. py:attribute:: NODEJS_CONTAINER_TAG
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.NODEJS_CONTAINER_TAG
      :value: 'ContainerTaggedName(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.NODEJS_CONTAINER_TAG

   .. py:attribute:: OPERATIONAL_CONTAINER_TAGS
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.OPERATIONAL_CONTAINER_TAGS
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.OPERATIONAL_CONTAINER_TAGS

   .. py:attribute:: ENGINE_NAME
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.ENGINE_NAME
      :value: 'cwl'

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.ENGINE_NAME

   .. py:attribute:: SUPPORTED_CONTAINER_TYPES
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SUPPORTED_CONTAINER_TYPES
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SUPPORTED_CONTAINER_TYPES

   .. py:attribute:: SUPPORTED_SECURE_EXEC_CONTAINER_TYPES
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SUPPORTED_SECURE_EXEC_CONTAINER_TYPES
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SUPPORTED_SECURE_EXEC_CONTAINER_TYPES

   .. py:method:: MyWorkflowType() -> wfexs_backend.workflow_engines.WorkflowType
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.MyWorkflowType
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.MyWorkflowType

   .. py:method:: HasExplicitOutputs() -> bool
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.HasExplicitOutputs
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.HasExplicitOutputs

   .. py:method:: SupportedContainerTypes() -> Set[ContainerType]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SupportedContainerTypes
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SupportedContainerTypes

   .. py:method:: SupportedSecureExecContainerTypes() -> Set[ContainerType]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SupportedSecureExecContainerTypes
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.SupportedSecureExecContainerTypes

   .. py:property:: engine_url
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.engine_url
      :type: wfexs_backend.common.URIType

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.engine_url

   .. py:method:: identifyWorkflow(localWf: wfexs_backend.common.LocalWorkflow, engineVer: Optional[EngineVersion] = None) -> Union[Tuple[EngineVersion, LocalWorkflow], Tuple[None, None]]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.identifyWorkflow

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.identifyWorkflow

   .. py:method:: materializeEngineVersion(engineVersion: wfexs_backend.common.EngineVersion) -> Tuple[EngineVersion, pathlib.Path, Fingerprint]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.materializeEngineVersion

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.materializeEngineVersion

   .. py:method:: _materializeEngineVersionLocal(engineVersion: wfexs_backend.common.EngineVersion, search_other: bool = True) -> Tuple[EngineVersion, pathlib.Path, Fingerprint]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine._materializeEngineVersionLocal

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine._materializeEngineVersionLocal

   .. py:method:: _get_engine_version_str(matWfEng: wfexs_backend.workflow_engines.MaterializedWorkflowEngine) -> wfexs_backend.workflow_engines.WorkflowEngineVersionStr
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine._get_engine_version_str

   .. py:method:: __get_engine_version_str_local(matWfEng: wfexs_backend.workflow_engines.MaterializedWorkflowEngine) -> wfexs_backend.workflow_engines.WorkflowEngineVersionStr
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.__get_engine_version_str_local

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.__get_engine_version_str_local

   .. py:method:: _enrichWorkflowDeps(localWf: wfexs_backend.common.LocalWorkflow, engineVer: wfexs_backend.common.EngineVersion) -> wfexs_backend.common.LocalWorkflow
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine._enrichWorkflowDeps

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine._enrichWorkflowDeps

   .. py:method:: materializeWorkflow(matWorkflowEngine: wfexs_backend.workflow_engines.MaterializedWorkflowEngine, consolidatedWorkflowDir: pathlib.Path, offline: bool = False, profiles: Optional[Sequence[str]] = None) -> Tuple[MaterializedWorkflowEngine, Sequence[ContainerTaggedName]]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.materializeWorkflow

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.materializeWorkflow

   .. py:method:: sideContainers() -> Sequence[ContainerTaggedName]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.sideContainers

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.sideContainers

   .. py:method:: simpleContainerFileName(imageUrl: wfexs_backend.common.URIType) -> Sequence[RelPath]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.simpleContainerFileName

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.simpleContainerFileName

   .. py:method:: generateDotWorkflow(matWfEng: wfexs_backend.workflow_engines.MaterializedWorkflowEngine, dagFile: pathlib.Path) -> None
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.generateDotWorkflow
      :staticmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.generateDotWorkflow

   .. py:method:: launchWorkflow(matWfEng: wfexs_backend.workflow_engines.MaterializedWorkflowEngine, matInputs: Sequence[MaterializedInput], matEnvironment: Sequence[MaterializedInput], outputs: Sequence[ExpectedOutput], profiles: Optional[Sequence[str]] = None) -> Iterator[StagedExecution]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.launchWorkflow

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.launchWorkflow

   .. py:method:: createYAMLFile(matInputs: Sequence[MaterializedInput], cwlInputs: Mapping[SymbolicParamName, Any], filename: pathlib.Path) -> Mapping[SymbolicParamName, ExecInputVal]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.createYAMLFile

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.createYAMLFile

   .. py:method:: augmentCWLInputs(matInputs: Sequence[MaterializedInput], cwlInputs: Mapping[SymbolicParamName, Any]) -> Sequence[MaterializedInput]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.augmentCWLInputs

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.augmentCWLInputs

   .. py:method:: executionInputs(matInputs: Sequence[MaterializedInput], cwlInputs: Mapping[SymbolicParamName, Any]) -> Mapping[SymbolicParamName, ExecInputVal]
      :canonical: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.executionInputs

      .. autodoc2-docstring:: wfexs_backend.workflow_engines.cwl_engine.CWLWorkflowEngine.executionInputs
