:py:mod:`wfexs_backend.workflow`
================================

.. py:module:: wfexs_backend.workflow

.. autodoc2-docstring:: wfexs_backend.workflow
   :allowtitles:

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

Classes
~~~~~~~

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

   * - :py:obj:`ExportItem <wfexs_backend.workflow.ExportItem>`
     - .. autodoc2-docstring:: wfexs_backend.workflow.ExportItem
          :summary:
   * - :py:obj:`ExportAction <wfexs_backend.workflow.ExportAction>`
     - .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction
          :summary:
   * - :py:obj:`MaterializedExportAction <wfexs_backend.workflow.MaterializedExportAction>`
     - .. autodoc2-docstring:: wfexs_backend.workflow.MaterializedExportAction
          :summary:
   * - :py:obj:`DefaultMissing <wfexs_backend.workflow.DefaultMissing>`
     - .. autodoc2-docstring:: wfexs_backend.workflow.DefaultMissing
          :summary:
   * - :py:obj:`WF <wfexs_backend.workflow.WF>`
     - .. autodoc2-docstring:: wfexs_backend.workflow.WF
          :summary:

Functions
~~~~~~~~~

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

   * - :py:obj:`_wakeupEncDir <wfexs_backend.workflow._wakeupEncDir>`
     - .. autodoc2-docstring:: wfexs_backend.workflow._wakeupEncDir
          :summary:

API
~~~

.. py:class:: ExportItem
   :canonical: wfexs_backend.workflow.ExportItem

   Bases: :py:obj:`typing.NamedTuple`

   .. autodoc2-docstring:: wfexs_backend.workflow.ExportItem

   .. py:attribute:: type
      :canonical: wfexs_backend.workflow.ExportItem.type
      :type: wfexs_backend.common.ExportItemType
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportItem.type

   .. py:attribute:: block
      :canonical: wfexs_backend.workflow.ExportItem.block
      :type: Optional[str]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportItem.block

   .. py:attribute:: name
      :canonical: wfexs_backend.workflow.ExportItem.name
      :type: Optional[Union[SymbolicParamName, SymbolicOutputName]]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportItem.name

.. py:class:: ExportAction
   :canonical: wfexs_backend.workflow.ExportAction

   Bases: :py:obj:`typing.NamedTuple`

   .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction

   .. py:attribute:: action_id
      :canonical: wfexs_backend.workflow.ExportAction.action_id
      :type: wfexs_backend.common.SymbolicName
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.action_id

   .. py:attribute:: plugin_id
      :canonical: wfexs_backend.workflow.ExportAction.plugin_id
      :type: wfexs_backend.common.SymbolicName
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.plugin_id

   .. py:attribute:: what
      :canonical: wfexs_backend.workflow.ExportAction.what
      :type: Sequence[ExportItem]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.what

   .. py:attribute:: context_name
      :canonical: wfexs_backend.workflow.ExportAction.context_name
      :type: Optional[SymbolicName]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.context_name

   .. py:attribute:: setup
      :canonical: wfexs_backend.workflow.ExportAction.setup
      :type: Optional[SecurityContextConfig]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.setup

   .. py:attribute:: preferred_scheme
      :canonical: wfexs_backend.workflow.ExportAction.preferred_scheme
      :type: Optional[str]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.preferred_scheme

   .. py:attribute:: preferred_id
      :canonical: wfexs_backend.workflow.ExportAction.preferred_id
      :type: Optional[str]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.preferred_id

   .. py:attribute:: licences
      :canonical: wfexs_backend.workflow.ExportAction.licences
      :type: Sequence[str]
      :value: []

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.licences

   .. py:attribute:: title
      :canonical: wfexs_backend.workflow.ExportAction.title
      :type: Optional[str]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.title

   .. py:attribute:: description
      :canonical: wfexs_backend.workflow.ExportAction.description
      :type: Optional[str]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.description

   .. py:attribute:: custom_metadata
      :canonical: wfexs_backend.workflow.ExportAction.custom_metadata
      :type: Optional[Mapping[str, Any]]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.custom_metadata

   .. py:attribute:: community_custom_metadata
      :canonical: wfexs_backend.workflow.ExportAction.community_custom_metadata
      :type: Optional[Mapping[str, Any]]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.ExportAction.community_custom_metadata

