Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/cwltool/software_requirements.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
| author | shellac |
|---|---|
| date | Mon, 01 Jun 2020 08:59:25 -0400 |
| parents | 79f47841a781 |
| children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/cwltool/software_requirements.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -"""This module handles resolution of SoftwareRequirement hints. - -This is accomplished mainly by adapting cwltool internals to galaxy-lib's -concept of "dependencies". Despite the name, galaxy-lib is a light weight -library that can be used to map SoftwareRequirements in all sorts of ways - -Homebrew, Conda, custom scripts, environment modules. We'd be happy to find -ways to adapt new packages managers and such as well. -""" -from __future__ import absolute_import - -import argparse # pylint: disable=unused-import -import os -import string -from typing import Dict, List, MutableSequence, Optional - -from typing_extensions import Text # pylint: disable=unused-import -# move to a regular typing import when Python 3.3-3.6 is no longer supported - -from .builder import Builder, HasReqsHints -try: - from galaxy.tool_util.deps.requirements import ToolRequirement, ToolRequirements - from galaxy.tool_util import deps -except ImportError: - ToolRequirement = None # type: ignore - ToolRequirements = None # type: ignore - deps = None # type: ignore - - -SOFTWARE_REQUIREMENTS_ENABLED = deps is not None - -COMMAND_WITH_DEPENDENCIES_TEMPLATE = string.Template("""#!/bin/bash -$handle_dependencies -python "run_job.py" "job.json" -""") - - -class DependenciesConfiguration(object): - - def __init__(self, args): - # type: (argparse.Namespace) -> None - """Initialize.""" - conf_file = getattr(args, "beta_dependency_resolvers_configuration", None) - tool_dependency_dir = getattr(args, "beta_dependencies_directory", None) - conda_dependencies = getattr(args, "beta_conda_dependencies", None) - if conf_file is not None and os.path.exists(conf_file): - self.use_tool_dependencies = True - if tool_dependency_dir is None: - tool_dependency_dir = os.path.abspath(os.path.dirname(conf_file)) - self.tool_dependency_dir = tool_dependency_dir - self.dependency_resolvers_config_file = os.path.abspath(conf_file) - elif conda_dependencies is not None: - if tool_dependency_dir is None: - tool_dependency_dir = os.path.abspath("./cwltool_deps") - self.tool_dependency_dir = tool_dependency_dir - self.use_tool_dependencies = True - self.dependency_resolvers_config_file = None - else: - self.use_tool_dependencies = False - - def build_job_script(self, builder, command): - # type: (Builder, List[str]) -> Text - ensure_galaxy_lib_available() - resolution_config_dict = { - 'use': self.use_tool_dependencies, - 'default_base_path': self.tool_dependency_dir, - } - app_config = { - 'conda_auto_install': True, - 'conda_auto_init': True, - } - tool_dependency_manager = deps.build_dependency_manager( - app_config_dict=app_config, - resolution_config_dict=resolution_config_dict, - conf_file=self.dependency_resolvers_config_file, - ) # type: deps.DependencyManager - dependencies = get_dependencies(builder) - handle_dependencies = "" # str - if dependencies: - handle_dependencies = "\n".join( - tool_dependency_manager.dependency_shell_commands( - dependencies, job_directory=builder.tmpdir)) - - template_kwds = dict(handle_dependencies=handle_dependencies) # type: Dict[str, str] - job_script = COMMAND_WITH_DEPENDENCIES_TEMPLATE.substitute(template_kwds) - return job_script - - -def get_dependencies(builder): # type: (HasReqsHints) -> ToolRequirements - (software_requirement, _) = builder.get_requirement("SoftwareRequirement") - dependencies = [] # type: List[ToolRequirement] - if software_requirement and software_requirement.get("packages"): - packages = software_requirement.get("packages") - for package in packages: - version = package.get("version", None) - if isinstance(version, MutableSequence): - if version: - version = version[0] - else: - version = None - specs = [{"uri": s} for s in package.get("specs", [])] - dependencies.append(ToolRequirement.from_dict(dict( - name=package["package"].split("#")[-1], - version=version, - type="package", - specs=specs, - ))) - - return ToolRequirements.from_list(dependencies) - - -def get_container_from_software_requirements(use_biocontainers, builder): - # type: (bool, HasReqsHints) -> Optional[Text] - if use_biocontainers: - ensure_galaxy_lib_available() - from galaxy.tool_util.deps.dependencies import AppInfo, ToolInfo - from galaxy.tool_util.deps.containers import ContainerRegistry, DOCKER_CONTAINER_TYPE - app_info = AppInfo( - involucro_auto_init=True, - enable_mulled_containers=True, - container_image_cache_path=".", - ) # type: AppInfo - container_registry = ContainerRegistry(app_info) # type: ContainerRegistry - requirements = get_dependencies(builder) - tool_info = ToolInfo(requirements=requirements) # type: ToolInfo - container_description = container_registry.find_best_container_description([DOCKER_CONTAINER_TYPE], tool_info) - if container_description: - return container_description.identifier - - return None - - -def ensure_galaxy_lib_available(): - # type: () -> None - if not SOFTWARE_REQUIREMENTS_ENABLED: - raise Exception("Optional Python library galaxy-lib not available, it is required for this configuration.")
