Source code for planemo.mulled

"""Planemo specific utilities for dealing with mulled containers.

The extend galaxy-tool-util's features with planemo specific idioms.
"""

import os
from typing import (
    Iterable,
    List,
)

from galaxy.tool_util.deps.mulled.mulled_build import (
    DEFAULT_CHANNELS,
    ensure_installed,
    InvolucroContext,
)
from galaxy.tool_util.deps.mulled.util import (
    build_target,
    CondaTarget,
)

from planemo.conda import collect_conda_target_lists
from planemo.io import shell


[docs] def conda_to_mulled_targets(conda_targets: Iterable[CondaTarget]) -> List[CondaTarget]: return list(map(lambda c: build_target(c.package, c.version), conda_targets))
[docs] def collect_mulled_target_lists(ctx, paths: Iterable[str], recursive: bool = False) -> List[List[CondaTarget]]: return list(map(conda_to_mulled_targets, collect_conda_target_lists(ctx, paths, recursive=recursive)))
[docs] def build_involucro_context(ctx, **kwds): """Build a galaxy-tool-util InvolucroContext tailored to planemo use. Using planemo's common command-line/global config options. """ involucro_path_default = os.path.join(ctx.workspace, "involucro") involucro_path = kwds.get("involucro_path", involucro_path_default) use_planemo_shell = kwds.get("use_planemo_shell_exec", True) shell_exec = shell if use_planemo_shell else None involucro_context = InvolucroContext(involucro_bin=involucro_path, shell_exec=shell_exec) if not ensure_installed(involucro_context, True): raise Exception("Failed to install involucro for Planemo.") return involucro_context
[docs] def build_mull_target_kwds(ctx, **kwds): """Adapt Planemo's CLI and workspace configuration to galaxy-tool-util's mulled_build options.""" involucro_context = build_involucro_context(ctx, **kwds) channels = kwds.get("conda_ensure_channels", ",".join(DEFAULT_CHANNELS)) namespace = kwds.get("mulled_namespace", "biocontainers") target_kwds = { "involucro_context": involucro_context, "channels": channels.split(","), "namespace": namespace, "verbose": ctx.verbose, } conda_version = kwds.get("mulled_conda_version", None) if conda_version is not None: target_kwds["conda_version"] = conda_version return target_kwds
__all__ = ( "build_involucro_context", "build_mull_target_kwds", "collect_mulled_target_lists", "conda_to_mulled_targets", )