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

.. py:module:: wfexs_backend.wfexs_backend

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

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

Classes
~~~~~~~

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

   * - :py:obj:`IdentifiedWorkflow <wfexs_backend.wfexs_backend.IdentifiedWorkflow>`
     - .. autodoc2-docstring:: wfexs_backend.wfexs_backend.IdentifiedWorkflow
          :summary:
   * - :py:obj:`WfExSBackend <wfexs_backend.wfexs_backend.WfExSBackend>`
     - .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend
          :summary:

API
~~~

.. py:class:: IdentifiedWorkflow
   :canonical: wfexs_backend.wfexs_backend.IdentifiedWorkflow

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

   .. autodoc2-docstring:: wfexs_backend.wfexs_backend.IdentifiedWorkflow

   .. py:attribute:: workflow_type
      :canonical: wfexs_backend.wfexs_backend.IdentifiedWorkflow.workflow_type
      :type: wfexs_backend.workflow_engines.WorkflowType
      :value: None

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.IdentifiedWorkflow.workflow_type

   .. py:attribute:: remote_repo
      :canonical: wfexs_backend.wfexs_backend.IdentifiedWorkflow.remote_repo
      :type: wfexs_backend.fetchers.RemoteRepo
      :value: None

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.IdentifiedWorkflow.remote_repo

.. py:exception:: WfExSBackendException()
   :canonical: wfexs_backend.wfexs_backend.WfExSBackendException

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