.. py:class:: MaterializedExportAction
   :canonical: wfexs_backend.workflow.MaterializedExportAction

   Bases: :py:obj:`typing.NamedTuple`

   .. autodoc2-docstring:: wfexs_backend.workflow.MaterializedExportAction

   .. py:attribute:: action
      :canonical: wfexs_backend.workflow.MaterializedExportAction.action
      :type: wfexs_backend.workflow.ExportAction
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.MaterializedExportAction.action

   .. py:attribute:: elems
      :canonical: wfexs_backend.workflow.MaterializedExportAction.elems
      :type: Sequence[AnyContent]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.MaterializedExportAction.elems

   .. py:attribute:: pids
      :canonical: wfexs_backend.workflow.MaterializedExportAction.pids
      :type: Sequence[URIWithMetadata]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.MaterializedExportAction.pids

   .. py:attribute:: when
      :canonical: wfexs_backend.workflow.MaterializedExportAction.when
      :type: datetime.datetime
      :value: 'astimezone(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow.MaterializedExportAction.when

.. py:class:: DefaultMissing()
   :canonical: wfexs_backend.workflow.DefaultMissing

   Bases: :py:obj:`typing.Dict`\ [\ :py:obj:`wfexs_backend.workflow.KT`\ , :py:obj:`wfexs_backend.workflow.VT`\ ]

   .. autodoc2-docstring:: wfexs_backend.workflow.DefaultMissing

   .. rubric:: Initialization

   .. autodoc2-docstring:: wfexs_backend.workflow.DefaultMissing.__init__

   .. py:method:: __missing__(key: wfexs_backend.workflow.KT) -> wfexs_backend.workflow.VT
      :canonical: wfexs_backend.workflow.DefaultMissing.__missing__

      .. autodoc2-docstring:: wfexs_backend.workflow.DefaultMissing.__missing__

.. py:function:: _wakeupEncDir(cond: threading.Condition, workDir: pathlib.Path, logger: logging.Logger) -> None
   :canonical: wfexs_backend.workflow._wakeupEncDir

   .. autodoc2-docstring:: wfexs_backend.workflow._wakeupEncDir

.. py:exception:: WFException()
   :canonical: wfexs_backend.workflow.WFException

   Bases: :py:obj:`wfexs_backend.common.AbstractWfExSException`

.. py:exception:: ExportActionException()
   :canonical: wfexs_backend.workflow.ExportActionException

   Bases: :py:obj:`wfexs_backend.common.AbstractWfExSException`

.. py:exception:: WFWarning()
   :canonical: wfexs_backend.workflow.WFWarning

   Bases: :py:obj:`UserWarning`

