Skip to content

Commit 97a82d6

Browse files
committed
2X faster startup, defer galaxy-* imports to when needed
From 1.84user 0.18system 0:02.03elapsed to 0.71user 0.11system 0:00.83elapsed
1 parent 380143e commit 97a82d6

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

cwltool/builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
from .errors import WorkflowException
2424
from .loghandler import _logger
2525
from .mutation import MutationManager
26-
from .software_requirements import DependenciesConfiguration
2726
from .stdfsaccess import StdFsAccess
2827
from .utils import (
2928
CONTENT_LIMIT,
@@ -42,6 +41,7 @@
4241
ProvenanceProfile, # pylint: disable=unused-import
4342
)
4443
from .pathmapper import PathMapper
44+
from .software_requirements import DependenciesConfiguration
4545

4646
INPUT_OBJ_VOCAB: dict[str, str] = {
4747
"Any": "https://w3id.org/cwl/salad#Any",
@@ -106,7 +106,7 @@ def __init__(
106106
formatgraph: Optional[Graph],
107107
make_fs_access: type[StdFsAccess],
108108
fs_access: StdFsAccess,
109-
job_script_provider: Optional[DependenciesConfiguration],
109+
job_script_provider: Optional["DependenciesConfiguration"],
110110
timeout: float,
111111
debug: bool,
112112
js_console: bool,

cwltool/main.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,6 @@
8484
from .procgenerator import ProcessGenerator
8585
from .resolver import ga4gh_tool_registries, tool_resolver
8686
from .secrets import SecretStore
87-
from .software_requirements import (
88-
DependenciesConfiguration,
89-
get_container_from_software_requirements,
90-
)
9187
from .stdfsaccess import StdFsAccess
9288
from .subgraph import get_process, get_step, get_subgraph
9389
from .update import ALLUPDATES, UPDATES
@@ -1301,6 +1297,8 @@ def main(
13011297
use_conda_dependencies = getattr(args, "beta_conda_dependencies", None) # str
13021298

13031299
if conf_file or use_conda_dependencies:
1300+
from .software_requirements import DependenciesConfiguration
1301+
13041302
runtimeContext.job_script_provider = DependenciesConfiguration(args)
13051303
else:
13061304
runtimeContext.find_default_container = functools.partial(
@@ -1438,6 +1436,8 @@ def find_default_container(
14381436
) -> Optional[str]:
14391437
"""Find a container."""
14401438
if not default_container and use_biocontainers:
1439+
from .software_requirements import get_container_from_software_requirements
1440+
14411441
default_container = get_container_from_software_requirements(
14421442
use_biocontainers, builder, container_image_cache_path
14431443
)

cwltool/software_requirements.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,17 @@
1616
from .utils import HasReqsHints
1717

1818
if TYPE_CHECKING:
19+
from galaxy.tool_util.deps.requirements import ToolRequirements
20+
1921
from .builder import Builder
2022

2123
try:
22-
from galaxy.tool_util import deps
23-
from galaxy.tool_util.deps.requirements import ToolRequirement, ToolRequirements
24+
import galaxy.tool_util as galaxy_tool_util
2425
except ImportError:
25-
ToolRequirement = None # type: ignore
26-
ToolRequirements = None # type: ignore
27-
deps = None # type: ignore
26+
galaxy_tool_util = None # type: ignore
2827

2928

30-
SOFTWARE_REQUIREMENTS_ENABLED = deps is not None
29+
SOFTWARE_REQUIREMENTS_ENABLED = galaxy_tool_util is not None
3130

3231
COMMAND_WITH_DEPENDENCIES_TEMPLATE = string.Template(
3332
"""#!/bin/bash
@@ -74,6 +73,8 @@ def __init__(self, args: argparse.Namespace) -> None:
7473

7574
def build_job_script(self, builder: "Builder", command: list[str]) -> str:
7675
"""Use the galaxy-tool-util library to construct a build script."""
76+
from galaxy.tool_util import deps
77+
7778
ensure_galaxy_lib_available()
7879
resolution_config_dict = {
7980
"use": self.use_tool_dependencies,
@@ -102,8 +103,12 @@ def build_job_script(self, builder: "Builder", command: list[str]) -> str:
102103
return job_script
103104

104105

105-
def get_dependencies(builder: HasReqsHints) -> ToolRequirements:
106+
def get_dependencies(
107+
builder: HasReqsHints,
108+
) -> "ToolRequirements":
106109
(software_requirement, _) = builder.get_requirement("SoftwareRequirement")
110+
from galaxy.tool_util.deps.requirements import ToolRequirement, ToolRequirements
111+
107112
dependencies: list[Union["ToolRequirement", dict[str, Any]]] = []
108113
if software_requirement and software_requirement.get("packages"):
109114
packages = cast(

0 commit comments

Comments
 (0)