.. py:class:: WfExSBackend(local_config: Optional[WfExSConfigBlock] = None, config_directory: Optional[pathlib.Path] = None)
   :canonical: wfexs_backend.wfexs_backend.WfExSBackend

   .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend

   .. rubric:: Initialization

   .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.__init__

   .. py:attribute:: DEFAULT_PASSPHRASE_LENGTH
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.DEFAULT_PASSPHRASE_LENGTH
      :type: Final[int]
      :value: 4

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.DEFAULT_PASSPHRASE_LENGTH

   .. py:attribute:: CRYPT4GH_SECTION
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_SECTION
      :type: Final[str]
      :value: 'crypt4gh'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_SECTION

   .. py:attribute:: CRYPT4GH_PRIVKEY_KEY
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_PRIVKEY_KEY
      :type: Final[str]
      :value: 'key'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_PRIVKEY_KEY

   .. py:attribute:: CRYPT4GH_PUBKEY_KEY
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_PUBKEY_KEY
      :type: Final[str]
      :value: 'pub'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_PUBKEY_KEY

   .. py:attribute:: CRYPT4GH_PASSPHRASE_KEY
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_PASSPHRASE_KEY
      :type: Final[str]
      :value: 'passphrase'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.CRYPT4GH_PASSPHRASE_KEY

   .. py:attribute:: ID_JSON_FILENAME
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.ID_JSON_FILENAME
      :type: Final[str]
      :value: '.id.json'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.ID_JSON_FILENAME

   .. py:attribute:: SCHEMAS_REL_DIR
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.SCHEMAS_REL_DIR
      :type: Final[str]
      :value: 'schemas'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.SCHEMAS_REL_DIR

   .. py:attribute:: CONFIG_SCHEMA
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.CONFIG_SCHEMA
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.CONFIG_SCHEMA

   .. py:attribute:: _PassGen
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend._PassGen
      :type: ClassVar[Optional[WfExSPassphraseGenerator]]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend._PassGen

   .. py:method:: GetPassGen() -> wfexs_backend.utils.passphrase_wrapper.WfExSPassphraseGenerator
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.GetPassGen
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.GetPassGen

   .. py:method:: generate_passphrase() -> str
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.generate_passphrase
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.generate_passphrase

   .. py:method:: bootstrap_config(local_config_ro: wfexs_backend.wfexs_backend.WfExSConfigBlock, config_directory: Optional[pathlib.Path] = None, key_prefix: Optional[str] = None) -> Tuple[bool, WfExSConfigBlock, pathlib.Path]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.bootstrap_config
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.bootstrap_config

   .. py:method:: FromDescription(workflow_meta: wfexs_backend.workflow.WorkflowMetaConfigBlock, local_config: wfexs_backend.wfexs_backend.WfExSConfigBlock, vault: Optional[SecurityContextVault] = None, config_directory: Optional[pathlib.Path] = None, public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.FromDescription
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.FromDescription

   .. py:property:: cacheWorkflowDir
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheWorkflowDir
      :type: pathlib.Path

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheWorkflowDir

   .. py:property:: cacheROCrateDir
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheROCrateDir
      :type: pathlib.Path

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheROCrateDir

   .. py:property:: cacheTRSFilesDir
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheTRSFilesDir
      :type: pathlib.Path

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheTRSFilesDir

   .. py:property:: cacheWorkflowInputsDir
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheWorkflowInputsDir
      :type: pathlib.Path

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheWorkflowInputsDir

   .. py:method:: getCacheHandler(cache_type: wfexs_backend.common.CacheType) -> Tuple[SchemeHandlerCacheHandler, Optional[pathlib.Path]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getCacheHandler

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getCacheHandler

   .. py:method:: instantiateStatefulFetcher(statefulFetcher: Type[StatefulFetcher], setup_block: Optional[Mapping[str, Any]] = None) -> wfexs_backend.fetchers.StatefulFetcher
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.instantiateStatefulFetcher

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.instantiateStatefulFetcher

   .. py:method:: instantiateRepoFetcher(repoFetcher: Type[RepoFetcher], setup_block: Optional[Mapping[str, Any]] = None) -> wfexs_backend.fetchers.RepoFetcher
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.instantiateRepoFetcher

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.instantiateRepoFetcher

   .. py:method:: findAndAddWorkflowEnginesFromModuleName(the_module_name: str = 'wfexs_backend.workflow_engines') -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddWorkflowEnginesFromModuleName

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddWorkflowEnginesFromModuleName

   .. py:method:: findAndAddWorkflowEnginesFromModule(the_module: types.ModuleType) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddWorkflowEnginesFromModule

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddWorkflowEnginesFromModule

   .. py:method:: addWorkflowEngine(workflowEngineClazz: Type[WorkflowEngine]) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.addWorkflowEngine

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.addWorkflowEngine

   .. py:method:: listWorkflowEngines() -> Sequence[str]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.listWorkflowEngines

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.listWorkflowEngines

   .. py:method:: listWorkflowEngineClasses() -> Sequence[Type[WorkflowEngine]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.listWorkflowEngineClasses

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.listWorkflowEngineClasses

   .. py:method:: getWorkflowEngineClass(engine_shortname: str) -> Optional[Type[WorkflowEngine]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowEngineClass

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowEngineClass

   .. py:method:: matchWorkflowType(mainEntityProgrammingLanguageUrl: str, mainEntityProgrammingLanguageId: Optional[str]) -> wfexs_backend.workflow_engines.WorkflowType
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.matchWorkflowType

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.matchWorkflowType

   .. py:method:: findAndAddContainerFactoriesFromModuleName(the_module_name: str = 'wfexs_backend.container_factories') -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddContainerFactoriesFromModuleName

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddContainerFactoriesFromModuleName

   .. py:method:: findAndAddContainerFactoriesFromModule(the_module: types.ModuleType) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddContainerFactoriesFromModule

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddContainerFactoriesFromModule

   .. py:method:: addContainerFactory(containerFactoryClazz: Type[ContainerFactory]) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.addContainerFactory

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.addContainerFactory

   .. py:method:: listImplementedContainerTypes() -> Sequence[ContainerType]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.listImplementedContainerTypes

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.listImplementedContainerTypes

   .. py:method:: listContainerFactoryClasses() -> Sequence[Type[ContainerFactory]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.listContainerFactoryClasses

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.listContainerFactoryClasses

   .. py:method:: getContainerFactoryClass(container_type: wfexs_backend.common.ContainerType) -> Optional[Type[ContainerFactory]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getContainerFactoryClass

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getContainerFactoryClass

   .. py:method:: findAndAddExportPluginsFromModuleName(the_module_name: str = 'wfexs_backend.pushers') -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddExportPluginsFromModuleName

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddExportPluginsFromModuleName

   .. py:method:: findAndAddExportPluginsFromModule(the_module: types.ModuleType) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddExportPluginsFromModule

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddExportPluginsFromModule

   .. py:method:: addExportPlugin(exportClazz: Type[AbstractExportPlugin]) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.addExportPlugin

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.addExportPlugin

   .. py:method:: listExportPluginNames() -> Sequence[SymbolicName]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.listExportPluginNames

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.listExportPluginNames

   .. py:method:: getExportPluginClass(plugin_id: wfexs_backend.common.SymbolicName) -> Optional[Type[AbstractExportPlugin]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getExportPluginClass

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getExportPluginClass

   .. py:method:: findAndAddSchemeHandlersFromModuleName(the_module_name: str = 'wfexs_backend.fetchers', fetchers_setup_block: Optional[Mapping[str, Mapping[str, Any]]] = None) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddSchemeHandlersFromModuleName

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddSchemeHandlersFromModuleName

   .. py:method:: findAndAddSchemeHandlersFromModule(the_module: types.ModuleType, fetchers_setup_block: Optional[Mapping[str, Mapping[str, Any]]] = None) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddSchemeHandlersFromModule

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.findAndAddSchemeHandlersFromModule

   .. py:method:: addStatefulSchemeHandlers(statefulSchemeHandler: Type[AbstractStatefulFetcher], fetchers_setup_block: Optional[Mapping[str, Mapping[str, Any]]] = None) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.addStatefulSchemeHandlers

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.addStatefulSchemeHandlers

   .. py:attribute:: SCHEME_PAT
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.SCHEME_PAT
      :type: Final[Pattern[str]]
      :value: 'compile(...)'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.SCHEME_PAT

   .. py:method:: addSchemeHandlers(schemeHandlers: Mapping[str, Union[DocumentedProtocolFetcher, DocumentedStatefulProtocolFetcher]], fetchers_setup_block: Optional[Mapping[str, Mapping[str, Any]]] = None) -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.addSchemeHandlers

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.addSchemeHandlers

   .. py:method:: gen_workflow_pid(remote_repo: wfexs_backend.fetchers.RemoteRepo) -> str
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.gen_workflow_pid

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.gen_workflow_pid

   .. py:method:: describeFetchableSchemes() -> Sequence[Tuple[str, str, int]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.describeFetchableSchemes

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.describeFetchableSchemes

   .. py:method:: newSetup(workflow_id: wfexs_backend.workflow.WorkflowId, version_id: Optional[WFVersionId] = None, descriptor_type: Optional[TRS_Workflow_Descriptor] = None, trs_endpoint: str = WF.DEFAULT_TRS_ENDPOINT, params: Optional[ParamsBlock] = None, enabled_profiles: Optional[Sequence[str]] = None, environment: Optional[EnvironmentBlock] = None, outputs: Optional[OutputsBlock] = None, default_actions: Optional[Sequence[ExportActionBlock]] = None, workflow_config: Optional[WorkflowConfigBlock] = None, vault: Optional[SecurityContextVault] = None, public_key_filenames: Sequence[pathlib.Path] = [], private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> wfexs_backend.workflow.WF
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.newSetup

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.newSetup

   .. py:method:: createRawWorkDir(nickname_prefix: Optional[str] = None, orcids: Sequence[str] = []) -> Tuple[WfExSInstanceId, str, datetime.datetime, Sequence[str], pathlib.Path]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.createRawWorkDir

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.createRawWorkDir

   .. py:method:: getOrCreateRawWorkDirFromInstanceId(instanceId: wfexs_backend.common.WfExSInstanceId, nickname: Optional[str] = None, orcids: Sequence[str] = [], create_ok: bool = False) -> Tuple[WfExSInstanceId, str, datetime.datetime, Sequence[str], pathlib.Path]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getOrCreateRawWorkDirFromInstanceId

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getOrCreateRawWorkDirFromInstanceId

   .. py:method:: parseOrCreateRawWorkDir(uniqueRawWorkDir: pathlib.Path, instanceId: Optional[WfExSInstanceId] = None, nickname: Optional[str] = None, orcids: Sequence[str] = [], create_ok: bool = False) -> Tuple[WfExSInstanceId, str, datetime.datetime, Sequence[str], pathlib.Path]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.parseOrCreateRawWorkDir

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.parseOrCreateRawWorkDir

   .. py:method:: normalizeRawWorkingDirectory(uniqueRawWorkDir: pathlib.Path) -> Tuple[WfExSInstanceId, str, datetime.datetime, Sequence[str], pathlib.Path]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.normalizeRawWorkingDirectory

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.normalizeRawWorkingDirectory

   .. py:method:: fromWorkDir(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.wfexs_backend.WfExSBackend.fromWorkDir

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.fromWorkDir

   .. py:method:: getDefaultParanoidMode() -> bool
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getDefaultParanoidMode

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getDefaultParanoidMode

   .. py:method:: enableDefaultParanoidMode() -> None
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.enableDefaultParanoidMode

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.enableDefaultParanoidMode

   .. py:method:: fromFiles(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.wfexs_backend.WfExSBackend.fromFiles

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.fromFiles

   .. py:method:: fromPreviousInstanceDeclaration(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.wfexs_backend.WfExSBackend.fromPreviousInstanceDeclaration

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.fromPreviousInstanceDeclaration

   .. py:method:: fromPreviousROCrate(workflowROCrateFilenameOrURI: Union[AnyPath, URIType], 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.wfexs_backend.WfExSBackend.fromPreviousROCrate

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.fromPreviousROCrate

   .. py:method:: parseAndValidateSecurityContextFile(securityContextsConfigFilename: pathlib.Path) -> Tuple[ExitVal, SecurityContextConfigBlock]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.parseAndValidateSecurityContextFile

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.parseAndValidateSecurityContextFile

   .. py:method:: validateConfigFiles(workflowMetaFilename: Union[pathlib.Path, WorkflowMetaConfigBlock], securityContextsConfigFilename: Optional[pathlib.Path] = None) -> wfexs_backend.common.ExitVal
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.validateConfigFiles

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.validateConfigFiles

   .. py:method:: fromDescription(workflow_meta: wfexs_backend.workflow.WorkflowMetaConfigBlock, vault: Optional[SecurityContextVault] = 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.wfexs_backend.WfExSBackend.fromDescription

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.fromDescription

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

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.fromForm

   .. py:method:: getFusermountParams() -> Tuple[AnyPath, int]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getFusermountParams

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getFusermountParams

   .. py:method:: readSecuredWorkdirPassphrase(workdir_passphrase_file: pathlib.Path, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> Tuple[EncryptedFSType, AnyPath, str]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.readSecuredWorkdirPassphrase

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.readSecuredWorkdirPassphrase

   .. py:method:: generateSecuredWorkdirPassphrase(workdir_passphrase_file: pathlib.Path, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None, public_key_filenames: Sequence[pathlib.Path] = []) -> Tuple[EncryptedFSType, AnyPath, str, Sequence[pathlib.Path]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.generateSecuredWorkdirPassphrase

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.generateSecuredWorkdirPassphrase

   .. py:method:: listStagedWorkflows(*args: str, acceptGlob: bool = False, doCleanup: bool = True, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> Iterator[Tuple[WfExSInstanceId, str, datetime.datetime, Optional[StagedSetup], Optional[WF]]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.listStagedWorkflows

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.listStagedWorkflows

   .. py:method:: statusStagedWorkflows(*args: str, acceptGlob: bool = False, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> Iterator[Tuple[WfExSInstanceId, str, datetime.datetime, Optional[StagedSetup], Optional[MarshallingStatus]]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.statusStagedWorkflows

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.statusStagedWorkflows

   .. py:method:: removeStagedWorkflows(*args: str, acceptGlob: bool = False, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> Iterator[Tuple[WfExSInstanceId, str]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.removeStagedWorkflows

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.removeStagedWorkflows

   .. py:method:: shellFirstStagedWorkflow(*args: str, stdin: IO[str] = sys.stdin, stdout: IO[str] = sys.stdout, stderr: IO[str] = sys.stderr, acceptGlob: bool = False, firstMatch: bool = True, private_key_filename: Optional[pathlib.Path] = None, private_key_passphrase: Optional[str] = None) -> wfexs_backend.common.ExitVal
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.shellFirstStagedWorkflow

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.shellFirstStagedWorkflow

   .. py:method:: cacheFetch(remote_file: Union[LicensedURI, parse.ParseResult, URIType, Sequence[LicensedURI], Sequence[parse.ParseResult], Sequence[URIType]], cacheType: wfexs_backend.common.CacheType, offline: bool, ignoreCache: bool = False, registerInCache: bool = True, vault: Optional[SecurityContextVault] = None, sec_context_name: Optional[str] = None, default_clonable: bool = True) -> wfexs_backend.cache_handler.CachedContent
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheFetch

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheFetch

   .. py:method:: instantiateEngine(engineDesc: wfexs_backend.workflow_engines.WorkflowType, stagedSetup: wfexs_backend.common.StagedSetup) -> wfexs_backend.workflow_engines.AbstractWorkflowEngineType
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.instantiateEngine

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.instantiateEngine

   .. py:method:: guess_repo_params(wf_url: Union[URIType, parse.ParseResult], fail_ok: bool = False) -> Optional[RemoteRepo]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.guess_repo_params

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.guess_repo_params

   .. py:method:: cacheWorkflow(workflow_id: wfexs_backend.workflow.WorkflowId, version_id: Optional[WFVersionId] = None, trs_endpoint: Optional[str] = None, descriptor_type: Optional[TRS_Workflow_Descriptor] = None, ignoreCache: bool = False, registerInCache: bool = True, offline: bool = False, meta_dir: Optional[pathlib.Path] = None) -> Tuple[pathlib.Path, RemoteRepo, Optional[WorkflowType], Optional[RepoTag]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheWorkflow

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheWorkflow

   .. py:attribute:: TRS_METADATA_FILE
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.TRS_METADATA_FILE
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.TRS_METADATA_FILE

   .. py:attribute:: TRS_QUERY_CACHE_FILE
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.TRS_QUERY_CACHE_FILE
      :type: Final[RelPath]
      :value: 'cast(...)'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.TRS_QUERY_CACHE_FILE

   .. py:method:: getWorkflowRepoFromTRS(trs_endpoint: str, workflow_id: wfexs_backend.workflow.WorkflowId, version_id: Optional[WFVersionId], descriptor_type: Optional[TRS_Workflow_Descriptor], offline: bool = False, ignoreCache: bool = False, meta_dir: Optional[pathlib.Path] = None) -> Tuple[IdentifiedWorkflow, Optional[pathlib.Path]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowRepoFromTRS

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowRepoFromTRS

   .. py:method:: doMaterializeRepo(repo: wfexs_backend.fetchers.RemoteRepo, doUpdate: bool = True, registerInCache: bool = True) -> Tuple[pathlib.Path, RepoTag]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.doMaterializeRepo

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.doMaterializeRepo

   .. py:method:: _doMaterializeGitRepo(repo: wfexs_backend.fetchers.RemoteRepo, doUpdate: bool = True) -> Tuple[URIType, RepoTag, pathlib.Path, Sequence[URIWithMetadata]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend._doMaterializeGitRepo

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend._doMaterializeGitRepo

   .. py:method:: _doMaterializeSoftwareHeritageDirOrContent(repo: wfexs_backend.fetchers.RemoteRepo, doUpdate: bool = True) -> Tuple[URIType, RepoTag, pathlib.Path, Sequence[URIWithMetadata]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend._doMaterializeSoftwareHeritageDirOrContent

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend._doMaterializeSoftwareHeritageDirOrContent

   .. py:method:: getWorkflowBundleFromURI(remote_url: wfexs_backend.common.URIType, expectedEngineDesc: Optional[WorkflowType] = None, offline: bool = False, ignoreCache: bool = False, registerInCache: bool = True) -> Tuple[Optional[IdentifiedWorkflow], pathlib.Path, Sequence[URIWithMetadata]]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowBundleFromURI

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowBundleFromURI

   .. py:method:: getWorkflowRepoFromROCrateFile(roCrateFile: pathlib.Path, expectedEngineDesc: Optional[WorkflowType] = None) -> wfexs_backend.wfexs_backend.IdentifiedWorkflow
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowRepoFromROCrateFile

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.getWorkflowRepoFromROCrateFile

   .. py:attribute:: DEFAULT_RO_EXTENSION
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.DEFAULT_RO_EXTENSION
      :type: Final[str]
      :value: '.crate.zip'

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.DEFAULT_RO_EXTENSION

   .. py:method:: cacheROcrate(roCrateURL: wfexs_backend.common.URIType, offline: bool = False, ignoreCache: bool = False) -> pathlib.Path
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.cacheROcrate

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.cacheROcrate

   .. py:method:: downloadContent(remote_file: Union[LicensedURI, Sequence[LicensedURI]], dest: Union[pathlib.Path, CacheType], vault: Optional[SecurityContextVault] = None, offline: bool = False, ignoreCache: bool = False, registerInCache: bool = True, keep_cache_licence: bool = True, default_clonable: bool = True) -> wfexs_backend.common.MaterializedContent
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.downloadContent

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.downloadContent

   .. py:attribute:: _LicenceMatcher
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend._LicenceMatcher
      :type: ClassVar[Optional[LicenceMatcher]]
      :value: None

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend._LicenceMatcher

   .. py:method:: GetLicenceMatcher() -> wfexs_backend.utils.licences.LicenceMatcher
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.GetLicenceMatcher
      :classmethod:

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.GetLicenceMatcher

   .. py:method:: curate_licence_list(licences: Sequence[str], default_licence: Optional[LicenceDescription] = None) -> Sequence[LicenceDescription]
      :canonical: wfexs_backend.wfexs_backend.WfExSBackend.curate_licence_list

      .. autodoc2-docstring:: wfexs_backend.wfexs_backend.WfExSBackend.curate_licence_list