.. py:class:: WF(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflow_id: Optional[WorkflowId] = None, version_id: Optional[WFVersionId] = None, descriptor_type: Optional[TRS_Workflow_Descriptor] = None, trs_endpoint: str = DEFAULT_TRS_ENDPOINT, params: Optional[ParamsBlock] = None, enabled_profiles: Optional[Sequence[str]] = None, environment: Optional[EnvironmentBlock] = None, outputs: Optional[OutputsBlock] = None, placeholders: Optional[PlaceHoldersBlock] = None, default_actions: Optional[Sequence[ExportActionBlock]] = None, workflow_config: Optional[WorkflowConfigBlock] = None, vault: Optional[SecurityContextVault] = None, instanceId: Optional[WfExSInstanceId] = None, nickname: Optional[str] = None, orcids: Sequence[str] = [], creation: Optional[datetime.datetime] = None, rawWorkDir: Optional[pathlib.Path] = None, paranoid_mode: Optional[bool] = None, public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, fail_ok: bool = False, cached_repo: Optional[Tuple[RemoteRepo, WorkflowType]] = None, cached_workflow: Optional[LocalWorkflow] = None, cached_inputs: Optional[Sequence[MaterializedInput]] = None, cached_environment: Optional[Sequence[MaterializedInput]] = None, preferred_containers: Sequence[Container] = [], preferred_operational_containers: Sequence[Container] = [], reproducibility_level: wfexs_backend.utils.rocrate.ReproducibilityLevel = ReproducibilityLevel.Minimal, strict_reproducibility_level: bool = False)
   :canonical: wfexs_backend.workflow.WF

   .. autodoc2-docstring:: wfexs_backend.workflow.WF

   .. rubric:: Initialization

   .. autodoc2-docstring:: wfexs_backend.workflow.WF.__init__

   .. py:attribute:: TRS_TOOL_FILES_FILE
      :canonical: wfexs_backend.workflow.WF.TRS_TOOL_FILES_FILE
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.TRS_TOOL_FILES_FILE

   .. py:attribute:: STAGE_DEFINITION_SCHEMA
      :canonical: wfexs_backend.workflow.WF.STAGE_DEFINITION_SCHEMA
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.STAGE_DEFINITION_SCHEMA

   .. py:attribute:: EXPORT_ACTIONS_SCHEMA
      :canonical: wfexs_backend.workflow.WF.EXPORT_ACTIONS_SCHEMA
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.EXPORT_ACTIONS_SCHEMA

   .. py:attribute:: STAGED_CRATE_FILE
      :canonical: wfexs_backend.workflow.WF.STAGED_CRATE_FILE
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.STAGED_CRATE_FILE

   .. py:attribute:: EXECUTION_CRATE_FILE
      :canonical: wfexs_backend.workflow.WF.EXECUTION_CRATE_FILE
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.EXECUTION_CRATE_FILE

   .. py:attribute:: DEFAULT_TRS_ENDPOINT
      :canonical: wfexs_backend.workflow.WF.DEFAULT_TRS_ENDPOINT
      :type: Final[str]
      :value: 'https://dev.workflowhub.eu/ga4gh/trs/v2/'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.DEFAULT_TRS_ENDPOINT

   .. py:attribute:: TRS_TOOLS_PATH
      :canonical: wfexs_backend.workflow.WF.TRS_TOOLS_PATH
      :type: Final[str]
      :value: 'tools/'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.TRS_TOOLS_PATH

   .. py:attribute:: FUSE_SYSTEM_CONF
      :canonical: wfexs_backend.workflow.WF.FUSE_SYSTEM_CONF
      :value: '/etc/fuse.conf'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FUSE_SYSTEM_CONF

   .. py:method:: getPID() -> Optional[str]
      :canonical: wfexs_backend.workflow.WF.getPID

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.getPID

   .. py:method:: setupWorkdir(doSecureWorkDir: bool, fail_ok: bool = False, public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> Tuple[bool, pathlib.Path]
      :canonical: wfexs_backend.workflow.WF.setupWorkdir

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.setupWorkdir

   .. py:method:: unmountWorkdir() -> None
      :canonical: wfexs_backend.workflow.WF.unmountWorkdir

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.unmountWorkdir

   .. py:method:: cleanup() -> None
      :canonical: wfexs_backend.workflow.WF.cleanup

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.cleanup

   .. py:method:: getStagedSetup() -> wfexs_backend.common.StagedSetup
      :canonical: wfexs_backend.workflow.WF.getStagedSetup

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.getStagedSetup

   .. py:method:: getMarshallingStatus(reread_stats: bool = False) -> wfexs_backend.common.MarshallingStatus
      :canonical: wfexs_backend.workflow.WF.getMarshallingStatus

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.getMarshallingStatus

   .. py:method:: getMaterializedWorkflow() -> Optional[LocalWorkflow]
      :canonical: wfexs_backend.workflow.WF.getMaterializedWorkflow

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.getMaterializedWorkflow

   .. py:method:: getMaterializedContainers() -> Sequence[Container]
      :canonical: wfexs_backend.workflow.WF.getMaterializedContainers

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.getMaterializedContainers

   .. py:method:: enableParanoidMode() -> None
      :canonical: wfexs_backend.workflow.WF.enableParanoidMode

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.enableParanoidMode

   .. py:method:: __read_yaml_config(filename: pathlib.Path) -> wfexs_backend.workflow.WritableWorkflowMetaConfigBlock
      :canonical: wfexs_backend.workflow.WF.__read_yaml_config
      :staticmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.__read_yaml_config

   .. py:method:: __merge_params_from_file(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, base_workflow_meta: wfexs_backend.workflow.WorkflowMetaConfigBlock, replaced_parameters_filename: pathlib.Path) -> Tuple[WritableWorkflowMetaConfigBlock, Mapping[str, Set[str]]]
      :canonical: wfexs_backend.workflow.WF.__merge_params_from_file
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.__merge_params_from_file

   .. py:method:: FromWorkDir(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflowWorkingDirectory: pathlib.Path, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, fail_ok: bool = False) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromWorkDir
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromWorkDir

   .. py:method:: FromFiles(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflowMetaFilename: pathlib.Path, securityContextsConfigFilename: Optional[pathlib.Path] = None, nickname_prefix: Optional[str] = None, orcids: Sequence[str] = [], public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, paranoidMode: bool = False) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromFiles
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromFiles

   .. py:method:: FromStagedRecipe(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflow_meta: wfexs_backend.workflow.WritableWorkflowMetaConfigBlock, securityContextsConfigFilename: Optional[pathlib.Path] = None, nickname_prefix: Optional[str] = None, orcids: Sequence[str] = [], public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, paranoidMode: bool = False, cached_repo: Optional[Tuple[RemoteRepo, WorkflowType]] = None, cached_workflow: Optional[LocalWorkflow] = None, cached_inputs: Optional[Sequence[MaterializedInput]] = None, cached_environment: Optional[Sequence[MaterializedInput]] = None, preferred_containers: Sequence[Container] = [], preferred_operational_containers: Sequence[Container] = [], reproducibility_level: wfexs_backend.utils.rocrate.ReproducibilityLevel = ReproducibilityLevel.Metadata, strict_reproducibility_level: bool = False) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromStagedRecipe
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromStagedRecipe

   .. py:method:: FromPreviousInstanceDeclaration(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, wfInstance: wfexs_backend.workflow.WF, securityContextsConfigFilename: Optional[pathlib.Path] = None, replaced_parameters_filename: Optional[pathlib.Path] = None, nickname_prefix: Optional[str] = None, orcids: Sequence[str] = [], public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, secure: bool = True, paranoidMode: bool = False, reproducibility_level: wfexs_backend.utils.rocrate.ReproducibilityLevel = ReproducibilityLevel.Metadata, strict_reproducibility_level: bool = False) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromPreviousInstanceDeclaration
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromPreviousInstanceDeclaration

   .. py:method:: _transferInputs(payload_dir: pathlib.Path, inputs_dir: pathlib.Path, cached_inputs: Sequence[MaterializedInput]) -> Sequence[MaterializedInput]
      :canonical: wfexs_backend.workflow.WF._transferInputs
      :staticmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._transferInputs

   .. py:method:: FromPreviousROCrate(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflowROCrateFilename: pathlib.Path, public_name: str, securityContextsConfigFilename: Optional[pathlib.Path] = None, replaced_parameters_filename: Optional[pathlib.Path] = None, nickname_prefix: Optional[str] = None, orcids: Sequence[str] = [], public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, secure: bool = True, paranoidMode: bool = False, reproducibility_level: wfexs_backend.utils.rocrate.ReproducibilityLevel = ReproducibilityLevel.Metadata, strict_reproducibility_level: bool = False, retrospective_first: bool = True) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromPreviousROCrate
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromPreviousROCrate

   .. py:method:: FromDescription(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflow_meta: wfexs_backend.workflow.WorkflowMetaConfigBlock, vault: wfexs_backend.security_context.SecurityContextVault, orcids: Sequence[str] = [], public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, paranoidMode: bool = False, cached_repo: Optional[Tuple[RemoteRepo, WorkflowType]] = None, cached_workflow: Optional[LocalWorkflow] = None, cached_inputs: Optional[Sequence[MaterializedInput]] = None, cached_environment: Optional[Sequence[MaterializedInput]] = None, preferred_containers: Sequence[Container] = [], preferred_operational_containers: Sequence[Container] = [], reproducibility_level: wfexs_backend.utils.rocrate.ReproducibilityLevel = ReproducibilityLevel.Metadata, strict_reproducibility_level: bool = False) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromDescription
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromDescription

   .. py:method:: FromForm(wfexs: wfexs_backend.wfexs_backend.WfExSBackend, workflow_meta: wfexs_backend.workflow.WorkflowMetaConfigBlock, orcids: Sequence[str] = [], public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, paranoidMode: bool = False) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.workflow.WF.FromForm
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.FromForm

   .. py:method:: fetchWorkflow(workflow_id: wfexs_backend.workflow.WorkflowId, version_id: Optional[WFVersionId], trs_endpoint: Optional[str], descriptor_type: Optional[TRS_Workflow_Descriptor], offline: bool = False, ignoreCache: bool = False, injectable_repo: Optional[Tuple[RemoteRepo, WorkflowType]] = None, injectable_workflow: Optional[LocalWorkflow] = None) -> None
      :canonical: wfexs_backend.workflow.WF.fetchWorkflow

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.fetchWorkflow

   .. py:method:: setupEngine(offline: bool = False, ignoreCache: bool = False, initial_engine_version: Optional[EngineVersion] = None, injectable_repo: Optional[Tuple[RemoteRepo, WorkflowType]] = None, injectable_workflow: Optional[LocalWorkflow] = None) -> None
      :canonical: wfexs_backend.workflow.WF.setupEngine

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.setupEngine

   .. py:method:: materializeWorkflowAndContainers(offline: bool = False, ignoreCache: bool = False, injectable_repo: Optional[Tuple[RemoteRepo, WorkflowType]] = None, injectable_workflow: Optional[LocalWorkflow] = None, injectable_containers: Sequence[Container] = [], injectable_operational_containers: Sequence[Container] = []) -> None
      :canonical: wfexs_backend.workflow.WF.materializeWorkflowAndContainers

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.materializeWorkflowAndContainers

   .. py:method:: materializeInputs(formatted_params: Union[ParamsBlock, Sequence[Mapping[str, Any]]], offline: bool = False, ignoreCache: bool = False, injectable_inputs: Optional[Sequence[MaterializedInput]] = None, lastInput: int = 0) -> Sequence[MaterializedInput]
      :canonical: wfexs_backend.workflow.WF.materializeInputs

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.materializeInputs

   .. py:method:: _buildLicensedURI(remote_file_f: wfexs_backend.workflow.Sch_InputURI_Fetchable, contextName: Optional[str] = None, licences: Tuple[URIType, ...] = DefaultNoLicenceTuple, attributions: Sequence[Attribution] = []) -> Tuple[Union[LicensedURI, Sequence[LicensedURI]], bool]
      :canonical: wfexs_backend.workflow.WF._buildLicensedURI

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._buildLicensedURI

   .. py:method:: _fetchRemoteFile(remote_file: wfexs_backend.workflow.Sch_InputURI_Fetchable, contextName: Optional[str], offline: bool, storeDir: Union[pathlib.Path, CacheType], cacheable: bool, inputDestDir: pathlib.Path, globExplode: Optional[str], prefix: str = '', hardenPrettyLocal: bool = False, prettyRelname: Optional[RelPath] = None, ignoreCache: bool = False, cloneToStore: bool = True) -> Sequence[MaterializedContent]
      :canonical: wfexs_backend.workflow.WF._fetchRemoteFile

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._fetchRemoteFile

   .. py:method:: _formatStringFromPlaceHolders(the_string: str, placeholders: Optional[PlaceHoldersBlock] = None) -> str
      :canonical: wfexs_backend.workflow.WF._formatStringFromPlaceHolders

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._formatStringFromPlaceHolders

   .. py:method:: _formatInputURIFromPlaceHolders(input_uri: wfexs_backend.workflow.Sch_InputURI) -> wfexs_backend.workflow.Sch_InputURI
      :canonical: wfexs_backend.workflow.WF._formatInputURIFromPlaceHolders

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._formatInputURIFromPlaceHolders

   .. py:method:: formatParams(params: Optional[ParamsBlock], prefix: str = '') -> Tuple[Optional[ParamsBlock] , Optional[Sequence[Sch_Output]]]
      :canonical: wfexs_backend.workflow.WF.formatParams

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.formatParams

   .. py:method:: _fetchContentWithURIs(inputs: wfexs_backend.workflow.ParamsBlock, linearKey: wfexs_backend.common.SymbolicParamName, workflowInputs_destdir: pathlib.Path, workflowExtrapolatedInputs_destdir: pathlib.Path, lastInput: int = 0, offline: bool = False, ignoreCache: bool = False, cloneToStore: bool = True) -> Tuple[Sequence[MaterializedInput], int, Sequence[str]]
      :canonical: wfexs_backend.workflow.WF._fetchContentWithURIs

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._fetchContentWithURIs

   .. py:method:: _injectContent(injectable_content: Sequence[MaterializedContent], dest_path: pathlib.Path, pretty_relname: str, last_input: int = 1) -> Tuple[MutableSequence[MaterializedContent], int]
      :canonical: wfexs_backend.workflow.WF._injectContent

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._injectContent

   .. py:method:: fetchInputs(params: Union[ParamsBlock, Sequence[ParamsBlock]], workflowInputs_destdir: pathlib.Path, workflowExtrapolatedInputs_destdir: pathlib.Path, prefix: str = '', injectable_inputs_dict: Mapping[str, MaterializedInput] = {}, lastInput: int = 0, offline: bool = False, ignoreCache: bool = False) -> Tuple[Sequence[MaterializedInput], int, Sequence[str]]
      :canonical: wfexs_backend.workflow.WF.fetchInputs

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.fetchInputs

   .. py:method:: stageWorkDir(offline: bool = False, ignoreCache: bool = False) -> wfexs_backend.common.StagedSetup
      :canonical: wfexs_backend.workflow.WF.stageWorkDir

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.stageWorkDir

   .. py:method:: workdirToBagit() -> bagit.Bag
      :canonical: wfexs_backend.workflow.WF.workdirToBagit

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.workdirToBagit

   .. py:attribute:: DefaultCardinality
      :canonical: wfexs_backend.workflow.WF.DefaultCardinality
      :value: '1'

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.DefaultCardinality

   .. py:attribute:: CardinalityMapping
      :canonical: wfexs_backend.workflow.WF.CardinalityMapping
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.CardinalityMapping

   .. py:attribute:: OutputClassMapping
      :canonical: wfexs_backend.workflow.WF.OutputClassMapping
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.OutputClassMapping

   .. py:method:: parseExpectedOutputs(outputs_to_inject: Sequence[Sch_Output], outputs: Union[Sequence[Sch_Output], Mapping[str, Sch_Output]], default_synthetic_output: bool) -> Sequence[ExpectedOutput]
      :canonical: wfexs_backend.workflow.WF.parseExpectedOutputs

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.parseExpectedOutputs

   .. py:method:: parseExportActions(raw_actions: Sequence[ExportActionBlock]) -> Sequence[ExportAction]
      :canonical: wfexs_backend.workflow.WF.parseExportActions

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.parseExportActions

   .. py:method:: executeWorkflow(offline: bool = False) -> wfexs_backend.workflow_engines.StagedExecution
      :canonical: wfexs_backend.workflow.WF.executeWorkflow

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.executeWorkflow

   .. py:method:: queueExecution(offline: bool = False) -> str
      :canonical: wfexs_backend.workflow.WF.queueExecution

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.queueExecution

   .. py:method:: listMaterializedExportActions() -> Sequence[MaterializedExportAction]
      :canonical: wfexs_backend.workflow.WF.listMaterializedExportActions

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.listMaterializedExportActions

   .. py:method:: exportResultsFromFiles(exportActionsFile: Optional[pathlib.Path] = None, securityContextFile: Optional[pathlib.Path] = None, action_ids: Sequence[SymbolicName] = [], fail_ok: bool = False) -> Tuple[Sequence[MaterializedExportAction], Sequence[Tuple[ExportAction, Exception]]]
      :canonical: wfexs_backend.workflow.WF.exportResultsFromFiles

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.exportResultsFromFiles

   .. py:method:: _curate_orcid_list(orcids: Sequence[str], fail_ok: bool = True) -> Sequence[ResolvedORCID]
      :canonical: wfexs_backend.workflow.WF._curate_orcid_list

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._curate_orcid_list

   .. py:method:: _instantiate_export_plugin(action: wfexs_backend.workflow.ExportAction, sec_context: Optional[SecurityContextConfig], default_licences: Sequence[LicenceDescription], default_orcids: Sequence[ResolvedORCID], default_preferred_id: Optional[str]) -> wfexs_backend.pushers.AbstractExportPlugin
      :canonical: wfexs_backend.workflow.WF._instantiate_export_plugin

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._instantiate_export_plugin

   .. py:method:: exportResults(actions: Optional[Sequence[ExportAction]] = None, vault: Optional[SecurityContextVault] = None, action_ids: Sequence[SymbolicName] = [], fail_ok: bool = False, op_licences: Sequence[str] = [], op_orcids: Sequence[str] = []) -> Tuple[Sequence[MaterializedExportAction], Sequence[Tuple[ExportAction, Exception]]]
      :canonical: wfexs_backend.workflow.WF.exportResults

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.exportResults

   .. py:property:: staging_recipe
      :canonical: wfexs_backend.workflow.WF.staging_recipe
      :type: wfexs_backend.workflow.WritableWorkflowMetaConfigBlock

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.staging_recipe

   .. py:method:: marshallConfig(overwrite: bool = False) -> Union[bool, datetime.datetime]
      :canonical: wfexs_backend.workflow.WF.marshallConfig

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.marshallConfig

   .. py:method:: __get_combined_globals() -> Mapping[str, Any]
      :canonical: wfexs_backend.workflow.WF.__get_combined_globals

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.__get_combined_globals

   .. py:method:: unmarshallConfig(fail_ok: bool = False) -> Optional[Union[bool, datetime.datetime]]
      :canonical: wfexs_backend.workflow.WF.unmarshallConfig

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.unmarshallConfig

   .. py:method:: marshallStage(exist_ok: bool = True, overwrite: bool = False) -> Optional[Union[bool, datetime.datetime]]
      :canonical: wfexs_backend.workflow.WF.marshallStage

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.marshallStage

   .. py:method:: unmarshallStage(offline: bool = False, fail_ok: bool = False, do_full_setup: bool = True) -> Optional[Union[bool, datetime.datetime]]
      :canonical: wfexs_backend.workflow.WF.unmarshallStage

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.unmarshallStage

   .. py:method:: marshallExecute(staged_exec: wfexs_backend.workflow_engines.StagedExecution) -> Optional[Union[bool, datetime.datetime]]
      :canonical: wfexs_backend.workflow.WF.marshallExecute

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.marshallExecute

   .. py:method:: unmarshallExecute(offline: bool = True, fail_ok: bool = False) -> Tuple[Optional[Union[bool, datetime.datetime]], Sequence[StagedExecution]]
      :canonical: wfexs_backend.workflow.WF.unmarshallExecute

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.unmarshallExecute

   .. py:method:: _unmarshallExecuteFH(meF: IO[str], creation_time: Optional[float] = None) -> Tuple[MutableSequence[StagedExecution], datetime.datetime]
      :canonical: wfexs_backend.workflow.WF._unmarshallExecuteFH

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._unmarshallExecuteFH

   .. py:method:: marshallExport(new_mat_actions: Sequence[MaterializedExportAction]) -> Optional[Union[bool, datetime.datetime]]
      :canonical: wfexs_backend.workflow.WF.marshallExport

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.marshallExport

   .. py:method:: unmarshallExport(offline: bool = True, fail_ok: bool = False) -> Optional[Union[bool, datetime.datetime]]
      :canonical: wfexs_backend.workflow.WF.unmarshallExport

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.unmarshallExport

   .. py:method:: _unmarshallExportFH(meF: IO[str], creation_time: Optional[float] = None) -> Tuple[MutableSequence[MaterializedExportAction], datetime.datetime]
      :canonical: wfexs_backend.workflow.WF._unmarshallExportFH

      .. autodoc2-docstring:: wfexs_backend.workflow.WF._unmarshallExportFH

   .. py:attribute:: ExportROCrate2Payloads
      :canonical: wfexs_backend.workflow.WF.ExportROCrate2Payloads
      :type: Final[Mapping[str, CratableItem]]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.ExportROCrate2Payloads

   .. py:method:: locateExportItems(items: Sequence[ExportItem], licences: Sequence[LicenceDescription] = [], resolved_orcids: Sequence[ResolvedORCID] = [], crate_pid: Optional[str] = None) -> Sequence[AnyContent]
      :canonical: wfexs_backend.workflow.WF.locateExportItems

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.locateExportItems

   .. py:method:: createStageResearchObject(filename: Optional[pathlib.Path] = None, payloads: wfexs_backend.common.CratableItem = NoCratableItem, licences: Sequence[LicenceDescription] = [], resolved_orcids: Sequence[ResolvedORCID] = [], crate_pid: Optional[str] = None) -> pathlib.Path
      :canonical: wfexs_backend.workflow.WF.createStageResearchObject

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.createStageResearchObject

   .. py:method:: createResultsResearchObject(filename: Optional[pathlib.Path] = None, payloads: wfexs_backend.common.CratableItem = NoCratableItem, licences: Sequence[LicenceDescription] = [], resolved_orcids: Sequence[ResolvedORCID] = [], crate_pid: Optional[str] = None) -> pathlib.Path
      :canonical: wfexs_backend.workflow.WF.createResultsResearchObject

      .. autodoc2-docstring:: wfexs_backend.workflow.WF.createResultsResearchObject
