diff env/lib/python3.9/site-packages/galaxy/tool_util/cwl/cwltool_deps.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.9/site-packages/galaxy/tool_util/cwl/cwltool_deps.py	Mon Mar 22 18:12:50 2021 +0000
@@ -0,0 +1,144 @@
+"""Logic for dealing with cwltool as an optional dependency.
+
+Use this as the import interface for cwltool and just call
+:func:`ensure_cwltool_available` before using any of the imported
+functionality at runtime.
+"""
+import re
+import warnings
+
+warnings.filterwarnings("ignore", message=r"[\n.]DEPRECATION: Python 2", module="cwltool")
+
+import requests
+
+try:
+    from cwltool import (
+        main,
+        workflow,
+        job,
+        process,
+        pathmapper,
+    )
+except ImportError:
+    main = None  # type: ignore
+    workflow = None  # type: ignore
+    job = None  # type: ignore
+    process = None  # type: ignore
+    pathmapper = None  # type: ignore
+
+try:
+    from cwltool.context import (
+        getdefault,
+        LoadingContext,
+        RuntimeContext,
+    )
+    from cwltool.job import relink_initialworkdir
+    from cwltool.stdfsaccess import StdFsAccess
+except ImportError:
+    getdefault = None  # type: ignore
+    LoadingContext = None  # type: ignore
+    relink_initialworkdir = None  # type: ignore
+    RuntimeContext = None  # type: ignore
+    StdFsAccess = None  # type: ignore
+
+try:
+    from cwltool import load_tool
+    from cwltool.load_tool import (
+        default_loader,
+        resolve_and_validate_document,
+    )
+except ImportError:
+    default_loader = None  # type: ignore
+    load_tool = None  # type: ignore
+    resolve_and_validate_document = None  # type: ignore
+
+
+def _has_relax_path_checks_flag():
+    """Return True if cwltool uses a flag to control path checks.
+
+    Old cwltool uses the module global below to control whether
+    it's strict about path checks. New versions use an attribute
+    of LoadingContext.
+
+    Once the version of cwltool required is new enough, we can remove
+    this function and simplify the conditionals where it's used.
+    """
+
+    lc = LoadingContext()
+    return hasattr(lc, "relax_path_checks")
+
+
+try:
+    from cwltool import command_line_tool
+    if not _has_relax_path_checks_flag():
+        command_line_tool.ACCEPTLIST_RE = command_line_tool.ACCEPTLIST_EN_RELAXED_RE
+except ImportError:
+    command_line_tool = None  # type: ignore
+
+try:
+    from cwltool.load_tool import resolve_and_validate_document
+except ImportError:
+    resolve_and_validate_document = None  # type: ignore
+
+try:
+    import shellescape
+except ImportError:
+    shellescape = None  # type: ignore
+
+try:
+    import schema_salad
+    from schema_salad import (
+        ref_resolver,
+        sourceline,
+    )
+except ImportError:
+    schema_salad = None  # type: ignore
+    ref_resolver = None  # type: ignore
+    sourceline = None  # type: ignore
+
+needs_shell_quoting = re.compile(r"""(^$|[\s|&;()<>\'"$@])""").search
+
+# if set to True, file format checking is not performed.
+beta_relaxed_fmt_check = True
+
+
+def ensure_cwltool_available():
+    """Assert optional dependencies proxied via this module are available at runtime.
+
+    Throw an ImportError with a description of the problem if they do not exist.
+    """
+    if main is None or workflow is None or shellescape is None:
+        message = "This feature requires cwltool and dependencies to be available, they are not."
+        if main is None:
+            message += " cwltool is not unavailable."
+        elif resolve_and_validate_document is None:
+            message += " cwltool.load_tool.resolve_and_validate_document is unavailable - cwltool version is too old."
+        if requests is None:
+            message += " Library 'requests' unavailable."
+        if shellescape is None:
+            message += " Library 'shellescape' unavailable."
+        if schema_salad is None:
+            message += " Library 'schema_salad' unavailable."
+        raise ImportError(message)
+
+
+__all__ = (
+    'default_loader',
+    'ensure_cwltool_available',
+    'getdefault',
+    'load_tool',
+    'LoadingContext',
+    'main',
+    'needs_shell_quoting',
+    'pathmapper',
+    'process',
+    'ref_resolver',
+    'relink_initialworkdir',
+    'resolve_and_validate_document',
+    'RuntimeContext',
+    'schema_salad',
+    'shellescape',
+    'sourceline',
+    'StdFsAccess',
+    'workflow',
+)