Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.tool_util.deps.singularity_util
import os
import shlex
from typing import (
List,
Optional,
Tuple,
TYPE_CHECKING,
Union,
)
if TYPE_CHECKING:
from .container_volumes import DockerVolume
DEFAULT_WORKING_DIRECTORY = None
DEFAULT_SINGULARITY_COMMAND = "singularity"
DEFAULT_CLEANENV = True
DEFAULT_NO_MOUNT = ["tmp"]
DEFAULT_SUDO = False
DEFAULT_SUDO_COMMAND = "sudo"
DEFAULT_RUN_EXTRA_ARGUMENTS = None
[docs]def pull_mulled_singularity_command(
docker_image_identifier: str,
cache_directory: str,
namespace: Optional[str] = None,
singularity_cmd: str = DEFAULT_SINGULARITY_COMMAND,
sudo: bool = DEFAULT_SUDO,
sudo_cmd: str = DEFAULT_SUDO_COMMAND,
) -> List[str]:
command_parts = []
command_parts += _singularity_prefix(
singularity_cmd=singularity_cmd,
sudo=sudo,
sudo_cmd=sudo_cmd,
)
save_path = docker_image_identifier
if namespace:
prefix = f"docker://quay.io/{namespace}/"
if docker_image_identifier.startswith(prefix):
save_path = docker_image_identifier[len(prefix) :]
command_parts.extend(["build", os.path.join(cache_directory, save_path), docker_image_identifier])
return command_parts
[docs]def pull_singularity_command(
image_identifier: str,
cache_path: str,
singularity_cmd: str = DEFAULT_SINGULARITY_COMMAND,
sudo: bool = DEFAULT_SUDO,
sudo_cmd: str = DEFAULT_SUDO_COMMAND,
) -> List[str]:
# Make sure cache dir exists
dirname = os.path.dirname(os.path.normpath(cache_path))
os.makedirs(dirname, exist_ok=True)
command_parts = _singularity_prefix(singularity_cmd, sudo, sudo_cmd)
command_parts.extend(["build", cache_path, image_identifier])
return command_parts
[docs]def build_singularity_run_command(
container_command: str,
image: str,
volumes: Optional[List["DockerVolume"]] = None,
env: Optional[List[Tuple[str, str]]] = None,
working_directory: Optional[str] = DEFAULT_WORKING_DIRECTORY,
singularity_cmd: str = DEFAULT_SINGULARITY_COMMAND,
run_extra_arguments: Optional[str] = DEFAULT_RUN_EXTRA_ARGUMENTS,
sudo: bool = DEFAULT_SUDO,
sudo_cmd: str = DEFAULT_SUDO_COMMAND,
guest_ports: Union[bool, List[str]] = False,
container_name: Optional[str] = None,
cleanenv: bool = DEFAULT_CLEANENV,
no_mount: Optional[List[str]] = DEFAULT_NO_MOUNT,
) -> str:
volumes = volumes or []
env = env or []
command_parts = []
# http://singularity.lbl.gov/docs-environment-metadata
home = None
for key, value in env:
if key == "HOME":
home = value
command_parts.extend([f"SINGULARITYENV_{key}={value}"])
command_parts += _singularity_prefix(
singularity_cmd=singularity_cmd,
sudo=sudo,
sudo_cmd=sudo_cmd,
)
command_parts.append("-s")
command_parts.append("exec")
if cleanenv:
command_parts.append("--cleanenv")
if no_mount:
command_parts.extend(["--no-mount", ",".join(no_mount)])
for volume in volumes:
command_parts.extend(["-B", str(volume)])
if home is not None:
command_parts.extend(["--home", f"{home}:{home}"])
if run_extra_arguments:
command_parts.append(run_extra_arguments)
full_image = image
command_parts.append(shlex.quote(full_image))
command_parts.append(container_command)
return " ".join(command_parts)
def _singularity_prefix(
singularity_cmd: str = DEFAULT_SINGULARITY_COMMAND,
sudo: bool = DEFAULT_SUDO,
sudo_cmd: str = DEFAULT_SUDO_COMMAND,
**kwds,
) -> List[str]:
"""Prefix to issue a singularity command."""
command_parts = []
if sudo:
command_parts.append(sudo_cmd)
command_parts.append(singularity_cmd)
return command_parts
__all__ = ("build_singularity_run_command", "pull_mulled_singularity_command", "pull_singularity_command")